Armadillo-400 シリーズで利用することができるデバイスドライバについて説明します。
各ドライバで利用しているソースコードの内主要なファイルのパスや、コンフィギュレーションに必要な情報、及びデバイスファイルなどについて記載します。
Armadillo-400 シリーズの初期化手順やハードウェアの構成情報、ピンマルチプレクスの情報などが定義されています。
- 関連するソースコード
arch/arm/mach-imx/mach-armadillo4x0.c |
arch/arm/mach-imx/armadillo4x0_extif.c |
Armadillo-400 シリーズでは、フラッシュメモリを制御するソフトウェアとして 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-400 シリーズのシリアルは、i.MX257 の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。
i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-400 シリーズでは、UART2をコンソールとして利用しています。
- フォーマット
データビット長: 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/imx.c |
Armadillo-400 シリーズの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-400 シリーズのSDホストは、i.MX257 の eSDHC(Enhanced Secured Digital Host Controller)を利用しています。
i.MX257はSDホストコントローラを 2個搭載しており、ArmadilloのCON1(SDインターフェース)にeSDHC1が割り当てられています。また、カーネルコンフィギュレーションを変更することにより、CON9にeSDHC2を割り当てる事ができます。
- 機能
カードタイプ: SD/SDHC/SDXC |
バス幅: 4bit |
スピードモード: Default Speed(24MHz), High Speed(48MHz) |
カードディテクトサポート(CON9のみ) |
ライトプロテクトサポート(CON9のみ) |
- デバイスファイル
メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'からの連番)となります。 |
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 |
Armadillo-400 シリーズのUSBホストは、i.MX257 の UTMI-USB-PHY および USBOH(Universal Serial Bus OTG and Host) を利用しています。
Armadillo-400 シリーズでは、USB ホストインターフェース下段のOTGポートおよびUSB ホストインターフェース上段のHOSTポートを利用することができます。
- 機能
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'からの連番)となります。 |
- 関連するソースコード
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-440 のビデオ出力機能は、フレームバッファデバイスとして実装しています。
Armadillo-440 液晶モデルの標準は、Armadillo-400シリーズLCD拡張ボードに合わせ、解像度 480 × 272 ピクセル、カラーフォーマット RGB 565 に設定されています。
- 機能
最大解像度 SVGA |
カラーフォーマット: RGB 565カラー |
- 関連するソースコード
drivers/video/imxfb.c |
drivers/video/logo/logo_armadillo_clut224.c |
Armadillo-440の LEDバックライト機能は、バックライトクラスとして実装しています。
Armadillo-440は、汎用のPWM機能を使用しバックライトの制御を行なっています。PWM機能の詳細に関しては「PWM」を参照してください。
| |
---|
Armadillo-400シリーズで採用している i.MX25プロセッサが内蔵している LCDC (Liquid Crystal Display Controller)は、バックライト制御機能を有していますが、Armadillo-440では、これを使用していません。
|
- sysfs バックライトクラスディレクトリ
バックライト輝度調整: /sys/class/backlight/pwm-backlight/brightness |
バックライト点灯/消灯制御: /sys/class/backlight/pwm-backlight/bl_power |
- 関連するソースコード
drivers/video/backlight/backlight.c |
drivers/video/backlight/pwm_bl.c |
Armadillo-440 の タッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとして、イベントインターフェースを提供しています。
タッチスクリーンは、次に示すイベントが発生します。
表9.3 タッチスクリーンイベント
Type | Code | Value |
---|
EV_KEY(1) | BTN_TOUCH(330) | 0 or 1 |
EV_ABS(3) | ABS_X(0) | 100〜4000 |
EV_ABS(3) | ABS_Y(1) | 100〜4000 |
EV_ABS(3) | ABS_PRESSURE(24) | 0 or 1 |
| |
---|
イベントデバイスの番号は、検出された順番に割り振られます。そのため、USBキーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。
|
- 関連するソースコード
drivers/imx/adc/imx_adc.c |
drivers/input/touchscreen/imx_adc_ts.c |
| |
---|
Atmark Distで作成したユーザーランドは、タッチスクリーンへの入力は、タッチスクリーンデバイスドライバを通り、タッチスクリーン用ライブラリ(tslib)経由でアプリケーションプログラムに伝わります。入力位置の補正は、tslibのレイヤーで行う事ができます。具体的な方法は、HowTo: Armadillo-400シリーズのタッチスクリーンの位置ずれを補正するを参照してください。
|
Armadillo-400シリーズのオーディオ機能は、ALSAデバイスとして実装しています。
Armadillo-400シリーズLCD拡張ボードには、オーディオコーデックとしてWolfson WM8978が採用されています。Armadillo-400シリーズの標準では、オーディオコーデックをWM8978として実装しています。
オーディオデバイスの制御は、ALSAライブラリ(libasound2) を通じて行う事ができます。
| |
---|
Armadillo-400シリーズのオーディオドライバーは、録音と再生を同時に行う事はできません
|
- 機能
Playback(2ch) / Capture(1ch) |
サンプリング周波数: 48k,32k,16k,8k [Hz] |
フォーマット: Signed 16/24 bit, Little-endian |
| |
---|
現状のカーネルは、モノラル録音に対応していません。Armadillo-400シリーズLCD拡張ボードのモノラルマイク入力(CON3)が Lチャンネルに、無音がRチャンネルに 録音される実装になっています。
|
- 関連するソースコード
sound/soc/codecs/wm8978.c |
sound/soc/fsl/armadillo4x0-wm8978.c |
sound/soc/fsl/imx-audmux.c |
sound/soc/fsl/imx-pcm-dma.c |
sound/soc/fsl/imx-ssi.c |
i.MX25 は、オーディオマルチプレクスにより、オーディオ機能をどのピンで使用するかを選択することができます。オーディオマルチプレクスは、カーネルコンフィギュレーションにより、オーディオ機能を AUD5(CON11)で使用するか、AUD6(CON9)で使用するかを選択する事ができます。Armadillo-440 の標準状態では、AUD5 を使用するようになっており、オーディオ機能は CON11 に接続されます。
| |
---|
Armadillo-400シリーズLCD拡張ボードを接続せずに、標準イメージをArmadillo-440で起動すると、以下のメッセージが数回表示されます。
これは、オーディオドライバが、LCD拡張ボードに搭載されているWM8978 コーデックを検出できないために発生します。
armadillo4x0_wm8978 armadillo4x0_wm8978.0: ASoC: CODEC wm8978.2-001a not registered
armadillo4x0_wm8978 armadillo4x0_wm8978.0: snd_soc_register_card failed (-517)
platform armadillo4x0_wm8978.0: Driver armadillo4x0_wm8978 requests probe deferral
AUD5(CON11)のオーディオ機能が不要な場合は、ARMADILLO4X0_AUD5_CON11を無効化してください。
|
Armadillo-400 シリーズ LCD拡張ボード、RTCオプションモジュール、WLANオプションモジュール(AWL13対応)には、リアルタイムクロック(セイコーインスツル社製 S-35390A)が搭載されています。
Armadillo-420/440でリアルタイムクロック機能を使用する場合は、拡張ボードまたはオプションモジュールと組み合わせて使用する必要があります。
また、WLAN オプションモジュール(AWL13対応)を使用している場合はアラーム割り込み機能を利用できます[]。
- デバイスファイル
/dev/rtc |
/dev/rtc0 |
/dev/rtc1 |
- 関連するソースコード
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 |
リアルタイムクロックはI2Cバスに接続された I2Cスレーブデバイスとして動作します。リアルタイムクロックとI2Cバスとの接続を表9.4「リアルタイムクロック I2Cバス接続」に示します。
表9.4 リアルタイムクロック I2Cバス接続
RTC搭載ボード/オプションモジュール名 | I2Cバス | アドレス | 優先順位 |
---|
Armadillo-400シリーズ RTC オプションモジュール | I2C2 | 0x30 | 1 |
Armadillo-400シリーズ WLAN オプションモジュール(AWL13対応) | I2C2 | 0x30 | 1 |
Armadillo-400 シリーズ LCD 拡張ボード | I2C3 | 0x30 | 2 |
リアルタイムクロックは、デバイスファイルまたはsysfsファイルを使用して操作することができます。デバイスファイルは/dev/rtcN
(Nは0から始まる数値)に、sysfsファイルは/sys/class/rtc/rtcN
/
ディレクトリ以下に作成されます。リアルタイムクロックが一つだけ接続されている場合、/dev/rtc0
デバイスファイルまたは/sys/class/rtc/rtc0
ディレクトリ以下のsysfsファイルでリアルタイムクロックを操作することができます。
システムにリアルタイムクロックが二つ以上存在する場合、表9.4「リアルタイムクロック I2Cバス接続」の「優先順位」の数字が小さいものから順に/dev/rtc0
, /dev/rtc1
と割り当てられます[]。この場合、atmark-distに含まれるhwclock等のアプリケーションでは、/dev/rtc0
だけが使用されます。有効にするリアルタイムクロックはカーネルコンフィギュレーションで選択することができます。
アラーム割り込みは、sysfs RTCクラスディレクトリ以下のファイルから利用できます。[]
wakealarm
ファイルにUNIXエポックからの経過秒数、または先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するにはwakealarm
ファイルに"+0"を書き込み、アラーム割り込みのキャンセル後に再設定する必要があります。アラーム割り込みの利用例を次に示します。
| |
---|
デバイスファイル(/dev/rtc0 )経由でもアラーム割り込みを利用することができます。サンプルプログラムなどのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/rtc.txt )を参照してください。
|
| |
---|
date コマンドを利用して、UNIXエポックからの経過秒数を日時に変換することができます。
|
| |
---|
WLANオプションモジュール(AWL13対応)を使用する場合、RTC_INT1 信号が CON9_2 ピンに接続されます。
リアルタイムクロックにアラーム割り込み発生時刻を設定し、アラーム割り込みを有効にすると、指定した時刻に INT1 信号が High から Low に変化するため、アラーム割り込みを検知することができます。
|
Armadillo-400 シリーズに搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。
- sysfs LEDクラスディレクトリ
/sys/class/leds/red |
/sys/class/leds/green |
/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-400 シリーズのLED は、LED クラスとして実装されており、
LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリと各LEDの対応を次に示します。
表9.5 LEDクラスディレクトリとLEDの対応
LEDクラスディレクトリ | インターフェース | デフォルトトリガ |
---|
/sys/class/leds/red/ | ユーザーLED3(赤色) | default-on |
/sys/class/leds/green/ | ユーザーLED4(緑色) | default-on |
/sys/class/leds/yellow/ | ユーザーLED5(黄色) | none |
Armadillo-400 シリーズに搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。
ユーザースイッチには、次に示すキーコードが割り当てられています。
表9.6 キーコード
ユーザースイッチ | キーコード | イベントコード |
---|
SW1 | KEY_ENTER | 28 |
LCD_SW1[] | KEY_BACK | 158 |
LCD_SW2[] | KEY_MENU | 139 |
LCD_SW3[] | KEY_HOME | 102 |
ユーザースイッチを制御する GPIO接続用キーボードドライバは次の通りです。
表9.7 GPIO接続用キーボードドライバ
ユーザースイッチ | GPIO接続用キーボードドライバ |
---|
SW1 | gpio-keys |
LCD_SW1 | gpio-keys |
LCD_SW2 | gpio-keys |
LCD_SW3 | gpio-keys |
- 関連するソースコード
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 |
drivers/input/keyboard/gpio_keys_polled.c |
I2Cインターフェースは、i.MX257 の I2C(Inter IC Module) を利用します。
i.MX25 プロセッサは I2C1 から I2C3 までの 3 つの I2C モジュールを内蔵しています。
Armadillo-400 シリーズでは、I2C1 はボード内蔵バスとして使用し、I2C2 は CON14, I2C3 は CON11 に割り当てています。
また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。
標準状態で、CONFIG_I2C_CHARDEVが有効となっているためユーザードライバでI2Cデバイスを制御することができます。
- 機能
最大転送レート: 400kbps (I2C1, I2C2, I2C3) |
- デバイスファイル
/dev/i2c-0 (I2C1) |
/dev/i2c-1 (I2C2) |
/dev/i2c-2 (I2C3) |
- 関連するソースコード
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 |
I2C バスにスレーブデバイスを接続し、それを使用可能にするためには、スレーブデバイスに対応したドライバを有効にする必要があります。
また、struct i2c_board_info を適切に設定しなければいけません。
Armadillo-400シリーズでは、linux-3.14-at/arch/arm/mach-imx/armadillo4x0_extif.cのarmadillo4x0_i2cN配列(Nはバスに対応した数値)に記述してください。
標準では、I2C1バスの通信速度は40kbpsに設定されています。通信速度は、armadillo4x0_extif.c の以下の場所で設定されています。
SPIインターフェースは、i.MX257 の CSPI(Configurable Serial Peripheral Interface)を利用します。Armadillo-400シリーズはカーネルコンフィギュレーションにより、CSP1 及び CSPI3 を CON9に割り当てる事が可能です。
標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると、ユーザードライバでSPIデバイスを制御することができます。
- 機能
SPIマスターモード |
複数スレーブセレクト |
最大通信速度 約16Mbps |
- 関連するソースコード
drivers/spi/spi-bitbang.c |
drivers/spi/spi-imx.c |
drivers/spi/spi.c |
drivers/spi/spidev.c |
SPI マスタードライバーとスレーブデバイスのドライバーを有効にする必要があります。また、struct spi_board_info を適切に設定しなければいけません。struct spi_board_infoはlinux-3.[version]
/arch/arm/mach-imx/armadillo4x0_extif.c
のarmadillo4x0_spiN_board_info (Nはバスに対応した数値)に記述してください。SPIバスの通信速度は、それぞれのスレーブデバイスごとに設定します。
SPIのハードウェア、バスナンバー、struct spi_board_infoの対応は次に示す通りです。
Armadillo-400 シリーズのウォッチドッグタイマーは、i.MX257 の WDOG(Watchdog Timer) を利用します。
ウォッチドッグタイマーは、Hermit-Atブートローダーによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルでは、ウォッチドッグタイマードライバの初期化時に、このタイムアウト時間を上書きします。標準状態のタイムアウト時間は10秒です。カーネルタイマーを利用して定期的にウォッチドッグタイマーをキックします。
何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。
- 関連するソースコード
drivers/watchdog/imx2_wdt.c |
| |
---|
i.MX257 の WDOG は、一度有効化すると無効化することができません。そのため、halt コマンドなどを実行してLinux カーネルを停止した場合は、ウォッチドッグタイマーのキックができなくなるためシステムリセットが発生します。
WDOGドライバーの終了処理では、タイムアウト時間をWDOGの最大値である128秒に設定します。
|
Armadillo-400シリーズは、CON9_2とCON9_26を1-wireマスターとして使用する事ができます。CON9_2は i.MX257 の 1-wire(1-wire Module) を利用し、CON9_26はGPIO 1-wireドライバーを用いて機能を実現しています。
デフォルト状態では、1-wire を利用することができません。1-wire を利用するためには、カーネルコンフィギュレーションを行い 1-wire マスタードライバーと 接続するスレーブデバイスのドライバーを有効にする必要があります。
- 関連するソースコード
drivers/w1/masters/mxc_w1.c |
drivers/w1/w1.c |
drivers/w1/w1_int.c |
drivers/w1/w1_family.c |
drivers/w1/w1_netlink.c |
drivers/w1/w1_io.c |
Armadillo-400 シリーズの PWM は、i.MX257 の PWM(Pulse-Width Modulator) を利用します。
カーネルコンフィギュレーションを変更することにより、PWM2をCON9_25に、PWM4をCON14_3に割り当てる事ができます。
- 関連するソースコード
drivers/pwm/core.c |
drivers/pwm/pwm-imx.c |
drivers/pwm/sysfs.c |
PWM機能は使用する前にexportする必要があります。exportするためには、/sys/class/pwm/pwmchipN
/export
に0を書き込みます。exportすると/sys/class/pwm/pwmchipN
/pwm0
が生成されます。
| |
---|
/sys/class/pwm/pwmchipN /export のN は、カーネルがPWMを認識した順に連番の値が設定されます。pwmchipN がどこにリンクされているかを調べる事で、i.MX25のどのハードウェアに割当たっているか調べる事ができます。
上記の例では、pwmchip0 は、imx27-pwm.1 にリンクされています。リンク先のsysfsファイル名と、PWMのハードウェアとの対応は次の通りです。
|
PWM機能は、/sys/class/pwm/pwmchipN
/pwm0
以下のファイルに値を書き込む事で設定変更する事ができます。設定に使用するファイルを、表9.8「PWM sysfs」に示します。
表9.8 PWM sysfs
ファイル名 | 説明 |
---|
enable |
PWMの動作/停止を設定します
1: PWMは動作します。period、duty_cycle、polarityの設定に応じた波形を出力します
0: PWMは停止ます
|
period |
PWMの周期をnsec単位で設定します
設定可能な範囲は、17〜2,147,483,647 (約20nsecから2sec)です
設定変更はenable=0の状態で行います
|
duty_cycle |
PWMのHigh期間(polarity=inversedの場合はLow期間)をnsec単位で設定します
設定可能な範囲は、0 < duty_cycle < period の範囲です
設定変更はenable=0の状態で行います
|
polarity |
PWM波形の極性を設定します
normal: PWM波形は正転状態となります。duty_cycleで指定する時間はHigh期間になります
inversed: PWM波形は反転状態となります。duty_cycleで指定する時間はLow期間になります
設定変更はenable=0の状態で行います
|
Armadillo-400シリーズの CAN は、i.MX257 の FlexCAN(Controller Area Network) を利用します。
カーネルコンフィギュレーションを変更する事により、CAN2をCON14に割り当てる事ができます。
- 関連するソースコード
drivers/net/can/flexcan.c |
drivers/net/can/dev.c |
net/can/af_can.c |
net/can/bcm.c |
net/can/gw.c |
net/can/proc.c |
net/can/raw.c |
CANの転送速度の設定にはipコマンドを使用します。iproute2のipコマンドで、通信速度を125kpbsに設定するには、次のコマンドを実行します。
転送速度が変更されたかどうかは、次のコマンドで表示される bitrate の数値から確認することができます。
| |
---|
Armadillo-400シリーズのユーザーランドに 標準で組み込まれているBusyBoxのipコマンドは、CANの転送速度を設定できません。そのためCAN機能を使用する場合には、ユーザーランドコンフィギュレーションを行い、iproute2を組み込んでおく必要があります。
Userland Configuration
Network Applications --->
[*] iproute2 チェックを入れる |