Armadillo-X1 で利用することができるデバイスドライバについて説明します。
各ドライバで利用しているソースコードの内主要なファイルのパスや、コンフィギュレーションに必要な情報、及びデバイスファイルなどについて記載します。
Armadillo-X1のハードウェアの構成情報やピンマルチプレクスの情報、i.MX 7Dualの初期化手順などが定義されています。
- 関連するソースコード
arch/arm/mach-imx/ |
arch/arm/mach-imx/armadillo_iotg_addon/ |
arch/arm/boot/dts/armadillo_x1.dts |
arch/arm/boot/dts/imx7s.dtsi |
arch/arm/boot/dts/imx7d.dtsi |
arch/arm/boot/dts/armadillo_iotg_addon.dtsi |
- Device Treeドキュメント
Documentation/devicetree/bindings/arm/arch_timer.txt |
Documentation/devicetree/bindings/arm/cpus.txt |
Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt |
Documentation/devicetree/bindings/clock/fixed-clock.txt |
Documentation/devicetree/bindings/sram/sram.txt |
Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt |
Armadillo-X1 では、フラッシュメモリを制御するソフトウェアとして MTD(Memory Technology Device) を利用しています。MTDのキャラクタデバイスまたはブロックデバイスを経由して、ユーザーランドからアクセスすることができます。
- 関連するソースコード
drivers/mtd/* |
drivers/mtd/spi-nor/spi-nor.c |
drivers/mtd/spi-nor/fsl-quadspi.c |
Armadillo-X1 のシリアルは、i.MX 7Dual の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。
Armadillo-X1 の標準状態では、UART5(CON4)をコンソールとして利用しています。
- フォーマット
データビット長: 7 or 8ビット |
ストップビット長: 1 or 2ビット |
パリティ: 偶数 or 奇数 or なし |
フロー制御: CTS/RTS or XON/XOFF or なし |
最大ボーレート: 4Mbps |
- 関連するソースコード
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/earlycon.c |
drivers/tty/serial/serial_mctrl_gpio.c |
drivers/tty/serial/imx.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/serial/fsl-imx-uart.txt |
Armadillo-X1 のEthernet(LAN)は、i.MX 7Dual の ENET(Ethernet MAC)を利用しています。
- 機能
通信速度: 1000Mbps(1000BASE-T), 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_fixup.c |
drivers/net/ethernet/freescale/fec_main.c |
drivers/net/ethernet/freescale/fec_ptp.c |
drivers/net/phy/mdio_bus.c |
drivers/net/phy/mdio_device.c |
drivers/net/phy/phy.c |
drivers/net/phy/phy_device.c |
drivers/net/phy/vitesse.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/net/fsl-fec.txt |
Armadillo-X1 には、Qualcomm Atheros製 AEH-AR9462 または SparkLAN 製 WPEB-265AXI(BT) [B33] が搭載されています。AEH-AR9462 および WPEB-265AXI(BT) [B33] のWLAN機能は、「PCI Express」に示す PCI Express に接続されています。
| |
---|
WPEB-265AXI(BT) [B33]では、BTのスキャン動作中に2.4GHz帯のWLAN通信が途切れる場合があります。これは、BTと2.4GHz帯のWLANでアンテナリソースが共有されており、BTのスキャン中はWLAN通信を行うことができない為です。スキャン以外のBT通信時にはこのような現象は発生しません。
BTのスキャン動作中にWLAN通信を行う場合は、次のような対策をとることをお勧めします。
|
- AEH-AR9462 機能
IEEE 802.11 a/b/g/n 準拠 |
最大通信速度: 300Mbps(論理値) |
動作モード: インフラストラクチャモード(STA/AP), アドホックモード |
チャンネル(2.4GHz): 1-13 |
チャンネル(5GHz): 36-48, 52-64, 100-140 |
- WPEB-265AXI(BT) [B33] 機能
IEEE 802.11 a/b/g/n/ac/ax 準拠 |
最大通信速度: 1200Mbps(論理値) |
動作モード: インフラストラクチャモード(STA/AP), アドホックモード |
チャンネル(2.4GHz)(STA/AP): 1-13 |
チャンネル(5GHz)(STA): 36-64, 100-140 (W52/W53/W56) |
チャンネル(5GHz)(AP): 36-48 (W52) |
- 関連するソースコード
drivers/net/wireless/ath/ath9k/ |
drivers/net/wireless/bcmdhd/ |
Armadillo-X1 には、Qualcomm Atheros製 AEH-AR9462 または SparkLAN 製 WPEB-265AXI(BT) [B33] が搭載されています。AEH-AR9462 および WPEB-265AXI(BT) [B33] のBT機能は、「USBハブ」に示す USB3503 に接続されています。
AEH-AR9462 および WPEB-265AXI(BT) [B33] は、Bluetooth(R) version 4.0に対応しており、BLE(Bluetooth Low Energy)、HS(High Speed)およびEDR(Enhanced Data Rate)が利用できます。
- 関連するソースコード
drivers/bluetooth/ath3k.c |
drivers/bluetooth/btusb.c |
| |
---|
AEH-AR9462のファームウェアは、ATDEにインストールされているfirmware-atherosパッケージに含まれています。ファームウェアはLinuxカーネルイメージ内に改変無く配置されます。
firmware-atherosの著作権およびライセンス情報については、ATDE上で/usr/share/doc/firmware-atheros/copyright を参照してください。
|
| |
---|
WPEB-265AXI(BT) [B33]のファームウェアは、ATDEにインストールされているfirmware-bcmdhdパッケージに含まれています。ファームウェアはLinuxカーネルイメージに組み込まれます。
|
Armadillo-X1 のSDホストは、i.MX 7Dual の uSDHC(Ultra Secured Digital Host Controller)を利用しています。
Armadillo-X1 では、SDスロット拡張ボードのSDインターフェース(CON2)がuSDHC1を利用しています。
- 機能
カードタイプ: SD/SDHC/SDXC/SDIO |
バス幅: 1bit or 4bit |
スピードモード: Default Speed(24MHz), High Speed(48MHz), UHS-I(196.36MHz) |
カードディテクトサポート |
ライトプロテクトサポート |
- デバイスファイル
メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'または'1')となります。 |
I/Oカードの場合は、ファンクションに応じたデバイスファイルとなります。 |
- 関連するソースコード
drivers/mmc/card/block.c |
drivers/mmc/card/queue.c |
drivers/mmc/core/ |
drivers/mmc/host/sdhci-esdhc-imx.c |
drivers/mmc/host/sdhci-pltfm.c |
drivers/mmc/host/sdhci.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt |
Documentation/devicetree/bindings/mmc/mmc-pwrseq-emmc.txt |
| |
---|
SDIOカードを利用する場合は、arch/arm/mach-imx/armadillo_iotg_addon/addon_atmark_techno_sd_x1_intf1.dts の"usdhc1"ターゲットに"use-sdio"プロパティを追加してください。
fragment@2 {
target = <&usdhc1>;
__overlay__ {
pinctrl-names = "default", "state_100mhz", "state_200mhz",
"state_power_off";
pinctrl-0 = <&pinctrl_usdhc1>;
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
pinctrl-3 = <&pinctrl_usdhc1_power_off>;
cd-gpios = <&gpio5 0 1>;
wp-gpios = <&gpio5 1 0>;
pinctrl-assert-gpios = <&gpio5 4 1>, /* SD1_CMD */
<&gpio5 5 1>, /* SD1_DATA0 */
<&gpio5 6 1>, /* SD1_DATA1 */
<&gpio5 7 1>, /* SD1_DATA2 */
<&gpio5 8 1>; /* SD1_DATA3 */
tuning-step = <2>;
vmmc-supply = <®_sd1_vmmc_intf1>;
enable-sdio-wakeup;
keep-power-in-suspend;
max-frequency = <100000000>;
use-sdio;
status = "okay";
};
};
"use-sdio"プロパティを追加しない場合、Advanced DMAエラーが発生する場合があります。
|
Armadillo-X1 のUSBホストは、i.MX 7Dual の USB-PHY(Universal Serial Bus 2.0 Integrated PHY) および USB(Universal Serial Bus Controller) を利用しています。
Armadillo-X1 では、USB ホストインターフェース(CON2)が OTG1 を利用しています。HSIC HOSTには「USBハブ」に示す USB3503 が接続されています。
- 機能
Universal Serial Bus Specification Revision 2.0 準拠 |
Enhanced Host Controller Interface (EHCI)準拠 |
転送レート: USB2.0 High-Speed (480Mbps), 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/debug.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 |
drivers/usb/phy/phy.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt |
Documentation/devicetree/bindings/usb/usbmisc-imx.txt |
Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt |
Documentation/devicetree/bindings/regulator/fixed-regulator.txt |
Armadillo-X1 には、Microchip製 USB3503 が搭載されています。USB3503 には、AEH-AR9462 または WPEB-265AXI(BT) [B33]が接続されています。
- 関連するソースコード
drivers/usb/misc/usb3503.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/usb/usb3503.txt |
- ドライブストレングス変更方法
Armadillo-X1はCON7,CON8に、USB3503からUSB信号を引き出すことが可能です。
CON7,CON8に引き出すUSB信号のドライブストレングスを変更したい場合は以下を参考にdtsを修正してください。
|
CON7に引き出されているUSB信号のドライブストレングスを変更します。この例では+10%です。
|
|
CON8に引き出されているUSB信号のドライブストレングスを変更します。この例では+20%です。
|
表7.3 CON7 ドライブストレングス
-5% | Nominal | +5% | +10% | +15% | +20% | +25% | +30% |
---|
0x01 | 0x00 | 0x03 | 0x02 | 0x05 | 0x04 | 0x07 | 0x06 |
表7.4 CON8 ドライブストレングス
-5% | Nominal | +5% | +10% | +15% | +20% | +25% | +30% |
---|
0x10 | 0x00 | 0x30 | 0x20 | 0x50 | 0x40 | 0x70 | 0x60 |
Armadillo-X1 のPCI Express、i.MX 7Dual の PCIe_PHY(PCI Express PHY) を利用しています。
Armadillo-X1 では、AEH-AR9462 または WPEB-265AXI(BT) [B33] が接続されています。
- 機能
PCI Express Base Specification 2.1 準拠 |
PIPE Specification 2.0 準拠 |
リンク幅: x1 |
転送レート: 5.0GT/s |
割り込み通知方式: INTx, MSI-X |
- 関連するソースコード
drivers/pci/host/pcie-designware.c |
drivers/pci/host/pci-imx6.c |
drivers/pci/* |
drivers/pci/pcie/* |
| |
---|
PCI_MSIを有効化すると、AEH-AR9462 および WPEB-265AXI(BT) [B33] が利用できなくなります。
|
Armadillo-X1 のリアルタイムクロックは、Board Management ICのRTC機能を利用しています。
Board Management ICのRTC機能は、I2C4 (I2Cノード: 3-0011) に接続されています。
- 関連するソースコード
drivers/rtc/class.c |
drivers/rtc/hctosys.c |
drivers/rtc/interface.c |
drivers/rtc/rtc-bmic.c |
drivers/rtc/rtc-dev.c |
drivers/rtc/rtc-lib.c |
drivers/rtc/rtc-proc.c |
drivers/rtc/rtc-sysfs.c |
drivers/rtc/systohc.c |
アラーム割り込みは、sysfs RTCクラスディレクトリ以下のファイルから利用できます。
wakealarm
ファイルにUNIXエポックからの経過秒数、または先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するにはwakealarm
ファイルに"+0"を書き込み、アラーム割り込みのキャンセル後に再設定する必要があります。アラーム割り込みの利用例を次に示します。
| |
---|
デバイスファイル(/dev/rtc0 )経由でもアラーム割り込みを利用することができます。より詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/rtc.txt )やサンプルプログラム(tools/testing/selftests/timers/rtctest.c )を参照してください。
|
| |
---|
date コマンドを利用して、UNIXエポックからの経過秒数を日時に変換することができます。
|
Armadillo-X1 の温度センサーは、i.MX 7Dualの TEMPMON(Temperature Monitor)を利用しています。
起動直後の設定では、i.MX 7Dualの測定温度が 105℃以上になった場合、Linuxカーネルが/sbin/poweroff
コマンドを実行し、システムを停止します。
システム停止後、温度が低下しても自動的には復旧はせずシステムが停止した状態となります。
- sysfsディレクトリ
/sys/class/thermal/thermal_zone1/ |
- 関連するソースコード
drivers/thermal/imx_thermal.c |
drivers/thermal/of-thermal.c |
drivers/thermal/step_wise.c |
drivers/thermal/thermal_core.c |
drivers/thermal/thermal_hwmon.c |
Armadillo-X1に搭載されたBoard Management ICのADコンバーター機能およびArmadillo-IoT 絶縁デジタル入出力/アナログ入力アドオン モジュール DA00(以降、絶縁IOアドオンモジュールと記載します)を利用することができます。
Board Management ICのADコンバーター機能は、I2C4(I2Cノード: 3-0012)に接続されています。Armadillo-X1の電源電圧およびBoard Management ICの外部バッテリーの電圧を測定することができます。
絶縁IOアドオンモジュールには、Microchip製 MCP3202 が搭載されています。MCP3202は、ECSPI1に接続されます。
- 機能(Board Management IC)
分解能: 12bit |
測定範囲: 0V 〜 3.3V(Board Management ICの電源電圧) |
- 機能(MCP3202)
分解能: 12bit |
測定範囲: 0V 〜 5.0V(MCP3202の電源電圧) |
- sysfsディレクトリ
デバイスを認識した順番で /sys/bus/iio/devices/iio:deviceN (Nは'0'からの連番)となります。 |
- デバイスファイル
デバイスを認識した順番で /dev/iio:deviceN (Nは'0'からの連番)となります。 |
- 関連するソースコード
drivers/iio/industrialio-buffer.c |
drivers/iio/industrialio-core.c |
drivers/iio/industrialio-event.c |
drivers/iio/industrialio-trigger.c |
drivers/iio/inkern.c |
drivers/iio/adc/bmic_adc.c |
drivers/iio/adc/mcp320x.c |
Armadillo-X1 に搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。
- 関連するソースコード
drivers/leds/led-class.c |
drivers/leds/led-core.c |
drivers/leds/led-triggers.c |
drivers/leds/leds-gpio.c |
drivers/leds/trigger/ledtrig-backlight.c |
drivers/leds/trigger/ledtrig-default-on.c |
drivers/leds/trigger/ledtrig-gpio.c |
drivers/leds/trigger/ledtrig-heartbeat.c |
drivers/leds/trigger/ledtrig-oneshot.c |
drivers/leds/trigger/ledtrig-timer.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/leds/leds-gpio.txt |
Armadillo-X1 に搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。
ユーザースイッチには、次に示すキーコードが割り当てられています。
表7.5 キーコード
ユーザースイッチ | キーコード | イベントコード |
---|
SW1 | KEY_1 | 2 |
- 関連するソースコード
drivers/input/evdev.c |
drivers/input/ff-core.c |
drivers/input/input-compat.c |
drivers/input/input-mt.c |
drivers/input/input-polldev.c |
drivers/input/input.c |
drivers/input/keyboard/gpio_keys.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/input/gpio-keys.txt |
Armadillo-X1 のI2Cインターフェースは、i.MX 7Dual の I2C(I2C Controller) を利用します。また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。
Armadillo-X1 で利用しているI2Cバスと、接続されるI2Cデバイスを次に示します。
表7.6 I2Cデバイス
I2Cバス | I2Cデバイス |
---|
アドレス | デバイス名 |
---|
2(I2C3) | 0x50 | M24C01-W EEPROM[] |
3(I2C4) | 0x08 | USB3503 USBハブ |
0x09 | PF3000 パワーマネジメントIC |
0x10 〜 0x17 | Board Management IC |
Armadillo-X1 の標準状態では、CONFIG_I2C_CHARDEVが有効となっているためユーザードライバでI2Cデバイスを制御することができます。ユーザードライバを利用する場合は、LinuxカーネルでI2Cデバイスに対応するデバイスドライバを無効にする必要があります。
- デバイスファイル
/dev/i2c-2 (I2C3) |
/dev/i2c-3 (I2C4) |
- 関連するソースコード
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 |
- Device Treeドキュメント
Documentation/devicetree/bindings/i2c/i2c-imx.txt |
Armadillo-X1 のSPIインターフェースは、i.MX 7Dual の ECSPI(Enhanced Configurable SPI)を利用します。
標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると、ユーザードライバでSPIデバイスを制御することができます。
- 関連するソースコード
drivers/spi/spi-bitbang.c |
drivers/spi/spi-imx.c |
drivers/spi/spi.c |
drivers/spi/spidev.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/spi/fsl-imx-cspi.txt |
Armadillo-X1 のウォッチドッグタイマーは、i.MX 7Dual の WDOG(Watchdog Timer) を利用しています。
ウォッチドッグタイマーは、U-Bootによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルは、ウォッチドッグタイマードライバの初期化時にタイムアウト時間を10秒に再設定します。
何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。
- 関連するソースコード
drivers/watchdog/imx2_wdt.c |
drivers/watchdog/watchdog_core.c |
drivers/watchdog/watchdog_dev.c |
- Device Treeドキュメント
Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt |
| |
---|
i.MX 7Dual の WDOG は、一度有効化すると無効化することができません。そのため、halt コマンドなどを実行してLinux カーネルを停止した場合は、ウォッチドッグタイマーのキックができなくなるためシステムリセットが発生します。
WDOGドライバーの終了処理では、タイムアウト時間をWDOGの最大値である128秒に設定します。
|
Armadillo-X1のパワーマネジメント機能は、LinuxのSPM(System Power Management)およびDPM(Device Power Management)を利用しています。パワーマネジメント状態を省電力モードに遷移させることにより、Armadillo-X1の消費電力を抑えることができます。
| |
---|
パワーマネジメント機能を利用する場合は、Linuxカーネル linux-4.9-x1-at2 以降(カーネルイメージ uImage-x1-v4.9-at2 以降)をご利用ください。
|
パワーマネジメント状態を省電力モードに遷移させると、アプリケーションの実行は一時停止し、Linuxカーネルはサスペンド状態となります。起床要因が発生すると、Linuxカーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。
Armadillo-X1が対応するパワーマネジメント状態と、/sys/power/state
に書き込む文字列の対応を次に示します。
表7.7 対応するパワーマネジメント状態
パワーマネジメント状態 | 文字列 | 説明 |
---|
Power-On Suspend | standby | Suspend-to-RAMよりも短時間で復帰することができる。 |
Suspend-to-RAM | mem | Power-On Suspendよりも消費電力を抑えることができる。 |
起床要因として利用可能なデバイスは次の通りです。
表7.8 起床要因として利用可能なデバイス
デバイス | 起床要因の有効化 | 起床要因 |
---|
UART5(CON4) |
| データ受信 |
UART7(CON7) |
| データ受信 |
Ethernet(CON1) |
| Wake-on-LANのマジックパケットを受信 |
USBホスト(CON2) |
| USBデバイスの挿抜 |
| |
---|
Ethernetから起床要因であるWake-on-LANのマジックパケットを、ATDEから送信する例を次に示します。
|