Armadillo-500 FXにタッチスクリーンディスプレイとキーパッドを接続する方法、そしてそのソフトウェアの対応方法を紹介します。
Armadillo-500 FX液晶モデル開発セット(以降、「液晶モデル」)では、以下のデバイスがインターフェースボード経由でArmadillo-500 FX(メイン基板)に接続されています。
- 液晶:5.7インチ VGA
- タッチスクリーン:4線式抵抗膜方式
- キーパッドのキー数:24個
このHowtoでは以下の物を接続する場合を例に説明します。
- 液晶:7インチ WVGA
- タッチスクリーン:4線式抵抗膜方式
- キーパッドのキー数:9個
大きく2つに分けてハードウェアのカスタマイズそしてソフトウェア対応について説明していきます。ハードウェアのカスタマイズは、液晶パネルの表示機能、バックライト電源提供、タッチスクリーン、そしてキーパッドについて順番に説明していきます。ソフトウェア対応は、液晶パネル、タッチスクリーン、そしてキーパッドのソフトウェア対応について説明していきます。
ハードウェアのカスタマイズ
Armadillo-500 FXに液晶ディスプレイやキーパッドを接続する場合は、液晶モデルのように外部基板でコネクタ形状を変換します。また、タッチスクリーンのコントローラICと液晶バックライト用の電源も別途用意します。
イメージとして、以下のようなカスタムインターフェース基板を作ることになります。
このHowtoの例に利用するデバイスの詳細は以下の通りです。
タッチスクリーンディスプレイ
製品型番 | LTA070A321F |
解像度 | 800 x 480 dot |
液晶パネルの種類 | TFT |
タッチスクリーンの種類 | 4線式抵抗膜方式 |
バックライトの種類 | CCFL蛍光管 |
インターフェースの種類 | 3.3V C-MOS パラレルインターフェース |
電源電圧範囲 | 3.0V~3.6V |
消費電流(3.3V) | 200mA~350mA |
フレキシブルケーブル | 21020-0325 (MOLEX) |
DC-ACインバータ(バックライト電源)
製品型番 | CXA-L0505-NJL |
出力開放電圧 | 1.5kV |
出力電力 | 3.5W |
入力電圧 | 5V |
タッチスクリーンコントローラIC
製品型番 | TSC2046 |
タッチスクリーン方式 | 4線式抵抗膜方式 |
インターフェースの種類 | SPI |
キーパッド
キー数 | 9キー |
液晶パネルの表示機能
アドバイス
Armadillo-500 FXのLCDインターフェースは標準でパラレルインターフェースに対応していますので、パラレルインターフェースタイプの液晶パネルを選択するようにしてください。Armadillo-500 FXのLCDインターフェースは3V駆動なので、3V動作が可能な液晶パネルを選択すると簡単です。Armadillo-500 FXで出力可能な最大解像度は800x600ピクセルなので、それ以下の解像度の液晶パネルを選択しましょう。
注意点
液晶パネルの電源をArmadillo-500 FXの3V電源から供給する場合は、外部回路の消費電流が最大600mA以下になるようにしてください。
表示インターフェースの接続方法
今回利用する7インチ液晶(LTA070A321F)にはフレキシブルプリント基板(FPC)のコネクタが付いています。このFPCにArmadillo-500 FXのCON9(LCDインターフェース)に繋ぐためにコネクタの形状を変換します。以下の回路図のようにFPC接続用コネクタをArmadillo-500 FXのCON9と接続する2mmコネクタに配線します。
液晶パネルのバックライト
アドバイス
バックライト電源は液晶パネルのバックライトの種類に合わせて用意する必要があります。 液晶モデルでは、LEDバックライトタイプの液晶パネルを使用していますが、今回使用する液晶パネルは蛍光灯(CFL)バックライト方式の液晶パネルになります。 バックライト電源の選択では、Armadillo-500 FXの電源電圧と同じ5V入力の物を選択すると、電源が統一できます。またCFLバックライト方式では、蛍光灯を駆動するために高圧電圧に変換する装置「インバータ」が必要で、インバータの出力電流は蛍光管の定格より余裕のあるものを選択しましょう。ただし今回使用した電源は都合により定格より少し下回っていますので定格通りの明るさで使用したい場合は、別の物を選択すると良いでしょう。
注意点
CFLバックライト駆動用のインバータは高圧電圧が発生しますので、ショートやけがなどに十分ご注意ください。
液晶パネルのバックライト電源供給
LTA070A321Fに電源を供給するように、以下の回路図のようにDC-ACインバータを配線します。
タッチスクリーン
アドバイス
4線式抵抗膜方式のタッチスクリーンをArmadillo-500 FXに接続するためには、タッチスクリーンコントローラICが必要になります。このHowtoでは液晶モデルと同じICを使用します。このICはSPIでコントロールできるタイプの物です。他にもいろいろな通信方式のコントローラがあります。Armadillo-500 FXはUSBや、UART、I2C、SPIなど豊富なインターフェースを持っていますので、幅広く対応出来ます。
LTA070A321Fのタッチスクリーンの接続方法
コントローラICは以下の回路図のように配線します。コントローラICのSPIインターフェースをCON9に、AD入力インターフェースをタッチスクリーンのコネクタに配線します。
キーパッド
アドバイス
Armadillo-500 FXで少ない配線で多くのキーを接続する必要がある場合、マトリクススキャン方式対応のキーパッドポートを利用するといいでしょう。ただし、マトリクススキャン方式ではキーが押された順番を精密に特定できないことや、複数のキーが同時に押された時に他の押されていないキーが押されているように認識されることがあります。この現象を確実に避ける必要がある場合は、各キーに独立したGPIOを利用することをお勧めします。
キーパッドの接続方法
Armadillo-500 FXのキーパッド信号ピンは拡張インターフェースコネクタから取り出します。 キーパッドへ接続する列信号と行信号を並びでコネクタから取り出すため、コラム信号は上位ビットを、 ロウ信号は下位ビットを使用しています。
Armadillo-500 FXに9キーを接続するために、以下のようにキーパッドポートのCOL5〜7とROW3〜5に配線します。
ソフトウェア対応
上記のハードウェアのカスタマイズに合わせて、ソフトウェアも変更します。該当するファイルで定義されている設定項目を変更するだけで、簡単に新しいハードウェアに対応させることができます。
このHowtoでは、以下のカーネルバージョンを想定しています。
- Linuxカーネルバージョン: 2.6.26-at5
液晶パネル
液晶パネルに描画するには、フレームバッファドライバを使用します。ドライバのソースコードは以下のファイルです。
- linux/drivers/video/mxc/mxcfb.c
液晶モデルと異なる液晶パネルで正しく描画できるように、以下のタイミング情報を修正する必要があります。
- ドットクロック(ピコ秒)
- Xレゾリューション
- Yレゾリューション
- 左マージン
- 右マージン
- 上マージン
- 下マージン
- 水平同期
- 垂直同期
これらの項目に関しては以下のファイルに説明が載っているので参照してください。
- linux/Documentation/fb/framebuffer.txt
タイミング情報は、液晶パネルの製品マニュアルを参照して計算します。LTA070A321Fのマニュアルに載っている値(PDF)からカーネルで設定する値(KERNEL)の計算方法は以下のようになります。
PDF | KERNEL
----------------+--------------
Clock 33.231MHz | 30092 ps/dot
HORIZONTAL | VERTICAL
-----------------------------------+----------------------------------------
PDF | KERNEL | DOTS | PDF | KERNEL | LINES
-----------------------------------+----------------------------------------
Sync period ---- 1024 | Sync period ---- 525 (60Hz)
- Display period xres 800 | - Display period yres 480
--- | ---
(non-display) 256 | (non-display) 45
- Sync w + Back P. ---- 216 | - Sync w + Back P. ---- 33
--- --
Front Porch right m. 40 | Front Porch lower m. 12
- Sync w + Back P. ---- 216 | Sync w + Back P. ---- 33
- Pulse w hsync 64 | - Pulse w vsync 2
Back Porch left m. 120 | Back Porch upper m. 31
上記の値を linux/drivers/video/mxc/mxcfb_modedb.c で定義されている mxcfb_modedb 配列に追加します。
{
/* name rfsh xres yres dotclk lm rm um lm hs vs */
"SHARP7-WVGA", 60, 800, 480, 30092, 120, 40, 31, 12, 64, 2,
FB_SYNC_OE_ACT_HIGH,
FB_VMODE_NONINTERLACED,
0,
},
これでhermitで以下のように video のカーネルパラメータで定義したタイミングを指定できます。
setenv console=ttymxc0 video=mxcfb:SHARP7-WVGA,16bpp,enable
タッチスクリーン
タッチスクリーンコントローラ(TSC2046)のドライバはi.MX31のSPIホストドライバを利用してタッチ情報を取得します。このドライバはLinuxのインプットレイヤーに対応しているので、アプリケーションは /dev/input/event* のデバイスノードを使ってデータを取り出すことができます。ソースは以下のファイルになります。
- linux/drivers/input/touchscreen/ads7846.c
液晶モデルと異なるタッチスクリーンに対応するために、以下のファイルにある armadillo500fx_ts_info という構造体定義の項目を変更します。ここで設定する値はドライバの初期化時に参照されるようになっています。
- linux/arch/arm/mach-mx3/armadillo500fx.c
X,Yの最小値(x_min,y_min)とX,Yの最大値(x_max,y_max)以外にも、安定したサンプルを取得できるようにデバウンス処理(チャタリング対策処理)を細かく設定できる項目(以下参照)などあります。
設定項目 | 用途 |
---|---|
debounce_tol | サンプルが安定しているかの判断範囲(前回との比較) |
debounce_rep | 続けて安定していたサンプルの最小サンプル数 |
debounce_max | 安定するまでサンプルし続ける最大回数 |
zero_p_ignore_times | 0の圧力を無視するサンプル数 |
その他の設定項目の意味には、ドライバのソースを参照してください。
LTA070A321Fのタッチスクリーンには、以下の設定を変更しました。
static const struct ads7846_platform_data armadillo500fx_ts_info = {
[...]
.y_min = 150,
.y_max = 3870,
.debounce_rep = 1,
.zero_p_ignore_times = 1,
[...]
};
キーパッド
i.MX31のキーパッドコントローラのドライバはタッチスクリーンコントローラと同じくLinuxのインプットレイヤー対応の物です。ソースは以下のファイルになります。
- linux/drivers/input/keyboard/mxc_keyb.c
液晶モデルと異なるキー配置に対応するために、利用するCOLUMNとROW、そしてキーマップをタッチスクリーンコントローラと同様にarmadillo500fx.cで設定します。
- linux/arch/arm/mach-mx3/armadillo500fx.c
液晶モデルのキーマップは、armadillo500fx_keymap という配列で定義されています。右で示しているキーと合わせるように、配列を以下のように変更します。
static u16 armadillo500fx_keymap_3_by_3[9] = {
KEY_DOWN, KEY_HOME, KEY_BACK,
KEY_UP, KEY_MENU, KEY_END,
KEY_ENTER, KEY_LEFT, KEY_RIGHT,
};
配列で利用できるキー名は、以下のファイルで定義されています。
- linux/include/linux/input.h
液晶モデルのキーパッドで利用されているCOLUMNとROWは、armadillo500fx_4_by_6_keypad という構造体の定義によって設定されています。このHowtoでは COLUMN5〜7 と ROW3〜5 を使うようにしているので、以下のように定義を変更します。また、ここで先ほど定義したキーマップを使うように設定します。
static struct keypad_data armadillo500fx_3_by_3_keypad = {
.row_first = 3,
.row_last = 5,
.col_first = 5,
.col_last = 7,
.matrix = armadillo500fx_keymap_3_by_3,
};
最後に、新しい設定が利用されるように、armadillo500fx_keypad_device の構造体定義で armadillo500fx_3_by_3_keypad を指定します。
static struct platform_device armadillo500fx_keypad_device = {
.name = "mxc_keypad",
.id = 0,
.num_resources = 1,
.resource = &armadillo500fx_keypad_resource,
.dev = {
.platform_data = &armadillo500fx_3_by_3_keypad,
},
};
ダウンロード
回路図と部品表
例に利用していたハードウェアの回路図(PDF)と部品表を参考にしてください。
パッチとカーネルイメージ
ソフトウェアの設定変更を含むパッチ(Linux-2.6.26-at5用)とパッチ済みのソースからビルドしたカーネルイメージになります。