第9章 Linux カーネルデバイスドライバー仕様
本章では、Armadillo-400 シリーズに固有な Linux カーネルのデバイスドライバーの仕様について説明します。
Armadillo-400 シリーズでは、カーネルコンフィギュレーションを変更することにより、標準で有効になっているもの以外の様々な機能を使用することができます。
Armadillo-400 シリーズで、標準で有効になっていないデバイスドライバーを使用するためには、以下の手順でカーネルコンフィギュレーションをおこなう必要があります。
ボードオプションによりどのピンに機能を割り当てるか選択する。
ボードオプションは、make menuconfig でコンフィギュレーションを行う場合、Linux Kernel Configuration の System Type -> Freescale MXC Implementations -> MX25 Options -> Armadillo-400 Board options で変更することができます。
ボードオプションでは、一つのピンに複数の機能を割り当てることはできないようになっています。また、機能が割り当てられなかったピンは、GPIO として設定されます。
ホスト(マスター)のデバイスドライバーを有効にする。
必要であれば、スレーブのデバイスドライバーを有効にする。
必要であれば、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c
にデバイス情報を追記する。
カーネルコンフィギュレーションを変更する方法は、「イメージをカスタマイズする」を参照してください。
i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-400 シリーズが標準状態で使用可能なUARTを表9.1「標準状態で使用可能なUART」に示します。
表9.1 標準状態で使用可能なUART
シリアルインターフェース | 使用モジュール | 部品番号 | 備考 |
---|
シリアルインターフェース1 | UART2 | CON3 | 無し |
シリアルインターフェース2 | UART3 | CON9 | 無し |
シリアルインターフェース3 | UART5 | CON9 | 無し |
シリアルインターフェース4 | UART4 | CON19[] | Armadillo-460のみ |
カーネルコンフィギュレーションを変更することにより、CON11 に UART3 及び UART4 の機能を割り当てることができます。CON9 もしくは CON11 に機能を割り当てた場合、CTS/RTSによるハードウェアフローコントロールを有効にするか無効にするかを選択することができます。
UART ドライバーは以下の機能を有します。
各シリアルインターフェースとデバイスファイルの対応を、表9.2「シリアルインターフェースとデバイスファイルの対応」に示します。
表9.2 シリアルインターフェースとデバイスファイルの対応
シリアルインターフェース | デバイスファイル | 使用モジュール |
---|
シリアルインターフェース1 |
/dev/ttymxc1
| UART2 |
シリアルインターフェース2 |
/dev/ttymxc2
| UART3 |
シリアルインターフェース3 |
/dev/ttymxc4
| UART5 |
シリアルインターフェース4 |
/dev/ttymxc3
| UART4 |
UART 機能に関連するカーネルコンフィギュレーションのうち、Armadillo-400シリーズで共通のものを表9.3「UART コンフィギュレーション」に、Armadillo-460固有のものを表9.4「UART コンフィギュレーション(Armadillo-460固有)」に示します。
表9.3 UART コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
SERIAL_MXC | y |
i.MXのシリアルドライバーを有効にします
|
SERIAL_MXC_CONSOLE | y |
i.MXのシリアルドライバーを使ったシステムコンソールを有効にします
|
ARMADILLO400_UART3_CON9 | y |
CON9のUART3を有効にします
CON9_3をUART3_RXDに、CON9_5をUART3_TXDに使用します
|
ARMADILLO400_UART3_HW_FLOW_CON9 | n |
CON9のUART3のハードウェアフローコントロールを有効にします
CON9_11をUART3_RTSに、CON9_13をUART3_CTSに使用します
ARMADILLO400_UART3_CON9に依存します
|
ARMADILLO400_UART3_CON11 | n |
CON11のUART3を有効にします
CON11_40をUART3_RXDに、CON11_41をUART3_TXDに使用します
ARMADILLO400_UART3_CON9と排他です
|
ARMADILLO400_UART3_HW_FLOW_CON11 | n |
CON11のUART3のハードウェアフローコントロールを有効にします
CON11_42をUART3_RTSに、CON11_43をUART3_CTSに使用します
ARMADILLO400_UART3_CON11に依存します
|
ARMADILLO400_UART4_CON11 | n |
CON11のUART4を有効にします
CON11_44をUART4_RXDに、CON11_45をUART4_TXDに使用します
|
ARMADILLO400_UART4_HW_FLOW_CON11 | n |
CON11のUART4のハードウェアフローコントロールを有効にします
CON11_46をUART4_RTSに、CON11_47をUART4_CTSに使用します
ARMADILLO400_UART4_CON11に依存します
|
ARMADILLO400_UART5_CON9 | y |
CON9のUART5を有効にします
CON9_4をUART5_RXDに、CON9_6をUART5_TXDに使用します
|
ARMADILLO400_UART5_HW_FLOW_CON9 | n |
CON9のUART5のハードウェアフローコントロールを有効にします
CON9_12をUART5_RTSに、CON9_14をUART5_CTSに使用します
ARMADILLO400_UART5_CON9に依存します
|
表9.4 UART コンフィギュレーション(Armadillo-460固有)
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
ARMADILLO460_UART4_CON19 | y |
CON19のUART4を有効にします
CON19_3をUART4_RXDに、CON19_5をUART4_TXDに使用します
|
ARMADILLO460_UART4_HW_FLOW_CON19 | y |
CON19のUART4のハードウェアフローコントロールを有効にします
CON19_4をUART4_RTSに、CON19_6をUART4_CTSに使用します
ARMADILLO460_UART4_CON19に依存します
|
Armadillo-400 シリーズの Ethernet ドライバーは以下の機能を有します。
AutoNegotiation サポート
CarrierDetect サポート
Ethtool サポート
Ethernet 機能に関連するカーネルコンフィギュレーションを表9.5「Ethernet コンフィギュレーション」に示します。
表9.5 Ethernet コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
NETDEVICES | y |
Linux カーネルのネットワークデバイスサポートを有効にします
|
NET_ETHERNET | y |
Linux カーネルの 10/100 Mbps Ethernet サポートを有効にします
|
MX25_FEC | y |
i.MX25 内蔵のFEC(Fast Ethernet Controller)ドライバーを有効にします
|
i.MX25 プロセッサは、MMC/SD/SDIO ホストコントローラ(eSDHC)を二個内蔵しています。Armadillo-400 シリーズでは、標準状態で eSDHC1 を microSD/SD スロット(CON1)に使用しています。また、カーネルコンフィギュレーションを変更することにより、CON9 に eSDHC2の機能を割り当てることができます。
Armadillo-400 シリーズの MMC/SD/SDIO ホストドライバーは以下の機能を有します。
microSD/SD カードスロットにカードが挿入されると、/dev/mmcblkN
(Nは0または1)として認識されます。
MMC/SD/SDIO ホスト機能に関連するカーネルコンフィギュレーションを表9.6「MMC/SD/SDIO ホストコントローラ コンフィギュレーション」に示します。
表9.6 MMC/SD/SDIO ホストコントローラ コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
MMC | y |
Linux カーネルの MMC/SD/SDIO カードサポートを有効にします
|
MMC_UNSAFE_RESUME | y |
スリープからのリジューム時にSD/MMCカードのプローブ処理を行わないようにします。詳細は「スリープ中の外部デバイスの扱いについて」を参照してください
|
MMC_BLOCK | y |
Linux カーネルの MMC ブロックデバイスドライバーを有効にします
|
MMC_BLOCK_BOUNCE | y |
MMC ドライバがバウンスバッファを使用するように指定します
|
MMC_IMX_ESDHCI | y |
i.MX25のeSDHCドライバーを有効にします
|
ARMADILLO400_SDHC2_CON9 | n |
CON9のSDHC2を有効にします
CON9_15からCON9_24を使用します
|
Armadillo-400 シリーズの USB 2.0 ホストドライバーは以下の機能を有します。
EHCI 準拠
OTG非サポート
USB High Speed ホスト × 1
USB Full Speed ホスト × 1
USB デバイスが検出されると、/dev/sd*
にマップされます。
USB ホスト機能に関連するカーネルコンフィギュレーションを表9.7「USB ホストコンフィギュレーション」に示します。
表9.7 USB ホストコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
USB_SUPPORT | y |
Linux カーネルの USB サポートを有効にします
|
USB | y |
Linux カーネルの USB ホストサポートを有効にします
|
USB_EHCI_HCD | y |
Linux カーネルの EHCI(Enhanced Host Controller Interface)サポートを有効にします
|
USB_EHCI_ARC | y |
i.MX の USB ドライバーを有効にします
|
USB_EHCI_ARC_H2 | y |
i.MX の USB Host2 サポートを有効にします
|
USB_EHCI_ARC_H2_DELAYPROBE | n |
USB Host2 の Delayed Probe 機能を有効にします
|
USB_EHCI_ARC_H2_WAKE_UP | n |
USB Host2 によるウェイクアップ機能を有効にします[]
|
USB_EHCI_ARC_H2_FSL_SERIAL | y |
USB Host2 の PHY としてオンチップ Full Speed シリアルトランシーバーを使用します
|
USB_EHCI_ARC_OTG | y |
i.MX の OTG ポートサポートを有効にします[]
|
USB_EHCI_ARC_OTG_DELAYPROBE | n |
OTG ポートの Delayed Probe 機能を有効にします
|
USB_EHCI_ARC_OTG_WAKE_UP | n |
OTG ポートによるウェイクアップ機能を有効にします[]
|
USB_EHCI_ARC_OTG_FSL_UTMI | y |
OTG ポートの PHY としてオンチップ High Speed UTMI トランシーバーを使用します
|
USB_STATIC_IRAM | y |
USB のデータ転送に内蔵 RAM を使用します
|
USB_STATIC_IRAM_TD_SIZE | 2048 |
USB のデータ転送に使用する内蔵 RAM のサイズを指定します
|
Armadillo-440/460 のビデオ出力機能は、フレームバッファデバイスとして実装されています。
フレームバッファデバイスドライバーは以下の機能を有します。
Armadillo-440 液晶モデルおよび、Armadillo-460 ベーシックモデルの標準では、以下の設定になっています。
解像度 480 × 272 ピクセル
RGB 565 カラー
フレームバッファとデバイスファイルの対応を、表9.8「フレームバッファとデバイスファイルの対応」に示します。
表9.8 フレームバッファとデバイスファイルの対応
フレームバッファ | デバイスファイル |
---|
バックグラウンドプレーン |
/dev/fb0
|
グラフィックウィンドウ |
/dev/fb1
|
フレームバッファに関連するカーネルコンフィギュレーションを表9.9「フレームバッファ コンフィギュレーション」に示します。
表9.9 フレームバッファ コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
FB | y |
Linux カーネルのフレームバッファサポートを有効にします
|
FB_MXC | y |
i.MX25 のフレームバッファドライバーを有効にします
|
FB_MXC_MODE_FG040360DSSWBG03 | y |
フレームバッファのビデオモードをFG040360DSSWBG03に対応したものに設定します。ビデオモードを変更することで、他のLCDに対応することができます
|
FB_MXC_BPP_16 | y |
bppを16に設定します
|
MXC_SYNC_PANEL | y |
フレームバッファを同期モードに設定します
|
FRAMEBUFFER_CONSOLE | y |
フレームバッファコンソールを有効にします
|
LOGO | y |
ブートロゴを有効にします
|
LOGO_ARMADILLO_CLUT224 | y |
Armadillo用ブートロゴを有効にします
|
Armadillo-440/460 の LED バックライト機能は、バックライトクラスとして実装されています。Armadillo-440/460 では、汎用の PWM 機能を使用してバックライトの制御を行っています[]。PWM 機能の詳細に関しては、「PWM」 を参照してください。
バックライトの制御は、/sys/class/backlight/pwm-backlight
ディレクトリ以下のファイルによって行うことができます。輝度の調整は、brightness
ファイルによって行うことができます。 brightness
ファイルに 0(消灯)~255(最高輝度)までの数値を書き込むことにより、輝度を変更することができます。また、brightness
ファイルを読むことにより現在の輝度を知ることができます。バックライトの点灯/消灯は、bl_power
ファイルによって行うことができます。bl_power
に 0 を書き込むと消灯になり、1 を書き込むと点灯になります。
LED バックライトに関連するカーネルコンフィギュレーションを表9.10「LED バックライト コンフィギュレーション」に示します。
表9.10 LED バックライト コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
BACKLIGHT_LCD_SUPPORT | y |
Linux カーネルのバックライトと LCD サポートを有効にします
|
BACKLIGHT_CLASS_DEVICE | y |
Linux カーネルのバックライトクラスサポートを有効にします
|
BACKLIGHT_PWM | y |
PWM ベースのバックライトドライバを有効にします
|
Armadillo-440/460 のタッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。
表9.11「タッチスクリーンイベント」に示すイベントが発生します。
表9.11 タッチスクリーンイベント
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 |
| |
---|
Armadillo-400シリーズ用Linuxカーネルのタッチスクリーンドライバーは、Armadillo-400シリーズLCD拡張ボード(製品リビジョンA)で正しい位置を示すように調整されているため、それ以外のLCDを使用する場合、入力位置の補正が必要となります。 Atmark Distで作成したユーザーランドでは、タッチスクリーンへの入力は、タッチスクリーンデバイスドライバーを通り、タッチスクリーン用ライブラリ(tslib)経由でアプリケーションプログラムに伝わります。入力位置の補正は、tslibのレイヤーで行うことができます。具体的な方法は、「Howto : Armadillo-400シリーズのタッチスクリーンの位置ずれを補正する」を参照してください。 |
Armadillo-440 液晶モデルおよび Armadillo-460 ベーシックモデルの標準状態では、タッチスクリーンのイベントデバイスは /dev/input/event1
にマップされます。
| |
---|
イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。 |
タッチスクリーンに関連するカーネルコンフィギュレーションを表9.12「タッチスクリーン コンフィギュレーション」に示します。
表9.12 タッチスクリーン コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
INPUT | y |
Linux カーネルのインプットレイヤサポートを有効にします
|
INPUT_EVDEV | y |
インプットレイヤのイベントデバイスサポートを有効にします
|
INPUT_TOUCHSCREEN | y |
Linux カーネルのタッチスクリーンサポートを有効にします
|
TOUCHSCREEN_IMX_ADC | y |
i.MX のタッチスクリーンドライバを有効にします
|
Armadillo-400 シリーズのオーディオ機能は、ALSA デバイスとして実装されています。 ALSA デバイスドライバーは以下の機能を有します。
Playback(2ch) / Capture(1ch)
サンプリング周波数 48k, 32k, 16k, 8k Hz
フォーマットSigned 16/20/24 bit, Little-endian
オーディオデバイスの制御は、ALSA ライブラリ (libasound2) を通じて行うことができます。
| |
---|
Armadillo-400 シリーズのオーディオドライバーでは、録音と再生を同時に行うことはできません。 |
i.MX25では、オーディオマルチプレクスにより、オーディオ機能をどのピンで使用するかを選択することができます。Armadillo-400シリーズではカーネルコンフィギュレーションでオーディオマルチプレクスの設定をおこなうことができます。Armadillo-440の標準状態では、オーディオマルチプレクスは AUD5 を使用するようになっており、オーディオ機能は CON11 に接続されます。コンフィギュレーションにより AUD6 を使用することで CON9 に接続することができます。
| |
---|
Armadillo-460の標準状態では、CON11のAUD5信号をUART4として利用している[]ため、オーディオ機能を使用することができません。Armadillo-460でオーディオを使用する場合はカーネルコンフィギュレーションを変更する必要があります。 |
オーディオ 機能に関連するカーネルコンフィギュレーションを表9.13「オーディオ コンフィギュレーション」に示します。
表9.13 オーディオ コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
Armadillo-440 | Armadillo-460 |
---|
SOUND | y | n |
Linux カーネルのサウンドカードサポートを有効にします
|
SND | y | n |
Linux カーネルのALSAサポートを有効にします
|
SND_SOC | y | n |
Linux カーネルのASoCサポートを有効にします
|
SND_MXC_SOC | y | n |
i.MXでオーディオ機能を実現するためのドライバーを有効にします
|
SND_SOC_ARMADILLO440_WM8978 | y | n |
Armadillo-400シリーズでWM8978コーデックを使用したオーディオ機能を実現するためのドライバーを有効にします
|
ARMADILLO400_AUD5_CON11 | y | n |
CON11にオーディオ機能を出力します
CON11_42からCON11_47を使用します
|
ARMADILLO400_AUD6_CON9 | n | n |
CON9にオーディオ機能を出力します
CON9_15, 17, 21, 22, 23, 24を使用します
ARMADILLO400_AUD5_CON11と排他です
|
Armadillo-400 シリーズの GPIO は、generic GPIO として実装されています。
ユーザーランドから GPIO を操作するためのインターフェースとしては、GPIO sysfs と Armadillo-200 シリーズ互換 GPIO ドライバーの2つがあります。標準状態では GPIO sysfs ドライバーが有効になっています。
カーネルコンフィギュレーションで機能が割り当てられなかったピンは、全て GPIO として設定されます。
GPIO sysfsでは、/sys/class/gpio/(GPIO_NAME)
ディレクトリ以下のファイルで入出力方向の設定、出力レベルの設定、入出力レベルの取得を行うことができます。
GPIO_NAME ディレクトリと GPIOピン の対応を表9.14「GPIO_NAME と GPIO ピンの対応」に示します。
表9.14 GPIO_NAME と GPIO ピンの対応
GPIO_NAME | GPIO ピン | 初期入出力方向 | 初期出力レベル |
---|
CON9_1 | CON9 1ピン | 入力 | - |
CON9_2 | CON9 2ピン | 入力 | - |
CON9_11 | CON9 11ピン | 入力 | - |
CON9_12 | CON9 12ピン | 入力 | - |
CON9_13 | CON9 13ピン | 入力 | - |
CON9_14 | CON9 14ピン | 入力 | - |
CON9_15 | CON9 15ピン | 入力 | - |
CON9_16 | CON9 16ピン | 入力 | - |
CON9_17 | CON9 17ピン | 入力 | - |
CON9_18 | CON9 18ピン | 入力 | - |
CON9_21 | CON9 21ピン | 入力 | - |
CON9_22 | CON9 22ピン | 入力 | - |
CON9_23 | CON9 23ピン | 入力 | - |
CON9_24 | CON9 24ピン | 入力 | - |
CON9_25 | CON9 25ピン | 入力 | - |
CON9_26 | CON9 26ピン | 入力 | - |
CON9_27 | CON9 27ピン | 出力 | LOW |
CON9_28 | CON9 28ピン | 出力 | LOW |
/sys/class/gpio/(GPIO_NAME)/direction
ファイルで入出力方向の設定を行うことができます。表9.15「GPIO 入出力方向の設定」に示す設定をdirection
ファイルに書き込むことにより、入出力方向を設定します。また、direction
ファイルを読み込むことで現在の設定を知ることができます。
表9.15 GPIO 入出力方向の設定
設定 | 説明 |
---|
high | 入出力方向を出力に、出力レベルを HIGH レベルに設定します。出力レベルの取得/設定を行うことができます。 |
low | 入出力方向を出力に、出力レベルを LOW レベルに設定します。出力レベルの取得/設定を行うことができます。 |
out | low を設定した場合と同じです。 |
in | 入出力方向を入力に設定します。入力レベルの取得を行うことができます。 |
/sys/class/gpio/(GPIO_NAME)/value
ファイルで出力レベルの設定、入出力レベルの取得を行うことができます。0 が LOW レベルを、1 が HIGH レベルを意味します。
/sys/class/gpio/(GPIO_NAME)/edge
ファイルで割り込みタイプの設定を行うことができます。表9.16「GPIO 割り込みタイプの設定」に示す設定をedge
ファイルに書き込むことにより、割り込みタイプを設定します。また、edge
ファイルを読み込むことで現在の設定を知ることができます。
表9.16 GPIO 割り込みタイプの設定
設定 | 説明 |
---|
none | 割り込みの検出を行いません。 |
falling | 立ち下がりエッジで割り込みの検出を行います。 |
rising | 立ち上がりエッジで割り込みの検出を行います。 |
both | 立ち下がり、立ち上がり両方のエッジで割り込みの検出を行います。 |
C言語で GPIO sysfs の割り込みを扱う例を、図9.1「GPIO sysfs 割り込みサンプルプログラム」に示します。サンプルプログラムを実行すると、CON9_1 の入出力方向を入力に、割り込みタイプを立ち下がりエッジ(falling)に設定して、割り込み待ちになります。割り込みを検出したら、そのときの GPIO ピンのレベルを表示します。3回割り込みを検出したら、プログラムを終了します。
| edge ファイルに "falling" を書き込む事で、割り込みタイプを立ち下がりエッジに指定します。
|
| 割り込みタイプを指定した後で、value ファイルをオープンします。 |
| 一度 value ファイルを空読みします。これ以降に発生した割り込みがポーリングの対象になります。 |
| poll または select システムコールで割り込みの発生を待つことができます。 |
| 一度空読みしているので、割り込み発生後の GPIO ピンのレベルを調べるためには、lseek システムコールでオフセットをファイルの先頭に戻す必要があります。 |
GPIO sysfs に関連するカーネルコンフィギュレーションを表9.17「GPIO sysfs コンフィギュレーション」に示します。
表9.17 GPIO sysfs コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
GPIO_SYSFS | y |
Linux カーネルの GPIO sysfs サポートを有効にします
|
GPIO_SYSFS_PRIVATE_NAMING | y |
GPIO sysfs の別名をつけてエクスポートできる機能を有効にします
|
9.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー
Armadillo-200 シリーズ互換 GPIO ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、GPIO の操作および状態の取得を行うことができます。
| |
---|
Armadillo-200 シリーズ互換 GPIO ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_GPIO_SYSFS を無効に、CONFIG_ARMADILLO2X0_GPIO を有効にして、カーネルをビルドする必要があります。 |
Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と GPIOピンの対応を表9.18「Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧」に示します。
表9.18 Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧
GPIO 名 | GPIO ピン | 初期入出力方向 | 初期出力レベル |
---|
GPIO0 | CON9 21ピン | 入力 | - |
GPIO1 | CON9 22ピン | 入力 | - |
GPIO2 | CON9 23ピン | 入力 | - |
GPIO3 | CON9 24ピン | 入力 | - |
GPIO4 | CON9 25ピン | 入力 | - |
GPIO5 | CON9 26ピン | 入力 | - |
GPIO6 | CON9 27ピン | 出力 | LOW |
GPIO7 | CON9 28ピン | 出力 | LOW |
GPIO8 | CON9 11ピン | 入力 | - |
GPIO9 | CON9 12ピン | 入力 | - |
GPIO10 | CON9 13ピン | 入力 | - |
GPIO11 | CON9 14ピン | 入力 | - |
GPIO12 | CON9 15ピン | 入力 | - |
GPIO13 | CON9 16ピン | 入力 | - |
GPIO14 | CON9 17ピン | 入力 | - |
GPIO15 | CON9 18ピン | 入力 | - |
| |
---|
Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と対応する GPIO ピンの位置は、Armadillo-200 シリーズと同じになっています。そのため、Armadillo-200 シリーズ互換 GPIO ドライバーではArmadillo-400 シリーズで使用可能な GPIO のうち、一部だけしか操作することができません。
|
デバイスファイルのパラメータは、以下の通りです。
表9.19 Armadillo-200 シリーズ互換 GPIO ドライバーデバイスファイル
タイプ | メジャー番号 | マイナー番号 | デバイスファイル |
---|
キャラクタデバイス | 10 | 185 | /dev/gpio |
ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、GPIOを操作するためのコマンドを指定します。
表9.20 Armadillo-200 シリーズ互換 GPIO ドライバー ioctl コマンド
コマンド | 説明 | 第3引数のType |
---|
PARAM_SET | 第3引数で指定する内容でGPIOの状態を設定します | struct gpio_param |
PARAM_GET | 第3引数で指定する内容でGPIOの状態を取得します | struct gpio_param |
INTERRUPT_WAIT | 第3引数で指定する内容でGPIOの割込みが発生するまでWAITします | struct wait_param |
第3引数には、(カーネルソース)/include/linux/armadillo2x0_gpio.h
に定義されている構造体「struct gpio_param」と「struct wait_param」を使用します。「struct gpio_param」は単方向リストになっているので、複数の GPIO を一度に制御する場合は next メンバを使用してください。また、リストの最後の next メンバには"0(NULL)"を指定してください。GPIO デバイスドライバーの詳細な使用方法については、GPIO 操作アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-4x0.Common/gpioctrl
)のソースコードを参考にしてください。
Armadillo-200 シリーズ互換 GPIO ドライバーに関連するカーネルコンフィギュレーションを表9.21「Armadillo-200 シリーズ互換 GPIO ドライバー コンフィギュレーション」に示します。
表9.21 Armadillo-200 シリーズ互換 GPIO ドライバー コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
ARMADILLO2X0_GPIO | n |
Armadillo-200 シリーズ互換 GPIO ドライバーを有効にします[]
|
Armadillo-400 シリーズの LED ドライバーは、LED クラスドライバーと Armadillo-200 シリーズ互換 LED ドライバーの2つがあります。標準状態では、LED クラスドライバーが有効になっています。
/sys/class/leds/(LED_NAME)
ディレクトリ以下のファイルによって、LED の制御を行うことができます。
点灯/消灯の制御は、/sys/class/leds/(LED_NAME)/brightness
ファイルによって行うことができます。 brightness
ファイルに 0を書き込むと消灯、0以外の数値を書き込むと点灯となります。
LED クラスでは、点滅などの制御はトリガーという仕組みを使用して行います。Armadillo-400 シリーズでは、mmc0、timer、heartbeat、default-on のトリガーを使用することができます。各文字列を、/sys/class/leds/(LED_NAME)/trigger
ファイルに書き込むことでトリガーが有効になります。mmc0 トリガーを有効にすると MMC/SD カードへの読み書きに連動して LED が点灯/消灯します。timer トリガーにより、指定した周期で LED を点滅させることができます。 timer トリガーを有効にすると、新しく /sys/class/leds/(LED_NAME)/delay_on
と /sys/class/leds/(LED_NAME)/delay_off
ファイルが作成されます。それぞれのファイルに点灯時間[msec]と消灯時間[msec]を書き込むことで LED が点滅します。heartbeat トリガーを有効にすると、鼓動のように LED が点滅します。default-on トリガーを有効にすると、点灯状態で起動します。
LED_NAMEと対応する LED の一覧を表9.22「LED 一覧」に示します。
表9.22 LED 一覧
LED_NAME | 対応する LED | デフォルトトリガー |
---|
red | LED3 | default-on |
green | LED4 | default-on |
yellow | LED5 | なし |
LED クラスに関連するカーネルコンフィギュレーションを表9.23「LED クラス コンフィギュレーション」に示します。
表9.23 LED クラス コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
NEW_LEDS | y |
Linux カーネルの LED サポートを有効にします
|
LEDS_CLASS | y |
Linux カーネルの LED クラスサポートを有効にします
|
LEDS_GPIO | y |
GPIO 接続の LED クラスサポートを有効にします
|
LEDS_TRIGGERS | y |
LED クラスのトリガーサポートを有効にします
|
LEDS_TRIGGER_TIMER | y |
タイマートリガーサポートを有効にします
|
LEDS_TRIGGER_HEARTBEAT | y |
ハートビートトリガーサポートを有効にします
|
LEDS_TRIGGER_DEFAULT_ON | y |
デフォルト ON トリガーサポートを有効にします
|
9.10.2. Armadillo-200 シリーズ互換 LED ドライバー
Armadillo-200 シリーズ互換 LED ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、LED の操作を行うことができます。
| |
---|
Armadillo-200 シリーズ互換 LED ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_LEDS_GPIO を無効に、CONFIG_ARMADILLO2X0_LED を有効にして、カーネルをビルドする必要があります。 |
LED に対応するデバイスファイルのパラメータは、以下の通りです。
表9.24 LEDノード
タイプ | メジャー番号 | マイナー番号 | デバイスファイル |
---|
キャラクタデバイス | 10 | 215 | /dev/led |
ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、LED を操作するためのコマンドを指定します。
表9.25 LED操作コマンド
コマンド | 説明 | 第3引数のType |
---|
LED_RED_ON | LED3(赤)を点灯します | なし |
LED_RED_OFF | LED3(赤)を消灯します | なし |
LED_RED_STATUS | LED3(赤)の点灯状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_RED_BLINKON | LED3(赤)の点滅を開始します | なし |
LED_RED_BLINKOFF | LED3(赤)の点滅を停止します | なし |
LED_RED_BLINKSTATUS | LED3(赤)の点滅状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_GREEN_ON | LED(緑)を点灯します | なし |
LED_GREEN_OFF | LED4(緑)を消灯します | なし |
LED_GREEN_STATUS | LED4(緑)の点灯状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_GREEN_BLINKON | LED4(緑)の点滅を開始します | なし |
LED_GREEN_BLINKOFF | LED4(緑)の点滅を停止します | なし |
LED_GREEN_BLINKSTATUS | LED4(緑)の点滅状態を取得します | 状態を保存するバッファ(最小1バイト) |
LEDデバイスドライバーの詳細な使用方法については、サンプルのLED制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-440/ledctrl
)のソースコードを参考にしてください。
Armadillo-200 シリーズ互換 LED ドライバーに関連するカーネルコンフィギュレーションを表9.26「Armadillo-200 シリーズ互換 LED ドライバー コンフィギュレーション」に示します。
表9.26 Armadillo-200 シリーズ互換 LED ドライバー コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
ARMADILLO2X0_LED | n |
Armadillo-200 シリーズ互換 LED ドライバーを有効にします[]
|
Armadillo-400 シリーズでは、ボタン入力はインプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。
Armadillo-400 シリーズ共通のボタンデバイスとして、オンボードタクトスイッチが使用可能です。また、Armadillo-400シリーズ LCD拡張ボードにボタンが3個実装されており、Armadillo-440/460ではこれらもボタンデバイスとして使用可能です。
それぞれのボタンに対するイベントを、表9.27「Armadillo-400 シリーズ ボタンイベント」に示します。
表9.27 Armadillo-400 シリーズ ボタンイベント
ボタン | Type | Code | Value |
---|
SW1 | EV_KEY(1) | KEY_ENTER(28) | 0 or 1 |
LCD_SW1[] | EV_KEY(1) | KEY_BACK(158) | 0 or 1 |
LCD_SW2[] | EV_KEY(1) | KEY_MENU(139) | 0 or 1 |
LCD_SW3[] | EV_KEY(1) | KEY_HOME(102) | 0 or 1 |
標準状態では、ボタンに対応するイベントデバイスは /dev/input/event0
にマップされます。
| |
---|
イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、ボタンのイベントデバイス番号は変わる可能性があります。 |
| |
---|
Armadillo-460のSW2はリセットスイッチであるため、ボタンデバイスとして使用することができません。 |
ボタンに関連するカーネルコンフィギュレーションを表9.28「ボタン コンフィギュレーション」に示します。
表9.28 ボタン コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
INPUT | y |
Linux カーネルのインプットレイヤサポートを有効にします
|
INPUT_EVDEV | y |
インプットレイヤのイベントデバイスサポートを有効にします
|
INPUT_KEYBOARD | y |
Linux カーネルのキーボードサポートを有効にします
|
KEYBOARD_GPIO | y |
GPIO キーボードドライバを有効にします
|
Armadillo-460、Armadillo-400シリーズ LCD拡張ボード、Armadillo-400シリーズ RTC オプションモジュール、WLANオプションモジュール(AWL12対応およびAWL13対応)、には、リアルタイムクロック(セイコーインスツル社製 S-35390A)が搭載されています。Armadillo-420/440でリアルタイムクロック機能を使用する場合は、拡張ボードまたはオプションモジュールと組み合わせて使用する必要があります。
リアルタイムクロックは、I2C バスに接続された I2C スレーブデバイスとして動作します。リアルタイムクロックと I2C バスとの接続を表9.29「リアルタイムクロック I2C バス接続」に示します。
表9.29 リアルタイムクロック I2C バス接続
RTC搭載 ボード/オプションモジュール名 | I2Cバス | アドレス | 優先順位 |
---|
Armadillo-400シリーズ RTC オプションモジュール | I2C2 | 0x30 | 1 |
Armadillo-400 シリーズ WLAN オプションモジュール(AWL12対応) | I2C2 | 0x30 | 1 |
Armadillo-400 シリーズ WLAN オプションモジュール(AWL13対応) | I2C2 | 0x30 | 1 |
Armadillo-400シリーズ LCD拡張ボード | I2C3 | 0x30 | 2 |
Armadillo-460 | I2C-GPIO | 0x30 | 3 |
リアルタイムクロックは、デバイスファイルまたは sysfs ファイルを使用して操作することができます。デバイスファイルは /dev/rtcN
に、sysfs ファイルは /sys/class/rtc/rtcN
/
ディレクトリ以下に作成されます []。リアルタイムクロックが一つだけ接続されている場合、/dev/rtc0
デバイスファイルまたは /sys/class/rtc/rtc0/
ディレクトリ以下の sysfs ファイルでリアルタイムクロックを操作することができます。システムにリアルタイムクロックが二つ以上存在する場合、表9.29「リアルタイムクロック I2C バス接続」の「優先順位」の数字が小さいものから順に/dev/rtc0, /dev/rtc1と割り当てられます[]。この場合、atmark-distに含まれるhwclock等のアプリケーションでは、/dev/rtc0
だけが使用されます。
デバイスファイルを使用したインターフェースに関しては、linux-2.6.26-at/Documentation/rtc.txt
を参照してください。sysfsを使用したインターフェースには、表9.30「リアルタイムクロック sysfs インターフェース」に示すものがあります。
表9.30 リアルタイムクロック sysfs インターフェース
sysfs ファイル | 説明 |
---|
since_epoch | このファイルを読み出すと、現在のUNIXエポックからの経過秒数を返す。 |
date | このファイルを読み出すと、現在の日付を返す。 |
time | このファイルを読み出すと、現在の時刻を返す。 |
wakealarm | このファイルにUNIXエポックからの経過秒数、もしくは、先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できる。詳細は、「アラーム割り込み」参照。 |
リアルタイムクロック機能に関連するカーネルコンフィギュレーションを表9.31「リアルタイムクロックコンフィギュレーション」に示します[]。
表9.31 リアルタイムクロックコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
RTC_CLASS | y |
RTC クラスを有効にします
|
RTC_HCTOSYS | y |
起動時にリアルタイムクロックの値をシステムタイムに反映させます
|
RTC_HCTOSYS_DEVICE | rtc0 |
起動時にシステムクロックを設定する際に使用するデバイスを指定します
|
RTC_INTF_SYSFS | y |
sysfs インターフェースを有効にします
|
RTC_INTF_PROC | y |
proc インターフェースを有効にします
|
RTC_INTF_DEV | y |
デバイスファイルインターフェースを有効にします
|
RTC_DRV_S35390A | y |
S-35390A ドライバーを有効にします
|
RTC_DRV_S353XXA | n |
S-353xxA ドライバーを有効にします[]
|
9.12.1. 有効にするリアルタイムクロックを選択する
linux-2.6.26-at15 以降の Linux カーネルからは有効にするリアルタイムクロックを選択することができます。リアルタイムクロックの選択に関連するカーネルコンフィギュレーションを表9.32「リアルタイムクロック選択コンフィギュレーション」に示します
表9.32 リアルタイムクロック選択コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
Armadillo-420/440 | Armadillo-460 |
---|
ARMADILLO400_I2C2_CON14_S35390A | y | n |
I2C2(CON14)に接続されたS-35390Aをリアルタイムクロックとして使用します[]
|
ARMADILLO400_I2C3_CON11_S35390A | y | n |
I2C3(CON11)に接続されたS-35390Aをリアルタイムクロックとして使用します[]
|
ARMADILLO460_RTC | n | y |
Armadillo-460本体に搭載されたRTCをリアルタイムクロックとして使用します
|
linux-2.6.26-at13 以降の Linux カーネルからは、リアルタイムクロックのアラーム割り込み機能を使用できます。アラーム割り込みは、CPUがスリープ中でも発生させることができるので、スリープ状態からアラーム割り込みによって実行状態に復帰することも可能です。スリープ機能については、「パワーマネジメント」を参照してください。指定可能なアラーム割り込み発生時刻は、分単位で最長1週間先までとなっています。秒は切り捨てられ、指定した時刻(分)の00秒にアラーム割り込みが発生します。
表9.33 アラーム割り込みの種類
名称 | 信号名 | 説明 |
---|
アラーム割り込み1 | RTC_INT1 | 主にスリープ状態からのウェイクアップ要因に使用します |
アラーム割り込み2 | RTC_INT2 | PMICの電源OFF状態[]からの復帰に使用します。PMICの電源ON状態でアラーム割り込み2が発生しても何も起りません。 |
アラーム割り込み機能は、Armadillo-460、WLANオプションモジュール(AWL12対応およびAWL13対応)で使用できます[]。
Armadillo-460の場合は、RTC_INT1 信号がi.MX257のEB0(GPIO2_12)ピンに、RTC_INT2 信号がPMICのONOFF信号に接続されています。リアルタイムクロックにアラーム割り込み発生時刻を設定し、アラーム割り込みを有効にすると、指定した時刻に RTC_INT1、RTC_INT2信号が共に[] High から Low に変化します。
| |
---|
Armadillo-460でRTC_INT2を利用する場合は、 RTC外部バックアップコネクタ(CON13またはCON20)に外部バッテリを接続してください。PMICの電源OFF状態では、リアルタイムクロックの電源に接続されているコンデンサへの給電が停止するため、RTCバックアップ時間を越えた場合にRTC_INT2割り込みを発生させることができず、復帰させることができなくなります。
|
WLANオプションモジュール(AWL12対応またはAWL13対応)の場合は、RTC_INT1 信号が CON9_2 ピンに接続されています。リアルタイムクロックにアラーム割り込み発生時刻を設定し、アラーム割り込みを有効にすると、指定した時刻に INT1 信号が High から Low に変化します。
Armadillo-420/440標準の Linux カーネルでは、アラーム割り込み機能は無効になっています。そのため、アラーム割り込み機能を使用するには、Linux カーネルのコンフィギュレーションを変更する必要があります。表9.34「リアルタイムクロックアラーム機能に関するコンフィギュレーション」に示すコンフィギュレーションを有効にしてください。
表9.34 リアルタイムクロックアラーム機能に関するコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
ARMADILLO400_RTC_ALM_INT_CON9_2 | n | CON9_2をアラーム割り込み入力に使用します |
RTC_ALM_INT_WAKE_SRC_SELECT | y | アラーム割り込み入力をウェイクアップ要因に指定します |
デバイスファイルに対して ioctl システムコールを発行することで、アラーム割り込み機能を使用することができます。linux-2.6.26-at/Documentation/rtc.txt にサンプルプログラムが記載されていますので、そちらも参照してください。
また、sysfs の wakealarm ファイルを読み書きすることでも、アラーム割り込み機能を使用することができます。wakealarm ファイルに UNIX エポックからの経過秒数、もしくは、先頭に + を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するには、一度現在時刻以前の時刻(もしくは +0)を書き込んで、アラーム割り込みをキャンセルする必要があります。アラーム割り込み発生時刻が設定されている際に、このファイルを読み出すとアラーム割り込み発生時刻を返します。sysfsファイルを使用した設定例を図9.2「アラーム割り込み発生時刻の設定例」に示します。
| /proc/interrupts によって、割り込み発生回数を調べることができます。ここでは、一度も割り込みが発生していません。
|
| since_epoch によって、現在の UNIX エポックからの経過時間を調べることができます。
|
| wakealarm に +60 と書き込むことで、アラーム割り込み発生時刻を 60 秒後に設定します。このとき、秒単位は切り捨てられるためアラーム発生時刻は厳密に 60 秒後とならない点に注意してください。
|
| wakealarm を読み出して確認したところ、アラーム割り込み発生時刻は 55 秒後に設定されています。
|
| アラーム割り込み発生時刻経過後に割り込み発生回数を調べると一つ増えているので、割り込みが発生したことを確認できます。 |
Armadillo-400 シリーズで採用している i.MX25 プロセッサは、内蔵ウォッチドッグタイマーを有しています。
Armadillo-400 シリーズの標準ブートローダーでは、起動直後にこの内蔵ウォッチドッグタイマーを有効にします。標準状態でのタイムアウト時間は 10 秒に設定されます。
Linux カーネルでは、自動でウォッチドッグタイマーをキックします。
もし、何らかの要因で Linux カーネルがフリーズしてウォッチドッグタイマーをキックできなくなりタイムアウトが発生すると、システムリセットが発生します。
i.MX25 プロセッサは、I2C1 から I2C3 の 3 個の I2C コントローラーを内蔵しています。Armadillo-400 シリーズでは、標準で I2C1 はボード内蔵バスとして使用し、I2C2 は CON14 に、I2C3 は CON11 に割り当てています。
I2C バスドライバーは以下の機能を有します。
I2C バスにスレーブデバイスを接続し、それを使用可能にするためには、スレーブデバイスに対応したチップドライバーを有効にする必要があります。また、チップドライバーが "new style"[] で記述されていた場合、struct i2c_board_info を適切に設定しなければいけません。Armadillo-400 シリーズでは、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c の armadillo400_i2cN_board_info配列(Nはバスに対応した数値)に記述してください。
標準では、それぞれのI2Cバスの通信速度は40kbpsに設定されています。通信速度は、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c の以下の場所で設定されています。i2c_clkにそれぞれのバスの通信速度を設定します[]。
I2C 機能に関連するカーネルコンフィギュレーションを表9.35「I2C コンフィギュレーション」に示します。
表9.35 I2C コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
I2C | y |
Linuxカーネルの I2C サポートを有効にします
|
I2C_CHARDEV | y |
I2C デバイスファイルインターフェースサポートを有効にします
|
I2C_MXC | y |
i.MX の I2C ドライバーを有効にします
|
ARMADILLO400_I2C2_CON14 | y |
CON14のI2C2を有効にします
CON14_3をI2C2_SCLに、CON14_4をI2C2_SDAに使用します
|
ARMADILLO400_I2C3_CON11 | y |
CON11のI2C3を有効にします
CON11_48をI2C3_SCLに、CON11_49をI2C3_SDAに使用します
|
i.MX25 プロセッサは、CSPI1 から CSPI3 の 3 個の SPI コントローラーを内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CSPI1 及び CSPI3 を CON9 に割り当てることが可能です。
SPI マスタードライバーは以下の機能を有します。
SPI マスターモード
複数スレーブセレクト
最大通信速度 約16Mbps
SPI マスタードライバーは標準状態で有効になっていません。SPI バスにスレーブデバイスを接続し、それを使用可能にするためには、SPI マスタードライバーとスレーブデバイスのドライバーを有効にする必要があります。また、struct spi_board_info を適切に設定しなければいけません。Armadillo-400シリーズでは、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c の armadillo400_spiN_board_info配列(Nはバスに対応した数値)に記述してください。SPIバスの通信速度は、I2Cとは異なりそれぞれのスレーブデバイスごとに設定します。
SPI 機能に関連するカーネルコンフィギュレーションを表9.36「SPI コンフィギュレーション」に示します。
表9.36 SPI コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
SPI | n |
Linux カーネルの SPI サポートを有効にします
|
SPI_SPIDEV | n |
SPI デバイスファイルインターフェースサポートを有効にします
|
SPI_MXC | n |
i.MX の SPI マスタードライバーを有効にします
|
ARMADILLO400_SPI1_CON9 | n |
CON9のSPI1を有効にします
CON9_3をCSPI1_MOSI、CON9_5をCSPI1_MISO、CON9_13をCSPI1_SCLK、CON9_26をCSPI1_RDYとして使用します
|
ARMADILLO400_SPI1_SS0_CON9_25 | n |
CON9_25をSPI1_SS0として使用します
ARMADILLO400_SPI1_CON9に依存します
|
ARMADILLO400_SPI1_SS1_CON9_11 | n |
CON9_11をSPI1_SS1として使用します
ARMADILLO400_SPI1_CON9に依存します
|
ARMADILLO400_SPI3_CON9 | n |
CON9のSPI3を有効にします
CON9_4をCSPI3_MOSI、CON9_6をCSPI3_MISO、CON9_12をCSPI3_SCLK、CON9_14をCSPI3_RDYとして使用します。
|
ARMADILLO400_SPI3_SS0_CON9_16 | n |
CON9_16をSPI3_SS0として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS1_CON9_18 | n |
CON9_18をSPI3_SS1として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS2_CON9_15 | n |
CON9_15をSPI3_SS2として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS2_CON9_17 | n |
CON9_17をSPI3_SS3として使用します
ARMADILLO400_SPI3_CON9に依存します
|
Armadillo-400 シリーズでは、CON9_2 と CON9_26 を one wire マスターとして使用することができます。CON9_2 では、i.MX25 プロセッサ内蔵の one wire コントローラーを使用して機能を実現し、CON9_26 では GPIO one wire ドライバーを用いて機能を実現しています。
one wire マスタードライバーは標準で有効になっていません。one wire バスにスレーブデバイスを接続し、それを使用可能にするためには、one wire マスタードライバーとスレーブデバイスのドライバーを有効にする必要があります。
one wire 機能に関連するカーネルコンフィギュレーションを表9.37「one wire コンフィギュレーション」に示します。
表9.37 one wire コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
W1 | n |
Linuxカーネルのone wireサポートを有効にします
|
W1_MASTER_MXC | n |
i.MX25内蔵コントローラを使用したone wireマスタードライバーを有効にします
CON9_2を使用する場合には有効にしてください
|
W1_MASTER_GPIO | n |
GPIOを使用したone wireマスタードライバーを有効にします
CON9_26を使用する場合には有効にしてください
|
ARMADILLO400_W1_CON9_2 | n |
CON9_2をone wireとして使用します
|
ARMADILLO400_W1_CON9_26 | n |
CON9_26をone wireとして使用します
|
i.MX25 プロセッサは、PWM1 から PWM4 の 4 個の PWM モジュールを内蔵しています。Armadillo-400 シリーズでは、標準では PWM1 を LED バックライト (CON11_12)として使用しています。カーネルコンフィギュレーションを変更することにより、PWM2 を CON9_25 に、PWM4 を CON14_3 に割り当てることができます。
i.MX25のPWMドライバーでは、/sys/class/mxc_pwm/(PWM_NAME) 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表9.38「PWM sysfs」に示します。
表9.38 PWM sysfs
ファイル名 | 説明 |
---|
period_ns |
PWMの周期をnsec単位で設定します
設定可能な範囲は、17から2,147,483,647(約20nsecから2sec)です
|
duty_ns |
PWMのON時間(invert = 1の場合はOFF時間)をnsec単位で設定します
設定可能な範囲は、0 < duty_ns < period_nsの範囲です
|
invert |
1に設定すると、PWM出力が反転します
|
enable |
1に設定すると、PWM出力が有効になります
0で出力が停止します
PWM出力中でも、period_ns、duty_ns、invertは設定変更可能です
|
PWM 機能に関連するカーネルコンフィギュレーションを表9.39「PWM コンフィギュレーション」に示します。
表9.39 PWM コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
MXC_PWM | y |
i.MX25のPWMドライバーを有効にします
|
MXC_PWM_CLASS | y |
sysfs経由でPWMの設定を可能にします
|
ARMADILLO400_PWM2_CON9_25 | n |
CON9_25をPWM2として使用します
PWM_NAMEはCON9_25です
|
ARMADILLO400_PWM4_CON14_3 | n |
CON14_3をPWM4として使用します
PWM_NAMEはCON14_3です
|
i.MX25 プロセッサは、CAN1 及び CAN2 の 2 個の CAN コントローラ(FlexCAN)を内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CAN2 を CON14 に割り当てることが可能です。CAN ドライバーは標準状態で有効になっていません。
CAN機能は、SocketCANフレームワークを使用して実現しています。SocketCANについては、linux-2.6.26-at/Documentation/networking/can.txtなどを参照してください。
CAN ドライバーは以下の機能を有します。
/sys/devices/platform/FlexCAN.1/ 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表9.40「CAN sysfs」に示します[]。
表9.40 CAN sysfs
ファイル名 | 説明 | デフォルト値 | 使用条件 |
---|
br_clksrc |
クロックソースを指定します
busを指定すると、クロックソースに66.5MHzを使用します
oscを指定すると、クロックソースに24MHzを使用します
| bus | A |
br_presdiv |
クロックソースのプリスケーラー分周値を設定します
1から8を指定できます
| 7 | A |
br_propseg |
プロパゲーションセグメントの値を設定します
1から8を指定できます
| 5 | A |
br_pseg1 |
フェーズバッファセグメント1の値を設定します
1から8を指定できます
| 5 | A |
br_pseg2 |
フェーズバッファセグメント2の値を設定します
1から8を指定できます
| 8 | A |
br_rjw |
リシンクロナイゼーションジャンプ幅を設定します
1から4を指定できます
| 3 | A |
bitrate |
通信速度[bps]を示します
書き込みはできません
| 500000 | なし |
std_msg |
標準フォーマットに対応するかどうかを設定します
1で対応、0で非対応となります
| 1 | A |
ext_msg |
拡張フォーマットに対応するかどうかを設定します
1で対応、0で非対応となります
| 1 | A |
maxmb |
メッセージバッファの最大数を設定します
2から64を指定できます
| 64 | A |
rx_maxmb |
受信メッセージバッファのサイズを設定します
送信メッセージバッファのサイズは maxmb-rx_maxmbとなります
1からmaxmb-1を指定できます
| 32 | A |
state |
現在のステータスを表示します
"インターフェースのステータス::エラー状態"というフォーマットで表示されます
インターフェースのステータスは、"Start"(up状態)か"Stop"(donw状態)のいずれかです
エラー状態は、"normal"(エラーなし)か"error passive"(エラーパッシブ状態)、"bus off"(バスオフ状態)のいずれかです
| Stop::normal | なし |
boff_rec |
自動的にバスオフから復帰するかどうかを設定します
0で自動的に復帰、1で復帰しません
| 1 | A |
listen |
listenモード(受信のみ)にするかどうかを設定します
1でlistenモード有効、0で無効になります
| 0 | A |
loopback |
loopbackモードにするかどうかを設定します
1でloopbackモード有効、0で無効になります
| 0 | A |
smp |
サンプリング時の動作を設定します
0で1回のサンプルで受信したビットの値を決定します
1で3回のサンプルをおこない多数決により受信したビットの値を決定します
| 1 | A |
srx_dis |
自身が送信したフレームを受信するかどうかを設定します
0で自身が送信したフレームを受信し、1で受信しません
| 1 | A |
set_resframe |
リモートフレームを受信した際、返信するデータフレームを設定します
"ID#DATA"という形式で設定します
IDには、16進数3桁(標準フォーマット)もしくは16進数8桁を指定します
DATAには、1データあたり16進数2桁で、0から8個までのデータを指定します
データは.で区切ることもできます
| なし | B |
del_resframe |
set_resframeで設定したデータフレームを削除します
削除するデータフレームのIDを16進数3桁(標準フォーマット)もしくは16進数8桁で指定してください
| なし | B |
show_resframe |
set_resframeで設定したデータフレームを表示します
書き込みはできません
| なし | C |
wakeup |
サスペンド時にCAN受信によるウェイクアップを有効にするかどうかを設定します
1でウェイクアップ有効、0で無効となります
| 0 | A |
wak_src |
サスペンド時にローパスフィルタを使用するかどうかを設定します
0でフィルタリング無効、1で有効になります
| 0 | A |
条件A: ネットワークインターフェースがoffの状態時(ifconfig canX off)に設定可能。
条件B: ネットワークインターフェースがonの状態時(ifconfig canX on)に設定可能。
条件C: ネットワークインターフェースがonの状態時(ifconfig canX on)に参照可能。
通信速度は以下の計算式により算出されます。
CAN 機能に関連するカーネルコンフィギュレーションを表9.41「CAN コンフィギュレーション」に示します。
表9.41 CAN コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
CAN | n |
Linux カーネルの CAN サポートを有効にします
|
CAN_RAW | n |
RAW_CANプロトコルを有効にします
|
CAN_BCM | n |
CAN_BCMプロトコルを有効にします
|
CAN_FLEXCAN | n |
i.MX25のFlexCANドライバーを有効にします
|
ARMADILLO400_CAN2_CON14 | n |
CON14をCAN2として使用します
CON14_3をCAN2_TXCAN、CON14_4をCAN2_RXCANとして使用します
|
i.MX25 プロセッサは、キーパッドコントローラを内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CON11をキーパッドに割り当てることが可能です。キーパッドドライバーは標準状態で有効になっていません。
| |
---|
キーパッドドライバーを有効にすると、イベントデバイスは /dev/input/event0 にマップされます。そのため、ボタン及びタッチスクリーンのイベントデバイス番号が変わります。 |
キーパッド機能に関連するカーネルコンフィギュレーションを表9.42「キーパッドコンフィギュレーション」に示します。
表9.42 キーパッドコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
INPUT | y |
Linux カーネルのインプットレイヤサポートを有効にします
|
INPUT_EVDEV | y |
インプットレイヤのイベントデバイスサポートを有効にします
|
INPUT_KEYBOARD | y |
Linux カーネルのキーボードサポートを有効にします
|
KEYBOARD_MXC | n |
i.MX25のキーパッドドライバーを有効にします
|
ARMADILLO400_KEYPAD_CON11 | n |
CON11のキーパッドを有効にします
COLとROWを少なくとも一つずつ有効にしてください
|
ARMADILLO400_KEYPAD_ROW0_CON11_40 | n |
CON11_40をROW0として使用します
|
ARMADILLO400_KEYPAD_ROW1_CON11_41 | n |
CON11_41をROW1として使用します
|
ARMADILLO400_KEYPAD_ROW2_CON11_42 | n |
CON11_42をROW2として使用します
|
ARMADILLO400_KEYPAD_ROW3_CON11_43 | n |
CON11_43をROW3として使用します
|
ARMADILLO400_KEYPAD_COL0_CON11_44 | n |
CON11_44をCOL0として使用します
|
ARMADILLO400_KEYPAD_COL1_CON11_45 | n |
CON11_45をCOL1として使用します
|
ARMADILLO400_KEYPAD_COL2_CON11_46 | n |
CON11_46をCOL2として使用します
|
ARMADILLO400_KEYPAD_COL3_CON11_47 | n |
CON11_47をCOL3として使用します
|
ARMADILLO400_KEYPAD_ROW4_CON11_48 | n |
CON11_48をROW4として使用します
|
ARMADILLO400_KEYPAD_ROW5_CON11_49 | n |
CON11_49をROW5として使用します
|
ROW及びCOLのどの範囲をキーパッドとして使用するかは、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c の armadillo440_keypad_data 変数に適切な値を指定してください。また、各ボタンがどのイベントに対応するかというキーマップは armadillo440_keymapping 変数で指定してください。
Armadillo-400 シリーズは Linux パワーマネジメントのスリープ機能をサポートします。スリープ状態では、アプリケーションの実行は一時停止し、カーネルはサスペンド状態となります。スリープ状態では外部デバイスの動作を停止するため、消費電力を抑えることができます。スリープ状態から実行状態に復帰すると、カーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。
/sys/power/state
ファイルに、standby もしくは mem を書き込むことにより、スリープ状態へ移行することができます。また、スリープ状態中にウェイクアップ要因による割り込みが発生すると、スリープ状態から実行状態へ復帰します。
各スリープ状態の違いは表9.43「スリープ状態」を参照してください。power-on suspend に比べ、suspend-to-RAM の方がより少ない消費電力でスリープすることができます。
表9.43 スリープ状態
スリープ状態 | state ファイルに書き込む文字列 | i.MX25 パワーモード | ウェイクアップ要因 |
---|
power-on suspend | standby | Doze モード | シリアル入力、タッチスクリーン入力、ボタン入力、アラーム割り込み入力、CAN入力、拡張バス割り込み入力[] |
suspend-to-RAM | mem | Stop モード | ボタン入力、アラーム割り込み入力、CAN入力 |
ウェイクアップ要因になることができるデバイスを、ウェイクアップ要因にするかどうかは、各デバイスに対応する sysfs エントリの power/wakeup
ファイルで指定することができます。power/wakeup
ファイルに enabled と書き込むとウェイクアップ要因になり、 disabled と書き込むとウェイクアップ要因ではなくなります。各デバイスに対応する power/wakeup
ファイルの一覧を 表9.44「ウェイクアップ要因の指定」に示します。また、これらのデフォルト値はカーネルコンフィギュレーションで変更することもできます。
表9.44 ウェイクアップ要因の指定
デバイス | sysfs ファイル | 初期状態 |
---|
シリアルインターフェース1 | /sys/devices/platform/mxcintuart.1/tty/ttymxc1/power/wakeup | enabled |
シリアルインターフェース2 | /sys/devices/platform/mxcintuart.2/tty/ttymxc2/power/wakeup | disabled |
シリアルインターフェース3 | /sys/devices/platform/mxcintuart.4/tty/ttymxc4/power/wakeup | disabled |
シリアルインターフェース4 | /sys/devices/platform/mxcintuart.3/tty/ttymxc3/power/wakeup | disabled |
タッチスクリーン | /sys/devices/platform/imx_adc_ts.0/power/wakeup[] | enabled |
ボタン | /sys/devices/platform/gpio-keys.0/power/wakeup | enabled |
キーパッド | /sys/devices/platform/mxc_keypad.0/power/wakeup | enabled |
FlexCAN | /sys/devices/platform/FlexCAN.1/wakeup | disabled |
リアルタイムクロック | /sys/devices/platform/i2c-adapter/i2c-1/1-0030/rtc/rtc0/power/wakeup | enabled |
表9.45 ウェイクアップ要因のデフォルト値を指定するコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
Armadillo-420/440 | Armadillo-460 |
---|
ARMADILLO400_UART2_ WAKE_SRC_SELECT | y | y |
デフォルトでUART2(シリアルインターフェース1)によるウェイクアップを有効にします
|
ARMADILLO400_UART3_ WAKE_SRC_SELECT | n | y |
デフォルトでUART3(シリアルインターフェース2)によるウェイクアップを有効にします
|
ARMADILLO400_UART4_ WAKE_SRC_SELECT | n | y |
デフォルトでUART4(シリアルインターフェース4)によるウェイクアップを有効にします
|
ARMADILLO400_UART5_ WAKE_SRC_SELECT | n | n |
デフォルトでUART5(シリアルインターフェース3)によるウェイクアップを有効にします
|
ARMADILLO400_TOUCHSCREEN_ WAKE_SRC_SELECT | y | y |
デフォルトでタッチスクリーンによるウェイクアップを有効にします
|
ARMADILLO400_GPIO_KEYS_ WAKE_SRC_SELECT | y | y |
デフォルトでボタンによるウェイクアップを有効にします
|
ARMADILLO400_RTC_ALM_INT_ WAKE_SRC_SELECT[] | n | n |
デフォルトでアラーム割り込み1によるウェイクアップを有効にします
|
ARMADILLO460_RTC_ALM_INT_ WAKE_SRC_SELECT | n | y |
Armadillo-460で、デフォルトでアラーム割り込み1によるウェイクアップを有効にします
|
9.20.1.1. 外部デバイスへの電源供給について
Armadillo-400 シリーズは、PMIC(Power Management IC)によって生成される、+5V、+3.3V_CPU、+3.3V_IO、+1.45V、+1.8Vの5種類の電源系統を使用しています[]。このうち、+5V と +3.3V_IO は動的に出力をON/OFFできます。
Armadillo-400 シリーズの Linux カーネルでは、電源の管理はレギュレータークラス(regulator class)によって行っています。Armadillo-400 シリーズでは、PMICの出力それぞれを一つのレギュレーターとして割り当てています。電源系統と、レギュレーターとの関係を、表9.46「電源系統とレギュレーターの対応」に示します。
表9.46 電源系統とレギュレーターの対応
電源系統 | レギュレーター名 | 固定/可変 |
---|
+5V | REG1 | 可変 |
+3.3V_CPU | REG2 | 固定 |
+1.45V | REG3 | 固定 |
+1.8V | REG4 | 固定 |
+3.3V_IO | REG5 | 可変 |
電源を必要とするデバイスのデバイスドライバーは、レギュレーターを取得することで、それを使用している旨を宣言することができます。スリープ状態に移行する際のサスペンド処理で、ON/OFF 可能なレギュレーター(REG1とREG5)のうち、どのデバイスからも使用されていないレギュレーターの出力は OFF となります。レギュレーターを使用するデバイスを、表9.47「デバイスが使用するレギュレーター」に示します。
表9.47 デバイスが使用するレギュレーター
デバイス | レギュレーター名 |
---|
シリアルインターフェース2(UART3) | REG5 |
シリアルインターフェース3(UART5) | REG5 |
タッチスクリーン | REG5 |
MMC/SD/SDIOホスト(eSDHC1)[] | REG2 |
MMC/SD/SDIOホスト(eSDHC2) | REG5 |
USB[] | REG1 |
これらのうち、microSD/SD と USB への電源供給は、扱いが特殊になっています。microSD(eSDHC1) への電源供給は、パワースイッチを介して Armadillo-420/440は+3.3V_CPU から、Armadillo-460は+3.3V_EXTから行っています。+3.3V_CPU、+3.3V_EXT 自体は ON/OFF することはできませんが、パワースイッチに接続された GPIO を制御することにより、microSD/SD への電源供給を ON/OFF することができます。この機能を使い、サスペンド処理で microSD/SD カードへの電源供給を OFF にします。
Armadillo-420/440のUSB への電源供給は、VIN(Power Input) をそのまま使うか、PMIC の +5V 出力を使うか、選択できます[]。標準では VIN を使用します。PMIC の +5V 出力を使いたい場合は、linux-2.6.26-at/arch/arm/mach-mx25/board-armadillo400.h
の USB_PWRSRC を USB_PWRSRC_5V に定義してから、カーネルをビルドしなおしてください。USB への電源供給にどちらの供給源を使用していても、サスペンド処理で電源供給を OFF にします。
スリープ状態における +3.3V_IO (REG5) の振る舞いは、Armadillo-400 シリーズのモデル、及びそれが使用しているデバイスによるウェイクアップを有効にしているかどうかで変わります。Armadillo-420 ベーシックモデルでは、シリアルインターフェース2 と3 が、REG5 を使用します。しかし、シリアルインターフェース2 と3 によるウェイクアップはデフォルトでは無効になっているため、スリープ状態では +3.3V_IO が OFF になります。いずれかのシリアルインターフェースによるウェイクアップを有効にすると、スリープ状態でも +3.3V_IO を出力しつづけるようになります。
Armadillo-420 WLAN モデル(AWL12対応)とArmadillo-420 WLAN モデル(AWL13対応)、では、シリアルインターフェース2 と3 及び MMC/SD/SDIOホスト(eSDHC2) が REG5 を使用します。デフォルトではいずれのデバイスによるウェイクアップも無効になっているため、スリープ状態では +3.3V_IO が OFF になります。Armadillo-420 ベーシックモデルと同様に、いずれかのシリアルインターフェースのによるウェイクアップを有効にすると、スリープ状態でも +3.3V_IO を出力しつづけるようになります。
Armadillo-440 液晶モデルでは、シリアルインターフェース2 と3 及びタッチスクリーンが REG5 を使用します。タッチスクリーンによるウェイクアップがデフォルトで有効になっているため、スリープ状態でも +3.3V_IO が出力され続けます[]。タッチスクリーンによるウェイクアップを無効にすると、スリープ状態で +3.3V_IO が OFF になります。
Armadillo-460 ベーシックモデルでは、シリアルインターフェース2 と3 及びタッチスクリーン[]が REG5 を使用します。シリアルインターフェース2 と3及びタッチスクリーンによるウェイクアップがデフォルトで有効になっているため、スリープ状態でも +3.3V_IO が出力され続けます[]。シリアルインターフェース2 と3及びタッチスクリーンによるウェイクアップを無効にすると、スリープ状態で +3.3V_IO が OFF になります。
9.20.1.2. スリープ中の外部デバイスの扱いについて
前節で述べたように、Armadillo-400 シリーズでは、スリープ状態に移行するためのサスペンド処理で USB 及び microSD/SD への電源供給を OFF にします。
そのため、USB デバイスはスリープ状態に移行する前に、安全に取り外しができる状態にしておく必要があります。すなわち、USB メモリはアンマウントしておく必要があります。リジューム時にデバイス検出が再度行われるため、USB デバイスはスリープ中に抜き差しすることができます。
一方で、microSD/SD カードは、マウントしたままでスリープ状態に移行することができます。これを可能にするために、MMC/SD/SDIO ホストドライバーではリジューム時にプローブ処理を行わず、同じカードが挿入されているものとして扱います。そのため、スリープ中に microSD/SD カードの抜き差しを行うことはできません。
Ethernet デバイスは実行状態に復帰後、ケーブルを抜き差ししたときと同様の処理が行われます。Auto-negotiation が有効になっている場合、リジューム後に Auto-negotiation が行われます。
linux-2.6.26-at15 以降の Linux カーネルからは、/sys/power/supply
ファイルに、off を書き込むことにより、PMIC(Power Management IC)の電源をOFF状態にすることができます[]。この状態では、PMICからの(CPUを含む)全ての電源供給を停止するため、「スリープ機能」で紹介したスリープ状態よりも消費電力が少なくなります。Armadillo-460の場合は、アラーム割り込み2を利用して、電源OFF状態からON状態にすることができます[]。アラーム割り込み2の利用方法については、「アラーム割り込み」を参照してください。
| |
---|
PMICを電源OFF状態にしたままArmadillo-460の電源を切断し、再度電源を接続してもPMICが電源OFF状態から復帰できない場合があります。これは、PMICの電源に接続されているコンデンサが放電されずにPMICが電源OFF状態を維持するためです。確実にPMICを電源OFF状態から復帰させるためには、CON13_4ピンをGNDショートするか、アラーム割り込み2を利用してください。 |
| |
---|
PMICの電源がOFF状態であっても、電源の供給にPMICを介さないLCDインターフェースやArmadillo-460の拡張バスコネクタ、電源の供給にPMICを介さずパワースイッチがOFFとならないArmadillo-420/440のmicroSDスロット、Armadillo-460のUSBインターフェースには電源を供給します。これらに外部デバイスを接続すると、消費電力が大きくなる場合があります。 |