第9章 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 にデバイス情報を追記する。

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

9.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[21] (シリアルインターフェース2, 3)

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

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

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

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

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


9.2. Ethernet

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

  • AutoNegotiation サポート

  • CarrierDetect サポート

  • Ethtool サポート

    • link status

    • 10/100Mbps Speed

    • Full/Half Duplex

    • AutoNegotiation enable/disable

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

表9.3 Ethernet コンフィギュレーション

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

NETDEVICES

y

Linux カーネルのネットワークデバイスサポートを有効にします

NET_ETHERNET

y

Linux カーネルの 10/100 Mbps Ethernet サポートを有効にします

MX25_FEC

y

i.MX25 内蔵のFEC(Fast Ethernet Controller)ドライバーを有効にします


9.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 ホスト機能に関連するカーネルコンフィギュレーションを表9.4「SD/MMC/SDIO ホストコントローラ コンフィギュレーション」に示します。

表9.4 SD/MMC/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を使用します


9.4. USB 2.0 ホスト

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

  • EHCI 準拠

  • OTG非サポート

  • USB High Speed ホスト × 1

  • USB Full Speed ホスト × 1

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

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

表9.5 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 によるウェイクアップ機能を有効にします[a]

USB_EHCI_ARC_H2_FSL_SERIAL

y

USB Host2 の PHY としてオンチップ Full Speed シリアルトランシーバーを使用します

USB_EHCI_ARC_OTG

y

i.MX の OTG ポートサポートを有効にします[b]

USB_EHCI_ARC_OTG_DELAYPROBE

n

OTG ポートの Delayed Probe 機能を有効にします

USB_EHCI_ARC_OTG_WAKE_UP

n

OTG ポートによるウェイクアップ機能を有効にします[a]

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 のサイズを指定します

[a] Armadillo-400シリーズではサポートされていません。

[b] Armadillo-400 シリーズではホストのみサポートされています


9.5. フレームバッファ

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

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

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

  • 最大解像度 SVGA

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

  • 解像度 480 × 272 ピクセル

  • RGB 565 カラー

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

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

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

フレームバッファに関連するカーネルコンフィギュレーションを表9.7「フレームバッファ コンフィギュレーション」に示します。

表9.7 フレームバッファ コンフィギュレーション

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

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用ブートロゴを有効にします


9.6. LED バックライト

Armadillo-440 の LED バックライト機能は、バックライトクラスとして実装されています。Armadillo-440 では、汎用の PWM 機能を使用してバックライトの制御を行っています[22]。PWM 機能の詳細に関しては、「PWM」 を参照してください。

バックライトの制御は、/sys/class/backlight/pwm-backlight ディレクトリ以下のファイルによって行うことができます。輝度の調整は、brightness ファイルによって行うことができます。 brightness ファイルに 0(消灯)~255(最高輝度)までの数値を書き込むことにより、輝度を変更することができます。また、brightness ファイルを読むことにより現在の輝度を知ることができます。バックライトの点灯/消灯は、bl_power ファイルによって行うことができます。bl_power に 0 を書き込むと消灯になり、1 を書き込むと点灯になります。

LED バックライトに関連するカーネルコンフィギュレーションを表9.8「LED バックライト コンフィギュレーション」に示します。

表9.8 LED バックライト コンフィギュレーション

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

BACKLIGHT_LCD_SUPPORT

y

Linux カーネルのバックライトと LCD サポートを有効にします

BACKLIGHT_CLASS_DEVICE

y

Linux カーネルのバックライトクラスサポートを有効にします

BACKLIGHT_PWM

y

PWM ベースのバックライトドライバを有効にします


9.7. タッチスクリーン

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

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

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

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 キーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。

タッチスクリーンに関連するカーネルコンフィギュレーションを表9.10「タッチスクリーン コンフィギュレーション」に示します。

表9.10 タッチスクリーン コンフィギュレーション

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

INPUT

y

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

INPUT_EVDEV

y

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

INPUT_TOUCHSCREEN

y

Linux カーネルのタッチスクリーンサポートを有効にします

TOUCHSCREEN_IMX_ADC

y

i.MX のタッチスクリーンドライバを有効にします


9.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シリーズではカーネルコンフィギュレーションでオーディオマルチプレクスの設定をおこなうことができます。標準では、オーディオマルチプレクスは AUD5 を使用するようになっており、オーディオ機能は CON11 に接続されます。コンフィギュレーションにより AUD6 を使用することで CON9 に接続することができます。

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

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

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

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と排他です


9.9. GPIO

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

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

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

9.9.1. GPIO sysfs

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

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

表9.12 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 ファイルで入出力方向の設定を行うことができます。表9.13「GPIO 入出力方向の設定」に示す設定をdirection ファイルに書き込むことにより、入出力方向を設定します。また、direction ファイルを読み込むことで現在の設定を知ることができます。

表9.13 GPIO 入出力方向の設定

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

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

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

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

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

C言語で GPIO sysfs の割り込みを扱う例を、図9.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;
}

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


1

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

2

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

3

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

4

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

5

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

GPIO sysfs に関連するカーネルコンフィギュレーションを表9.15「GPIO sysfs コンフィギュレーション」に示します。

表9.15 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.16「Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧」に示します。

表9.16 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 のうち、一部だけしか操作することができません。

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

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

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

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

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

Armadillo-200 シリーズ互換 GPIO ドライバーに関連するカーネルコンフィギュレーションを表9.19「Armadillo-200 シリーズ互換 GPIO ドライバー コンフィギュレーション」に示します。

表9.19 Armadillo-200 シリーズ互換 GPIO ドライバー コンフィギュレーション

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

ARMADILLO2X0_GPIO

n

Armadillo-200 シリーズ互換 GPIO ドライバーを有効にします[a]

[a] GPIO_SYSFS と排他なため、GPIO_SYSFS=n の場合だけ選択できます。


9.10. LED

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

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

表9.20 LED 一覧

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

LED クラスに関連するカーネルコンフィギュレーションを表9.21「LED クラス コンフィギュレーション」に示します。

表9.21 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.22 LEDノード

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

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

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

Armadillo-200 シリーズ互換 LED ドライバーに関連するカーネルコンフィギュレーションを表9.24「Armadillo-200 シリーズ互換 LED ドライバー コンフィギュレーション」に示します。

表9.24 Armadillo-200 シリーズ互換 LED ドライバー コンフィギュレーション

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

ARMADILLO2X0_LED

n

Armadillo-200 シリーズ互換 LED ドライバーを有効にします[a]

[a] LEDS_GPIO と排他なため、LEDS_GPIO=n の場合だけ選択できます。


9.11. ボタン

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

Armadillo-400 シリーズ共通のボタンデバイスとして、オンボードタクトスイッチが使用可能です。また、Armadillo-440 液晶モデルでは、Armadillo-400シリーズ LCD拡張ボードにボタンが3個実装されており、これらもボタンデバイスとして使用可能です。

それぞれのボタンに対するイベントを、表9.25「Armadillo-400 シリーズ ボタンイベント」に示します。

表9.25 Armadillo-400 シリーズ ボタンイベント

ボタンTypeCodeValue
SW1EV_KEY(1)KEY_ENTER(28)0 or 1
LCD_SW1[a]EV_KEY(1)KEY_BACK(158)0 or 1
LCD_SW2[a]EV_KEY(1)KEY_MENU(139)0 or 1
LCD_SW3[a]EV_KEY(1)KEY_HOME(102)0 or 1

[a] Armadillo-440 液晶モデルのみ


標準状態では、ボタンに対応するイベントデバイスは /dev/input/event0 にマップされます。

[警告]

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

ボタンに関連するカーネルコンフィギュレーションを表9.26「ボタン コンフィギュレーション」に示します。

表9.26 ボタン コンフィギュレーション

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

INPUT

y

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

INPUT_EVDEV

y

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

INPUT_KEYBOARD

y

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

KEYBOARD_GPIO

y

GPIO キーボードドライバを有効にします


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

Armadillo-400シリーズ LCD拡張ボード、Armadillo-400シリーズ RTC オプションモジュール及びArmadillo-400 シリーズ WLAN オプションモジュールには、リアルタイムクロック(セイコーインスツル社製 S-35390A)が搭載されています。Armadillo-400シリーズにこれらのボードを接続することで、リアルタイムクロック機能を使用できます。

リアルタイムクロックは、I2C バスに接続された I2C スレーブデバイスとして動作します。リアルタイムクロックと I2C バスとの接続を表9.27「リアルタイムクロック I2C バス接続」に示します。

表9.27 リアルタイムクロック I2C バス接続

拡張ボード/オプションモジュール名I2Cバスアドレス

Armadillo-400シリーズ LCD拡張ボード

I2C3

0x30

Armadillo-400シリーズ RTC オプションモジュール

I2C2

0x30

Armadillo-400 シリーズ WLAN オプションモジュール

I2C2

0x30


リアルタイムクロックは、デバイスファイルまたは sysfs ファイルを使用して操作することができます。デバイスファイルは /dev/rtcN に、sysfs ファイルは /sys/class/rtc/rtcN/ ディレクトリ以下に作成されます [23]。リアルタイムクロックが一つだけ接続されている場合、/dev/rtc0 デバイスファイルまたは /sys/class/rtc/rtc0/ ディレクトリ以下の sysfs ファイルでリアルタイムクロックを操作することができます。システムにリアルタイムクロックが二つ存在する場合[24]/dev/rtc0 が I2C2 (オプションモジュール)のリアルタイムクロックに対応し、/dev/rtc1 が I2C3 (拡張ボード)のリアルタイムクロックに対応します。この場合、通常、/dev/rtc0 だけが使用されます。

デバイスファイルを使用したインターフェースに関しては、linux-2.6.26-at/Documents/rtc.txt を参照してください。sysfsを使用したインターフェースには、表9.28「リアルタイムクロック sysfs インターフェース」に示すものがあります。

表9.28 リアルタイムクロック sysfs インターフェース

sysfs ファイル説明

since_epoch

このファイルを読み出すと、現在のUNIXエポックからの経過秒数を返す。

date

このファイルを読み出すと、現在の日付を返す。

time

このファイルを読み出すと、現在の時刻を返す。

wakealarm

このファイルにUNIXエポックからの経過秒数、もしくは、先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できる。詳細は、「アラーム割り込み」参照。


リアルタイムクロック機能に関連するカーネルコンフィギュレーションを表9.29「リアルタイムクロックコンフィギュレーション」に示します[25]

表9.29 リアルタイムクロックコンフィギュレーション

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

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 ドライバーを有効にします[a]

[a] linux-2.6.26-at9 までは、RTC_DRV_S35390A ではなく RTC_DRV_S353XXA が標準で有効になっていました。エラッタ A400-LCD-Erratum #1 で発生する現象を抑制するため、linux-2.6.26-at10 以降は RTC_DRV_S35390A が標準で有効になっています。エラッタに関する詳細は、Armadillo-400 シリーズ リビジョン情報を参照してください。


9.12.1. アラーム割り込み

linux-2.6.26-at13 以降の Linux カーネルからは、リアルタイムクロックのアラーム割り込み機能を使用できます。アラーム割り込みは、CPUがスリープ中でも発生させることができるので、スリープ状態からアラーム割り込みによって実行状態に復帰することも可能です。スリープ機能については、「パワーマネジメント」を参照してください。指定可能なアラーム割り込み発生時刻は、分単位で最長1週間先までとなっています。秒は切り捨てられ、指定した時刻(分)の00秒にアラーム割り込みが発生します。

アラーム割り込み機能は、現在のところ Armadillo-400 シリーズ WLAN モジュールでのみ使用できます[26]。リアルタイムクロックの INT1 信号が CON9_2 ピンに接続されています。リアルタイムクロックにアラーム割り込み発生時刻を設定し、アラーム割り込みを有効にすると、指定した時刻に INT1 信号が High から Low に変化します。

標準の Linux カーネルでは、アラーム割り込み機能は無効になっています。そのため、アラーム割り込み機能を使用するには、Linux カーネルのコンフィギュレーションを変更する必要があります。表9.30「リアルタイムクロックアラーム機能に関するコンフィギュレーション」に示すコンフィギュレーションを有効にしてください。

表9.30 リアルタイムクロックアラーム機能に関するコンフィギュレーション

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

ARMADILLO400_RTC_ALM_INT_CON9_2

n

CON9_2をアラーム割り込み入力に使用します

RTC_ALM_INT_WAKE_SRC_SELECT

y

アラーム割り込み入力をウェイクアップ要因に指定します


デバイスファイルに対して ioctl システムコールを発行することで、アラーム割り込み機能を使用することができます。linux-2.6.26-at/Documents/rtc.txt にサンプルプログラムが記載されていますので、そちらも参照してください。

また、sysfs の wakealarm ファイルを読み書きすることでも、アラーム割り込み機能を使用することができます。wakealarm ファイルに UNIX エポックからの経過秒数、もしくは、先頭に + を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するには、一度現在時刻以前の時刻(もしくは +0)を書き込んで、アラーム割り込みをキャンセルする必要があります。アラーム割り込み発生時刻が設定されている際に、このファイルを読み出すとアラーム割り込み発生時刻を返します。sysfsファイルを使用した設定例を図9.2「アラーム割り込み発生時刻の設定例」に示します。

[armadillo ~]# cat /proc/interrupts | grep rtc0  1
142:          0    MXC_GPIO  rtc0
[armadillo ~]# cat /sys/class/rtc/rtc0/since_epoch  2
1291904885
[armadillo ~]# echo +60 > /sys/class/rtc/rtc0/wakealarm  3
[armadillo ~]# cat /sys/class/rtc/rtc0/wakealarm  4
1291904940
:
:
[armadillo ~]# cat /sys/class/rtc/rtc0/since_epoch
1291904945
[armadillo ~]# cat /proc/interrupts | grep rtc0  5
142:          1    MXC_GPIO  rtc0

図9.2 アラーム割り込み発生時刻の設定例


1

/proc/interrupts によって、割り込み発生回数を調べることができます。ここでは、一度も割り込みが発生していません。

2

since_epoch によって、現在の UNIX エポックからの経過時間を調べることができます。

3

wakealarm に +60 と書き込むことで、アラーム割り込み発生時刻を 60 秒後に設定します。このとき、秒単位は切り捨てられるためアラーム発生時刻は厳密に 60 秒後とならない点に注意してください。

4

wakealarm を読み出して確認したところ、アラーム割り込み発生時刻は 55 秒後に設定されています。

5

アラーム割り込み発生時刻経過後に割り込み発生回数を調べると一つ増えているので、割り込みが発生したことを確認できます。

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

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

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

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

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

9.14. I2C

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

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

  • I2C マスターモード

  • 最大 400 kbps

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

標準では、それぞれのI2Cバスの通信速度は40kbpsに設定されています。通信速度は、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の以下の場所で設定されています。i2c_clkにそれぞれのバスの通信速度を設定します[28]

static struct mxc_i2c_platform_data armadillo400_i2c1_data = {
        .i2c_clk = 400000,
};

static struct mxc_i2c_platform_data armadillo400_i2c2_data = {
        .i2c_clk = 400000,
};

static struct mxc_i2c_platform_data armadillo400_i2c3_data = {
        .i2c_clk = 400000,
};

図9.3 I2C通信速度の設定


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

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


9.15. SPI

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/maxh-mx25/armadillo400.c の armadillo400_spiN_board_info配列(Nはバスに対応した数値)に記述してください。SPIバスの通信速度は、I2Cとは異なりそれぞれのスレーブデバイスごとに設定します。

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

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


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

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


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

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

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


9.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/ 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表9.36「CAN sysfs」に示します[29]

表9.36 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)

図9.4 CAN 通信速度計算


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

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


9.19. キーパッド

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

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

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

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

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

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

9.20. パワーマネジメント

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

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

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

表9.39 スリープモード

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

ウェイクアップ要因になることができるデバイスを、ウェイクアップ要因にするかどうかは、各デバイスに対応する sysfs エントリの power/wakeup ファイルで指定することができます。power/wakeup ファイルに enabled と書き込むとウェイクアップ要因になり、 disabled と書き込むとウェイクアップ要因ではなくなります。各デバイスに対応する power/wakeup ファイルの一覧を 表9.40「ウェイクアップ要因の指定」に示します。また、これらのデフォルト値はカーネルコンフィギュレーションで変更することもできます。

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

デバイス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
リアルタイムクロック/sys/devices/platform/i2c-adapter/i2c-1/1-0030/rtc/rtc0/power/wakeupenabled

表9.41 ウェイクアップ要因のデフォルト値を指定するコンフィギュレーション

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

ARMADILLO400_UART2_WAKE_SRC_SELECT

y

UART2(シリアルインターフェース1)をウェイクアップ要因に指定します

ARMADILLO400_UART3_WAKE_SRC_SELECT

n

UART3(シリアルインターフェース2)をウェイクアップ要因に指定します

ARMADILLO400_UART5_WAKE_SRC_SELECT

n

UART5(シリアルインターフェース3)をウェイクアップ要因に指定します

ARMADILLO400_TOUCHSCREEN_WAKE_SRC_SELECT

y

タッチスクリーンをウェイクアップ要因に指定します

ARMADILLO400_GPIO_KEYS_WAKE_SRC_SELECT

y

ボタンをウェイクアップ要因に指定します

ARMADILLO400_RTC_ALM_INT_WAKE_SRC_SELECT[a]

y

アラーム割り込みをウェイクアップ要因に指定します

[a] アラーム割り込み機能が有効の時のみ選択可能。


9.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 出力が供給されます。



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

[22] Armadillo-400 シリーズで採用している i.MX25 プロセッサが内蔵している LCDC (Liquid Crystal Display Controller) は、バックライト制御機能を有していますが、Armadillo-440 ではこれは使用していません。

[23] N は 0 から始まる数値文字。

[24] Armadillo-440 に Armadillo-400シリーズ LCD拡張ボードを接続した状態で、Armadillo-400 シリーズ RTC オプションモジュールまたは Armadillo-400 シリーズ WLAN オプションモジュールを接続した場合、リアルタイムクロックが二つ接続された状態となります。

[25] リアルタイムクロックは I2C バスに接続されているため、I2C に関連するコンフィギュレーションにも依存します。I2C に関するコンフィギュレーションについては、「I2C」を参照してください。

[26] Armadillo-400 シリーズ RTC オプションモジュールでも、PD1をCON9_2ピンに接続すれば使用可能です。

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

[28] i.MX25では、内蔵モジュールの動作に使用するクロックを、共通のリファレンスクロックから分周して生成します。そのため、i2c_clkで指定した値と、実際の通信速度にはずれが生じる場合があります。例として、i2c_clkに400000000(400kbps)を指定した場合、実際の通信速度は375kbpsとなります。

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