Armadillo-IoT で利用することができるデバイスドライバについて説明します。
各ドライバで利用しているソースコードの内主要なファイルのパスや、コンフィギュレーションに必要な情報、及びデバイスファイルなどについて記載します。
8.3.1. Armadillo-IoT ゲートウェイ スタンダードモデル
Armadillo-IoT ゲートウェイ スタンダードモデル の初期化手順やハードウェアの構成情報、ピンマルチプレクスの情報などが定義されています。ユーザーオリジナルのアドオンモジュールを利用する場合などに変更を加えます。
- 関連するソースコード
arch/arm/mach-imx/avic.c |
arch/arm/mach-imx/clk-imx25.c |
arch/arm/mach-imx/clk-pllv1.c |
arch/arm/mach-imx/cpu-imx25.c |
arch/arm/mach-imx/cpu.c |
arch/arm/mach-imx/ehci-imx25.c |
arch/arm/mach-imx/imx25-gpio.c |
arch/arm/mach-imx/iomux-v3.c |
arch/arm/mach-imx/irq-common.c |
arch/arm/mach-imx/mach-armadillo_iotg_std.c |
arch/arm/mach-imx/mm-imx25.c |
arch/arm/mach-imx/system.c |
arch/arm/mach-imx/time.c |
arch/arm/mach-imx/armadillo_iotg_std_addon/ |
arch/arm/mach-imx/devices/ |
ユーザーオリジナルのアドオンモジュールを利用する場合には、アットマークテクノ製アドオンモジュールの自動検出機能を示す「Add-on Module Auto Detect」の選択を外します。
「Add-On Module Auto Detect」の選択を外すと、アドオンインターフェースで実現することのできる機能を選択することができます。コンフィギュレーションで機能を明示的に割り当てない全てのピンにはGPIO機能が割り当てられます。
機能が割り当てられるピンを調べるには、各項目のヘルプを参照します。次に示す例では、「Enable UART1 at CON1/CON2」を選択した場合に、アドオンインターフェース(ベースボード:CON1) 7ピンと アドオンインターフェース(ベースボード:CON2) 41ピンに UART1のRXD信号が、アドオンインターフェース(ベースボード:CON1) 8ピンと アドオンインターフェース(ベースボード:CON2) 40ピンに UART1のTXD信号が割り当てられることが確認できます。
Armadillo-IoT では、フラッシュメモリを制御するソフトウェアとして MTD(Memory Technology Device) を利用しています。MTDのキャラクタデバイスまたはブロックデバイスを経由して、ユーザーランドからアクセスすることができます。
- 関連するソースコード
drivers/mtd/cmdlinepart.c |
drivers/mtd/maps/physmap.c |
drivers/mtd/mtd_blkdevs.c |
drivers/mtd/mtdblock.c |
drivers/mtd/mtdchar.c |
drivers/mtd/mtdconcat.c |
drivers/mtd/mtdcore.c |
drivers/mtd/mtdpart.c |
drivers/mtd/mtdsuper.c |
drivers/mtd/chips/cfi_cmdset_0001.c |
drivers/mtd/chips/cfi_probe.c |
drivers/mtd/chips/cfi_util.c |
drivers/mtd/chips/chipreg.c |
drivers/mtd/chips/gen_probe.c |
Armadillo-IoT のシリアルは、i.MX257 の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。
Armadillo-IoT のシリアルは、最大5ポートを利用することができます。標準状態では、UART2(ベースボード:CON9)をコンソールとして利用しています。
- フォーマット
データビット長: 7 or 8ビット |
ストップビット長: 1 or 2ビット |
パリティ: 偶数 or 奇数 or なし |
フロー制御: CTS/RTS or XON/XOFF or なし |
最大ボーレート: 4Mbps |
| |
---|
高速なボーレート(1Mbps以上など)を設定して大量のデータを受信した場合、TTYバッファ(サイズ: 64kByte)が枯渇してユーザーランドからデータが取得できない場合があります。この場合、ユーザーランドでZMODEMのように確認応答と再送制御に対応したプロトコルを利用するなどの対策を行う必要があります。
|
- 関連するソースコード
drivers/tty/n_tty.c |
drivers/tty/tty_buffer.c |
drivers/tty/tty_io.c |
drivers/tty/tty_ioctl.c |
drivers/tty/tty_ldisc.c |
drivers/tty/tty_ldsem.c |
drivers/tty/tty_mutex.c |
drivers/tty/tty_port.c |
drivers/tty/serial/serial_core.c |
drivers/tty/serial/imx.c |
Armadillo-IoT のEthernet(LAN)は、i.MX257 の FEC(Fast Ethernet Controller)を利用しています。
- 機能
通信速度: 100Mbps(100BASE-TX), 10Mbps(10BASE-T) |
通信モード: Full-Duplex(全二重), Half-Duplex(半二重) |
Auto Negotiationサポート |
キャリア検知サポート |
リンク検出サポート |
- 関連するソースコード
drivers/net/Space.c |
drivers/net/loopback.c |
drivers/net/mii.c |
drivers/net/ethernet/freescale/fec_main.c |
drivers/net/ethernet/freescale/fec_ptp.c |
drivers/net/phy/mdio_bus.c |
drivers/net/phy/phy.c |
drivers/net/phy/phy_device.c |
Armadillo-IoT には、Sierra Wireless製 HL8548 が搭載されています。HL8548 は、USB Hostポートに接続されています。
- ネットワークデバイス
工場出荷状態の Armadillo-IoT のユーザーランドでは、udev によって次のようにネットワークデバイス名を変更します。
- デバイスファイル
/dev/ttyACM0[] |
/dev/ttyACM1[] |
/dev/ttyACM2[] |
工場出荷状態の Armadillo-IoT のユーザーランドでは、udev によって次のようにシンボリックリンクを作成します。
- 関連するソースコード
drivers/net/usb/usbnet.c |
drivers/usb/class/cdc-acm.c |
|
Armadillo-IoT のSDホストは、i.MX257 の eSDHC(Enhanced Secured Digital Host Controller)を利用しています。
Armadillo-IoT では、最大2ポートを利用することができます。SDインターフェース(Armadillo-410:CON1)がeSDHC1を、SDインターフェース(ベースボード:CON4)がeSDHC2を利用しています。
- 機能
カードタイプ(Armadillo-410:CON1): microSD/microSDHC/microSDXC |
カードタイプ(ベースボード:CON4): SD/SDHC/SDXC |
バス幅: 4bit |
スピードモード: Default Speed(24MHz), High Speed(48MHz) |
カードディテクトサポート(ベースボード:CON4のみ) |
ライトプロテクトサポート(ベースボード:CON4のみ) |
- デバイスファイル
メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'または'1')となります。 |
I/Oカードの場合は、ファンクションに応じたデバイスファイルとなります。 |
- 関連するソースコード
drivers/mmc/card/block.c |
drivers/mmc/card/queue.c |
drivers/mmc/core/ |
drivers/mmc/host/mx_sdhci.c |
drivers/mmc/host/sdhci-esdhc-imx.c |
drivers/mmc/host/sdhci-pltfm.c |
drivers/mmc/host/sdhci.c |
SD インターフェース(ベースボード:CON4)とWLAN インターフェース(ベースボード:CON5)は、共通の信号が接続されています。「eSDHC2 select function」では、デフォルトでどちらの信号に接続するかを選択します。
Armadillo-IoT のUSBホストは、i.MX257 の UTMI-USB-PHY および USBOH(Universal Serial Bus OTG and Host) を利用しています。
Armadillo-IoT では、USB ホストインターフェース(ベースボード:CON7)の OTGポートのみを利用することができます。Hostポートは「3G」に示す HL8548 に接続されています。
- 機能
Universal Serial Bus Specification Revision 2.0 準拠 |
Enhanced Host Controller Interface (EHCI)準拠 |
転送レート(OTG): USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps) |
転送レート(Host): USB2.0 Full-Speed (12Mbps), Low-Speed (1.5Mbps) |
- デバイスファイル
メモリデバイスの場合は、デバイスを認識した順番で/dev/sdN (Nは'a'からの連番)となります。 |
I/Oデバイスの場合は、ファンクションに応じたデバイスファイルとなります。 |
- 関連するソースコード
drivers/usb/chipidea/ci_hdrc_imx.c |
drivers/usb/chipidea/ci_hdrc_msm.c |
drivers/usb/chipidea/ci_hdrc_zevio.c |
drivers/usb/chipidea/core.c |
drivers/usb/chipidea/host.c |
drivers/usb/chipidea/otg.c |
drivers/usb/chipidea/usbmisc_imx.c |
drivers/usb/host/ehci-hcd.c |
drivers/usb/host/ehci-hub.c |
drivers/usb/phy/phy-generic.c |
Armadillo-IoT には、セイコーインスツル(SII)製 S-35390Aが搭載されています。
S-35390Aは、I2C-GPIO3 (I2Cノード: 3-0030) に接続されています。
- 関連するソースコード
drivers/rtc/class.c |
drivers/rtc/hctosys.c |
drivers/rtc/interface.c |
drivers/rtc/rtc-dev.c |
drivers/rtc/rtc-lib.c |
drivers/rtc/rtc-proc.c |
drivers/rtc/rtc-s35390a.c |
drivers/rtc/rtc-sysfs.c |
drivers/rtc/systohc.c |
アラーム割り込みは、sysfs RTCクラスディレクトリ以下のファイルから利用できます。
wakealarm
ファイルにUNIXエポックからの経過秒数、または先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するにはwakealarm
ファイルに"+0"を書き込み、アラーム割り込みのキャンセル後に再設定する必要があります。アラーム割り込みの利用例を次に示します。
| |
---|
デバイスファイル(/dev/rtc0 )経由でもアラーム割り込みを利用することができます。サンプルプログラムなどのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/rtc.txt )を参照してください。
|
| |
---|
date コマンドを利用して、UNIXエポックからの経過秒数を日時に変換することができます。
|
Armadillo-IoT には、NXP セミコンダクターズ製 LM75B が搭載されています。
LM75B は、I2C-GPIO3 (I2C ノード: 3-0048) に接続されています。LM75B の OS(Overtemperature Shutdown output)信号は、GPIO(GPIOディレクトリ:/sys/class/gpio/TEMP_ALERT_N/
)に接続されているため、事前に指定した温度を超えたかどうか確認することができます。
- 機能
分解能: 0.125℃ |
測定範囲: -55℃ 〜 +125℃ |
|
|
- sysfsディレクトリ
/sys/devices/platform/i2c-gpio.3/i2c-3/3-0048/ |
- 関連するソースコード
drivers/hwmon/hwmon.c |
drivers/hwmon/lm75.c |
Armadillo-IoT には Texas Instruments製 ADC081C021 が、Armadillo-IoT 絶縁デジタル入出力/アナログ入力アドオン モジュール DA00(以降、絶縁 IO アドオンモジュールと記載します) には、Microchip製 MCP3202 が搭載されています。
ADC081C021 は、I2C-GPIO3 (I2C ノード: 3-0054) に接続されています。ADC081C021 の ALERT 信号は、GPIOに接続されており、事前に指定した電圧を超えた場合、デバイスファイル /dev/iio:deviceN
(Nは'0'からの連番)からイベントを受け取ることができます。
イベントの受け取り方法は、Atmark Distに含まれるvintrigger
のソースコード vendors/AtmarkTechno/Armadillo-IoTG-Std/vintrigger/vintrigger.c
を参照してください。
MCP3202 は、絶縁 IO アドオンモジュールをアドオンインターフェース(ベースボード:CON1)に接続した場合は SPI2 に、アドオンインターフェース(ベースボード:CON2)に接続した場合は SPI3 に接続されています。
- 機能(ADC081C021)
分解能: 8bit |
測定範囲: 0V 〜 3.3V(ADC081C021の電源電圧) |
|
|
- 機能(MCP3202)
分解能: 12bit |
測定範囲: 0V 〜 5.0V(MCP3202の電源電圧) |
|
|
- sysfsディレクトリ
デバイスを認識した順番で /sys/bus/iio/devices/iio:deviceN (Nは'0'からの連番)となります。 |
- デバイスファイル
デバイスを認識した順番で /dev/iio:deviceN (Nは'0'からの連番)となります。 |
- 関連するソースコード
drivers/iio/industrialio-core.c |
drivers/iio/industrialio-buffer.c |
drivers/iio/industrialio-event.c |
drivers/iio/industrialio-trigger.c |
drivers/iio/industrialio-triggered-buffer.c |
drivers/iio/inkern.c |
drivers/iio/kfifo_buf.c |
drivers/iio/trigger/iio-trig-sysfs.c |
drivers/iio/adc/mcp320x.o |
drivers/iio/adc/ti-adc081c.c |
Armadillo-IoT に搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。
Armadillo-410には、LED5が実装されています。
ベースボードには、LED2〜LED5が実装されています。
Linuxカーネルでは、Armadillo-410 に実装されたLEDを色の名前(yellow)と命名して区別しています。
- sysfs LEDクラスディレクトリ
/sys/class/leds/led1 |
/sys/class/leds/led2 |
/sys/class/leds/led3 |
/sys/class/leds/led4 |
/sys/class/leds/yellow |
- 関連するソースコード
drivers/leds/led-class.c |
drivers/leds/led-core.c |
drivers/leds/led-triggers.c |
drivers/leds/leds-gpio-register.c |
drivers/leds/leds-gpio.c |
drivers/leds/trigger/ledtrig-default-on.c |
drivers/leds/trigger/ledtrig-heartbeat.c |
drivers/leds/trigger/ledtrig-timer.c |
Armadillo-IoT に搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys, gpio-keys-polled)で制御することができます。
ユーザースイッチには、次に示すキーコードが割り当てられています。
表8.3 キーコード
ユーザースイッチ | キーコード | イベントコード |
---|
ベースボード:SW1 | KEY_1 | 2 |
ベースボード:SW2 | KEY_2 | 3 |
ベースボード:SW3 | KEY_3 | 4 |
ユーザースイッチを制御する GPIO接続用キーボードドライバは次の通りです。
表8.4 GPIO接続用キーボードドライバ
ユーザースイッチ | GPIO接続用キーボードドライバ |
---|
ベースボード:SW1 | gpio-keys |
ベースボード:SW2 | gpio-keys-polled |
ベースボード:SW3 |
| |
---|
SW2 と SW3は、GPIO エクスパンダに接続されています。Armadillo-IoT では、GPIO エクスパンダの割り込み信号を利用していないため、イベント割り込みの対応が必須である gpio-keys を利用することができません。そのため、イベントをポーリングする gpio-keys-polled を利用しています。
|
- 関連するソースコード
drivers/input/evdev.c |
drivers/input/ff-core.c |
drivers/input/input-compat.c |
drivers/input/input-core.c |
drivers/input/input-mt.c |
drivers/input/input-polldev.c |
drivers/input/input.c |
drivers/input/keyboard/gpio_keys.c |
drivers/input/keyboard/gpio_keys_polled.c |
Armadillo-IoT のI2Cインターフェースは、i.MX257 の I2C(Inter IC Module) を利用します。
また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。
Armadillo-IoT で利用しているI2Cバスと、接続されるI2Cデバイスを次に示します。
表8.5 I2Cデバイス
I2Cバス | I2Cデバイス |
---|
アドレス | デバイス名 |
---|
0(I2C1) | 0x54 | MC34704マルチチャンネルパワーマネジメントIC |
3(I2C-GPIO3) | 0x30 (0x31〜0x37も予約済み) | S-35390Aリアルタイムクロック |
0x48 | LM75B温度センサ |
0x54 | ADC081C021コンバーター |
0x71[] | PCA9538 GPIO エクスパンダ |
4(I2C-GPIO4) | 0x50 | M24C01-W EEPROM[] |
0x51 | M24C01-W EEPROM[] |
Armadillo-IoT の標準状態では、CONFIG_I2C_CHARDEVが有効となっているためユーザードライバでI2Cデバイスを制御することができます。ユーザードライバを利用する場合は、LinuxカーネルでI2Cデバイスに対応するデバイスドライバを無効にする必要があります。
- 機能
最大転送レート: 400kbps (I2C1, I2C2, I2C3) |
- デバイスファイル
/dev/i2c-0 (I2C1) |
/dev/i2c-3 (I2C-GPIO3) |
/dev/i2c-4 (I2C-GPIO4) |
- 関連するソースコード
drivers/i2c/i2c-boardinfo.c |
drivers/i2c/i2c-core.c |
drivers/i2c/i2c-dev.c |
drivers/i2c/algos/i2c-algo-bit.c |
drivers/i2c/busses/i2c-gpio.c |
drivers/i2c/busses/i2c-imx.c |
Armadillo-IoT のSPIインターフェースは、i.MX257 の CSPI(Configurable Serial Peripheral Interface)を利用します。
標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると、ユーザードライバでSPIデバイスを制御することができます。
- 関連するソースコード
drivers/spi/spi-bitbang.c |
drivers/spi/spi-imx.c |
drivers/spi/spi.c |
drivers/spi/spidev.c |
Armadillo-IoT のウォッチドッグタイマーは、i.MX257 の WDOG(Watchdog Timer) を利用します。
ウォッチドッグタイマーは、Hermit-Atブートローダーによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルでは、ウォッチドッグタイマードライバの初期化時に、このタイムアウト時間を上書きします。標準状態のタイムアウト時間は60秒です。カーネルタイマーを利用して定期的にウォッチドッグタイマーをキックします。
何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。
- 関連するソースコード
drivers/watchdog/imx2_wdt.c |
| |
---|
i.MX257 の WDOG は、一度有効化すると無効化することができません。そのため、halt コマンドなどを実行してLinux カーネルを停止した場合は、ウォッチドッグタイマーのキックができなくなるためシステムリセットが発生します。
WDOGドライバーの終了処理では、タイムアウト時間をWDOGの最大値である128秒に設定します。
|
Armadillo-IoT の PWM は、i.MX257 の PWM(Pulse-Width Modulator) を利用します。
Armadillo-IoT の標準状態では、PWM を利用することができません。PWM を利用するには、カーネルコンフィギュレーションしカーネルイメージを変更する必要があります。
- 関連するソースコード
drivers/pwm/core.c |
drivers/pwm/pwm-imx.c |
drivers/pwm/sysfs.c |