第8章 Linux カーネルデバイスドライバー仕様

本章では、Armadillo-400 シリーズに固有な Linux カーネルのデバイスドライバーの仕様について説明します。

Armadillo-400 シリーズでは、カーネルコンフィギュレーションを変更することにより、標準で有効になっているもの以外の様々な機能を使用することができます。

Armadillo-400で、標準で有効になっていないデバイスドライバーを使用するためには、以下の手順でカーネルコンフィギュレーションをおこなう必要があります。

  1. ボードオプションによりどのピンに機能を割り当てるか選択する。

    ボードオプションは、make menuconfig でコンフィギュレーションを行う場合、Linux Kernel Configuration の System Type -> Freescale MXC Implementations -> MX25 Options -> Armadillo-400 Board options で変更することができます。

    ボードオプションでは、一つのピンに複数の機能を割り当てることはできないようになっています。また、機能が割り当てられなかったピンは、GPIO として設定されます。

  2. ホスト(マスター)のデバイスドライバーを有効にする。

  3. 必要であれば、スレーブのデバイスドライバーを有効にする。

  4. 必要であれば、linux-2.6.26-at/arch/arm/mach-mx25/armadillo400.c にデバイス情報を追記する。

カーネルコンフィギュレーションを変更する方法は、「イメージをカスタマイズする」を参照してください。

8.1. UART

i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-400 シリーズでは標準状態で UART2 をシリアルインターフェース1 (CON3)、UART3 をシリアルインターフェース2 (CON9)、UART5 をシリアルインターフェース3 (CON9)に使用しています。また、カーネルコンフィギュレーションを変更することにより、CON11 に UART3 及び UART4 の機能を割り当てることができます。UART9 もしくは UART11 に機能を割り当てた場合、CTS/RTSによるハードウェアフローコントロールを有効にするか無効にするかを選択することができます。

UART ドライバーは以下の機能を有します。

  • 7/8 bit 送受信

  • 1/2 ストップビット

  • None/Odd/Even パリティ

  • XON/XOFF ソフトウェアフローコントロール

  • CTS/RTS ハードウェアフローコントロール

  • モデム信号コントロール

  • スタンダード Linux シリアル API

  • 最大ボーレート 230.4Kbps(シリアルインターフェース1) / 4Mbps[17] (シリアルインターフェース2, 3)

各シリアルインターフェースとデバイスファイルの対応を、表8.1「シリアルインターフェースとデバイスファイルの対応」に示します。

表8.1 シリアルインターフェースとデバイスファイルの対応

シリアルインターフェースデバイスファイル使用モジュール
シリアルインターフェース1 /dev/ttymxc1 UART2
シリアルインターフェース2 /dev/ttymxc2 UART3
シリアルインターフェース3 /dev/ttymxc4 UART5
シリアルインターフェース4 /dev/ttymxc3 UART4

UART 機能に関連するカーネルコンフィギュレーションを表8.2「UART コンフィギュレーション」に示します。

表8.2 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に依存します


8.2. Ethernet

Armadillo-400 シリーズの Ethernet ドライバーは以下の機能を有します。

  • AutoNegotiation サポート

  • CarrierDetect サポート

  • Ethtool サポート

    • link status

    • 10/100Mbps Speed

    • Full/Half Duplex

    • AutoNegotiation enable/disable

8.3. SD/MMC/SDIO ホスト

i.MX25 プロセッサは、SD/MMC/SDIO ホストコントローラ(eSDHC)を二個内蔵しています。Armadillo-400 シリーズでは、標準状態で eSDHC1 を microSD スロット(CON1)に使用しています。また、カーネルコンフィギュレーションを変更することにより、CON9 に eSDHC2の機能を割り当てることができます。

Armadillo-400 シリーズの SD/MMC/SDIO ホストドライバーは以下の機能を有します。

  • 4ビットモード

  • カードディテクト

microSD カードスロットにカードが挿入されると、/dev/mmcblkN (Nは0または1)として認識されます。

SD/MMC/SDIO ホスト機能に関連するカーネルコンフィギュレーションを表8.3「SD/MMC/SDIO ホストコントローラ コンフィギュレーション」に示します。

表8.3 SD/MMC/SDIO ホストコントローラ コンフィギュレーション

カーネルコンフィギュレーションデフォルト説明

MMC

y

Linux カーネルの MMC/SD/SDIO カードサポートを有効にします

MMC_IMX_ESDHCI

y

i.MX25のeSDHCドライバーを有効にします

ARMADILLO400_SDHC2_CON9

n

CON9のSDHC2を有効にします

CON9_15からCON9_24を使用します


8.4. USB 2.0 ホスト

Armadillo-400 シリーズの USB 2.0 ホストドライバーは以下の機能を有します。

  • EHCI 準拠

  • OTG非サポート

  • USB High Speed ホスト × 1

  • USB Full Speed ホスト × 1

USB デバイスが検出されると、/dev/sd* にマップされます。

8.5. フレームバッファ

Armadillo-440 のビデオ出力機能は、フレームバッファデバイスとして実装されています。

フレームバッファデバイスドライバーは以下の機能を有します。

  • ダブルバッファサポート

  • 最大解像度 SVGA

Armadillo-440 液晶モデルの標準では、以下の設定になっています。

  • 解像度 480 × 272 ピクセル

  • RGB 565 カラー

フレームバッファとデバイスファイルの対応を、表8.4「フレームバッファとデバイスファイルの対応」に示します。

表8.4 フレームバッファとデバイスファイルの対応

フレームバッファデバイスファイル
バックグラウンドプレーン /dev/fb0
グラフィックウィンドウ /dev/fb1

8.6. LED バックライト

Armadillo-440 の LED バックライト機能は、バックライトクラスとして実装されています。

/sys/class/backlight/pwm-backlight ディレクトリ以下のファイルによって、バックライトの制御を行うことができます。

輝度の調整は、brightness ファイルによって行うことができます。 brightness ファイルに 0(消灯)〜255(最高輝度)までの数値を書き込むことにより、輝度を変更することができます。

また、brightness ファイルを読むことにより現在の輝度を知ることができます。

バックライトの点灯/消灯は、bl_power ファイルによって行うことができます。bl_power に 0 を書き込むと消灯になり、1 を書き込むと点灯になります。

8.7. タッチスクリーン

Armadillo-440 のタッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。

表8.5「タッチスクリーンイベント」に示すイベントが発生します。

表8.5 タッチスクリーンイベント

TypeCodeValue
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-440 液晶モデルの標準状態では、タッチスクリーンのイベントデバイスは /dev/input/event1 にマップされます。

[警告]

イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。

8.8. オーディオ

Armadillo-400 シリーズのオーディオ機能は、ALSA デバイスとして実装されています。 ALSA デバイスドライバーは以下の機能を有します。

  • Playback(2ch) / Capture(1ch)

  • サンプリング周波数 48k, 32k, 24k, 16k, 12k, 8k Hz

  • フォーマットSigned 16/20/24 bit, Little-endian

オーディオデバイスの制御は、ALSA ライブラリ (libasound2) を通じて行うことができます。

[警告]

Armadillo-400 シリーズのオーディオドライバーでは、録音と再生を同時に行うことはできません。

i.MX25では、オーディオマルチプレクスにより、オーディオ機能をどのピンで使用するかを選択することができます。Armadillo-400シリーズではカーネルコンフィギュレーションでオーディオマルチプレクスの設定をおこなうことができます。標準では、オーディオマルチプレクスは AUD6 を使用するようになっており、オーディオ機能は CON11 に接続されます。コンフィギュレーションにより AUD5 を使用することで CON9 に接続することができます。

オーディオ 機能に関連するカーネルコンフィギュレーションを表8.6「オーディオ コンフィギュレーション」に示します。

表8.6 オーディオ コンフィギュレーション

カーネルコンフィギュレーションデフォルト説明

SOUND

y

Linux カーネルのサウンドカードサポートを有効にします

SND

y

Linux カーネルのALSAサポートを有効にします

SND_SOC

y

Linux カーネルのASoCサポートを有効にします

SND_MXC_SOC

y

i.MXでオーディオ機能を実現するためのドライバーを有効にします

SND_SOC_ARMADILLO440_WM8978

y

Armadillo-400シリーズでWM8978コーデックを使用したオーディオ機能を実現するためのドライバーを有効にします

ARMADILLO400_AUD5_CON11

y

CON11にオーディオ機能を出力します

CON11_42からCON11_47を使用します

ARMADILLO400_AUD6_CON9

n

CON9にオーディオ機能を出力します

CON9_15, 17, 21, 22, 23, 24を使用します

ARMADILLO400_AUD5_CON11と排他です


8.9. GPIO

Armadillo-400 シリーズの GPIO は、generic GPIO として実装されています。

ユーザーランドから GPIO を操作するためのインターフェースとしては、GPIO sysfs と Armadillo-200 シリーズ互換 GPIO ドライバーの2つがあります。標準状態では GPIO sysfs ドライバーが有効になっています。

カーネルコンフィギュレーションで機能が割り当てられなかったピンは、全て GPIO として設定されます。

8.9.1. GPIO sysfs

GPIO sysfsでは、/sys/class/gpio/(GPIO_NAME) ディレクトリ以下のファイルで入出力方向の設定、出力レベルの設定、入出力レベルの取得を行うことができます。

GPIO_NAME ディレクトリと GPIOピン の対応を表8.7「GPIO_NAME と GPIO ピンの対応」に示します。

表8.7 GPIO_NAME と GPIO ピンの対応

GPIO_NAMEGPIO ピン初期入出力方向初期出力レベル
CON9_1CON9 1ピン入力-
CON9_2CON9 2ピン入力-
CON9_11CON9 11ピン入力-
CON9_12CON9 12ピン入力-
CON9_13CON9 13ピン入力-
CON9_14CON9 14ピン入力-
CON9_15CON9 15ピン入力-
CON9_16CON9 16ピン入力-
CON9_17CON9 17ピン入力-
CON9_18CON9 18ピン入力-
CON9_21CON9 21ピン入力-
CON9_22CON9 22ピン入力-
CON9_23CON9 23ピン入力-
CON9_24CON9 24ピン入力-
CON9_25CON9 25ピン入力-
CON9_26CON9 26ピン入力-
CON9_27CON9 27ピン出力LOW
CON9_28CON9 28ピン出力LOW

/sys/class/gpio/(GPIO_NAME)/direction ファイルで入出力方向の設定を行うことができます。表8.8「GPIO 入出力方向の設定」に示す設定をdirection ファイルに書き込むことにより、入出力方向を設定します。また、direction ファイルを読み込むことで現在の設定を知ることができます。

表8.8 GPIO 入出力方向の設定

設定説明
high入出力方向を出力に、出力レベルを HIGH レベルに設定します。出力レベルの取得/設定を行うことができます。
low入出力方向を出力に、出力レベルを LOW レベルに設定します。出力レベルの取得/設定を行うことができます。
outlow を設定した場合と同じです。
in入出力方向を入力に設定します。入力レベルの取得を行うことができます。

/sys/class/gpio/(GPIO_NAME)/value ファイルで出力レベルの設定、入出力レベルの取得を行うことができます。0 が LOW レベルを、1 が HIGH レベルを意味します。

/sys/class/gpio/(GPIO_NAME)/edge ファイルで割り込みタイプの設定を行うことができます。表8.9「GPIO 割り込みタイプの設定」に示す設定をedge ファイルに書き込むことにより、割り込みタイプを設定します。また、edge ファイルを読み込むことで現在の設定を知ることができます。

表8.9 GPIO 割り込みタイプの設定

設定説明
none割り込みの検出を行いません。
falling立ち下がりエッジで割り込みの検出を行います。
rising立ち上がりエッジで割り込みの検出を行います。
both立ち下がり、立ち上がり両方のエッジで割り込みの検出を行います。

C言語で GPIO sysfs の割り込みを扱う例を、図8.1「GPIO sysfs 割り込みサンプルプログラム」に示します。サンプルプログラムを実行すると、CON9_1 の入出力方向を入力に、割り込みタイプを立ち下がりエッジ(falling)に設定して、割り込み待ちになります。割り込みを検出したら、そのときの GPIO ピンのレベルを表示します。3回割り込みを検出したら、プログラムを終了します。

#include <stdio.h>
#include <unistd.h>
#include <poll.h>
#include <fcntl.h>

#define GPIO_DIR "/sys/class/gpio"
#define GPIO_NAME "CON9_1"
#define GPIO_PATH GPIO_DIR "/" GPIO_NAME "/"

int main(void)
{
        int fd;
        int i;

        fd = open(GPIO_PATH "direction", O_RDWR);
        write(fd, "in", 2);
        close(fd);

        fd = open(GPIO_PATH "edge", O_RDWR);                                 1
        write(fd, "falling", 7);
        close(fd);

        for (i=0; i > 3; i++) {
                char val;
                struct pollfd pfd;

                fd = open(GPIO_PATH "value", O_RDWR);                        2
                read(fd, &val, 1);                                           3

                printf("waiting for interrupt..."); fflush(stdout);

                pfd.fd = fd;
                pfd.events = POLLIN;
                pfd.revents = 0;
                poll(&pfd, 1, -1);                                           4

                lseek(fd, 0, SEEK_SET);                                      5
                read(fd, &val, 1);
                close(fd);

                printf("OK (%c, %s)\n", val, val == '0' ? "Low" : "High");
                usleep(100000);
        }

        return 0;
}

図8.1 GPIO sysfs 割り込みサンプルプログラム


1

edge ファイルに "falling" を書き込む事で、割り込みタイプを立ち下がりエッジに指定します。

2

割り込みタイプを指定した後で、value ファイルをオープンします。

3

一度 value ファイルを空読みします。これ以降に発生した割り込みがポーリングの対象になります。

4

poll または select システムコールで割り込みの発生を待つことができます。

5

一度空読みしているので、割り込み発生後の GPIO ピンのレベルを調べるためには、lseek システムコールでオフセットをファイルの先頭に戻す必要があります。

8.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ピンの対応を表8.10「Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧」に示します。

表8.10 Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧

GPIO 名GPIO ピン初期入出力方向初期出力レベル
GPIO0CON9 21ピン入力-
GPIO1CON9 22ピン入力-
GPIO2CON9 23ピン入力-
GPIO3CON9 24ピン入力-
GPIO4CON9 25ピン入力-
GPIO5CON9 26ピン入力-
GPIO6CON9 27ピン出力LOW
GPIO7CON9 28ピン出力LOW
GPIO8CON9 11ピン入力-
GPIO9CON9 12ピン入力-
GPIO10CON9 13ピン入力-
GPIO11CON9 14ピン入力-
GPIO12CON9 15ピン入力-
GPIO13CON9 16ピン入力-
GPIO14CON9 17ピン入力-
GPIO15CON9 18ピン入力-

[警告]

Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と対応する GPIO ピンの位置は、Armadillo-200 シリーズと同じになっています。そのため、Armadillo-200 シリーズ互換 GPIO ドライバーではArmadillo-400 シリーズで使用可能な GPIO のうち、一部だけしか操作することができません。

デバイスファイルのパラメータは、以下の通りです。

表8.11 Armadillo-200 シリーズ互換 GPIO ドライバーデバイスファイル

タイプメジャー番号マイナー番号デバイスファイル
キャラクタデバイス10185/dev/gpio

ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、GPIOを操作するためのコマンドを指定します。

表8.12 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-440/gpioctrl)のソースコードを参考にしてください。

8.10. LED

Armadillo-400 シリーズの LED ドライバーは、LED クラスドライバーと Armadillo-200 シリーズ互換 LED ドライバーの2つがあります。標準状態では、LED クラスドライバーが有効になっています。

8.10.1. 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 の一覧を表8.13「LED 一覧」に示します。

表8.13 LED 一覧

LED_NAME対応する LEDデフォルトトリガー
redLED3なし
greenLED4default-on
yellowLED5なし

8.10.2. Armadillo-200 シリーズ互換 LED ドライバー

Armadillo-200 シリーズ互換 LED ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、LED の操作を行うことができます。

[警告]

Armadillo-200 シリーズ互換 LED ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_LEDS_GPIO を無効に、CONFIG_ARMADILLO2X0_LED を有効にして、カーネルをビルドする必要があります。

LED に対応するデバイスファイルのパラメータは、以下の通りです。

表8.14 LEDノード

タイプメジャー番号マイナー番号デバイスファイル
キャラクタデバイス10215/dev/led

ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、LED を操作するためのコマンドを指定します。

表8.15 LED操作コマンド

コマンド説明第3引数のType
LED_RED_ONLED3(赤)を点灯しますなし
LED_RED_OFFLED3(赤)を消灯しますなし
LED_RED_STATUSLED3(赤)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_RED_BLINKONLED3(赤)の点滅を開始しますなし
LED_RED_BLINKOFFLED3(赤)の点滅を停止しますなし
LED_RED_BLINKSTATUSLED3(赤)の点滅状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_ONLED(緑)を点灯しますなし
LED_GREEN_OFFLED4(緑)を消灯しますなし
LED_GREEN_STATUSLED4(緑)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_BLINKONLED4(緑)の点滅を開始しますなし
LED_GREEN_BLINKOFFLED4(緑)の点滅を停止しますなし
LED_GREEN_BLINKSTATUSLED4(緑)の点滅状態を取得します状態を保存するバッファ(最小1バイト)

LEDデバイスドライバーの詳細な使用方法については、サンプルのLED制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-440/ledctrl)のソースコードを参考にしてください。

8.11. ボタン

Armadillo-400 シリーズでは、ボタン入力はインプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。

Armadillo-440 液晶モデルでは、Armadillo-440 本体にオンボードタクトスイッチ× 1と、LCD 拡張ボードにボタン× 3が実装されています。

それぞれのボタンに対するイベントを、表8.16「Armadillo-440液晶モデルボタンイベント」に示します。

表8.16 Armadillo-440液晶モデルボタンイベント

ボタンTypeCodeValue
SW1EV_KEY(1)KEY_ENTER(28)0 or 1
LCD_SW1EV_KEY(1)KEY_BACK(158)0 or 1
LCD_SW2EV_KEY(1)KEY_MENU(139)0 or 1
LCD_SW3EV_KEY(1)KEY_HOME(102)0 or 1

Armadillo-440 液晶モデルの標準状態では、ボタンのイベントデバイスは /dev/input/event0 にマップされます。

[警告]

イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、ボタンのイベントデバイス番号は変わる可能性があります。

8.12. リアルタイムクロック

Armadillo-440 LCD 拡張ボード及びArmadillo-400 RTC オプションモジュールには、リアルタイムクロックが搭載されています。

リアルタイムクロックは、/dev/rtc0 として認識されます。Armadillo-440 液晶モデルに RTC オプションモジュールを接続した場合、RTC オプションモジュールのリアルタイムクロックが /dev/rtc0 となり、LCD 拡張ボードのリアルクロックは /dev/rtc1 として認識されます。

8.13. ウォッチドッグタイマー

Armadillo-400 シリーズで採用している i.MX25 プロセッサは、内蔵ウォッチドッグタイマーを有しています。

Armadillo-400 シリーズの標準ブートローダーでは、起動直後にこの内蔵ウォッチドッグタイマーを有効にします。標準状態でのタイムアウト時間は 10 秒に設定されます。

Linux カーネルでは、自動でウォッチドッグタイマーをキックします。

もし、何らかの要因で Linux カーネルがフリーズしてウォッチドッグタイマーをキックできなくなりタイムアウトが発生すると、システムリセットが発生します。

8.14. I2C

i.MX25 プロセッサは、I2C1 から I2C3 の 3 個の I2C コントローラーを内蔵しています。Armadillo-400 シリーズでは、標準で I2C1 はボード内蔵バスとして使用し、I2C2 は CON14 に、I2C3 は CON11 に割り当てています。

I2C バスドライバーは以下の機能を有します。

  • I2C マスターモード

  • 最大 400 kbps

I2C バスにスレーブデバイスを接続し、それを使用可能にするためには、スレーブデバイスに対応したチップドライバーを有効にする必要があります。また、チップドライバーが "new style"[18] で記述されていた場合、struct i2c_board_info を適切に設定しなければいけません。Armadillo-400 シリーズでは、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の armadillo400_i2cN_board_info配列(Nはバスに対応した数値)に記述してください。

I2C 機能に関連するカーネルコンフィギュレーションを表8.17「I2C コンフィギュレーション」に示します。

表8.17 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に使用します


8.15. SPI

i.MX25 プロセッサは、CSPI1 から CSPI3 の 3 個の SPI コントローラーを内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CSPI1 及び CSPI3 を CON9 に割り当てることが可能です。

SPI マスタードライバーは以下の機能を有します。

  • SPI マスターモード

  • 複数スレーブセレクト

SPI マスタードライバーは標準状態で有効になっていません。SPI バスにスレーブデバイスを接続し、それを使用可能にするためには、SPI マスタードライバーとスレーブデバイスのドライバーを有効にする必要があります。また、struct spi_board_info を適切に設定しなければいけません。Armadillo-400シリーズでは、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の armadillo400_spiN_board_info配列(Nはバスに対応した数値)に記述してください。

SPI 機能に関連するカーネルコンフィギュレーションを表8.18「SPI コンフィギュレーション」に示します。

表8.18 SPI コンフィギュレーション

カーネルコンフィギュレーションデフォルト説明

SPI

n

Linux カーネルの 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に依存します


8.16. one wire

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 機能に関連するカーネルコンフィギュレーションを表8.19「one wire コンフィギュレーション」に示します。

表8.19 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として使用します


8.17. PWM

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) 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表8.20「PWM sysfs」に示します。

表8.20 PWM sysfs

ファイル名説明

period_ns

PWMの周期をnsec単位で設定します

設定可能な範囲は、17から2,147,483,647(約20usecから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 機能に関連するカーネルコンフィギュレーションを表8.21「PWM コンフィギュレーション」に示します。

表8.21 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です


8.18. CAN

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 ドライバーは以下の機能を有します。

  • 標準/拡張フォーマット対応

  • 最大 1Mbps

/sys/devices/platform/FlexCAN.1/ 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表8.22「CAN sysfs」に示します[19]

表8.22 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)に参照可能。

通信速度は以下の計算式により算出されます。

src_clk = 66,500,000 (br_clksrc = bus の場合)
src_clk = 24,000,000 (br_clksrc = osc の場合)
通信速度[bps] = src_clk / br_presdiv / (1 + br_propseg + br_pseg1 + br_pseg2)

図8.2 CAN 通信速度計算


CAN 機能に関連するカーネルコンフィギュレーションを表8.23「CAN コンフィギュレーション」に示します。

表8.23 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として使用します


8.19. キーパッド

i.MX25 プロセッサは、キーパッドコントローラを内蔵しています。Armadillo-400では、カーネルコンフィギュレーションにより、CON11をキーパッドに割り当てることが可能です。キーパッドドライバーは標準状態で有効になっていません。

[警告]
キーパッドドライバーを有効にすると、イベントデバイスは /dev/input/event0 にマップされます。そのため、ボタン及びタッチスクリーンのイベントデバイス番号が変わります。

キーパッド機能に関連するカーネルコンフィギュレーションを表8.24「キーパッドコンフィギュレーション」に示します。

表8.24 キーパッドコンフィギュレーション

カーネルコンフィギュレーションデフォルト説明

INPUT

y

Linux カーネルのインプットレイヤサポートを有効にします

INPUT_EVDEV

y

インプットレイヤのイベントデバイスサポートを有効にします

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/maxh-mx25/armadillo400.c の armadillo440_keypad_data 変数に適切な値を指定してください。また、各ボタンがどのイベントに対応するかというキーマップは armadillo440_keymapping 変数で指定してください。

8.20. パワーマネジメント

Armadillo-400 シリーズは Linux パワーマネジメントのスリープ機能をサポートします。スリープ状態では、アプリケーションの実行は一時停止し、カーネルはサスペンド状態となります。スリープ状態では外部デバイスの動作を停止するため、消費電力を抑えることができます。スリープ状態から実行状態に復帰すると、カーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。

/sys/power/state ファイルに、standby もしくは mem を書き込むことにより、スリープモードへ移行することができます。また、スリープモード中にウェイクアップ要因による割り込みが発生すると、スリープモードから実行状態へ復帰します。

各モードによる、状態の違いは表8.25「スリープモード」を参照してください。power-on suspend 状態に比べ、suspend-to-RAMの方がより少ない消費電力でスリープすることができます。

表8.25 スリープモード

スリープモードstate ファイルに書き込む文字列i.MX25 パワーモードウェイクアップ要因
power-on suspendstandbyDoze モードシリアル入力、タッチスクリーン入力、ボタン入力
suspend-to-RAMmemStop モードボタン入力

ウェイクアップ要因になることができるデバイスを、ウェイクアップ要因にするかどうかは、各デバイスに対応する sysfs エントリの power/wakeup ファイルで指定することができます。power/wakeup ファイルに enabled と書き込むとウェイクアップ要因になり、 disabled と書き込むとウェイクアップ要因ではなくなります。

表8.26「ウェイクアップ要因の指定」を参照してください。

表8.26 ウェイクアップ要因の指定

デバイスsysfs ファイル初期状態
シリアルインターフェース1/sys/devices/platform/mxcintuart.1/tty/ttymxc1/power/wakeupenabled
シリアルインターフェース2/sys/devices/platform/mxcintuart.2/tty/ttymxc2/power/wakeupdisabled
シリアルインターフェース3/sys/devices/platform/mxcintuart.4/tty/ttymxc4/power/wakeupdisabled
タッチスクリーン/sys/devices/platform/imx_adc.0/power/wakeupenabled
ボタン/sys/devices/platform/gpio-keys.0/power/wakeupenabled
キーパッド/sys/devices/platform/mxc_keypad.0/power/wakeupenabled
FlexCAN/sys/devices/platform/FlexCAN.1/wakeupdisabled

8.20.1. スリープ中の外部デバイスの扱いについて

Armadillo-400 シリーズでは、サスペンド処理で外部デバイスへの電源供給を全て停止します。

そのため、USB デバイスはスリープ状態に移行する前に、安全に取り外しができる状態にしておく必要があります。すなわち、USB メモリは umount しておく必要があります。リジューム時にデバイス検出が再度行われるため、USB デバイスはスリープ中に抜き差しすることができます。

一方で、microSD カードは、mount したままでスリープ状態に移行することができます。これを可能にするために、SD ホストドライバーではリジューム時にプローブ処理を行わず、同じカードが挿入されているものとして扱います。そのため、スリープ中に microSD の抜き差しを行うことはできません。

Ethernet デバイスは実行状態に復帰後、ケーブルを抜き差ししたときと同様の処理が行われるため、Auto-negotiation が有効になっている場合、リジューム後に Auto-negotiation が行われます。

初期状態の設定では、+3.3V_IO 出力はスリープ時に停止します。しかし、シリアルポート 2 および 4 をウェイクアップ要因に指定した場合、スリープ時も +3.3V_IO 出力が供給されます。



[17] DMA 転送を有効にした場合。標準では DMA 転送は無効になっています。

[18] linux-2.6.26-at/Documentation/i2c/writing-clients 参照

[19] 記述のないファイルは、後方互換性のために残されているものなので、使用しないでください。