Armadillo-460は拡張バスインターフェース(J1/J2)を持っています。このインターフェースは
- PC/104拡張バス互換モード
- ダイレクトCPUバスモード(非同期)
- ダイレクトCPUバスモード(同期)
の選択が可能で、様々な拡張をおこなうことができます。
本Howtoでは、LAN9118拡張ボードを作成し、ダイレクトCPUバスモード(非同期)に設定したArmadillo-460に接続する方法を説明します。
本Howtoでのおおまかな手順は以下のようになります。
本Howtoで作成するLAN9118拡張ボードの回路図と部品表は以下よりダウンロードすることができます。
- 回路図: LAN9118_ExtBoard.pdf
- 部品表: LAN9118_ExtBoard.BOM
本Howtoで使用するソフトウェアは以下の通りです。
- ユーザーランドイメージ: romfs-a460-1.00.img.gz
- カーネルイメージ: linux-a460-lan9118.bin.gz
- Linuxカーネルソース: linux-2.6.26-at15.tar.gz
- パッチ: linux-a460-lan9118.patch
ソフトウェアの開発環境にはATDE3を使用します。
- ATDE3: atde3-20100309.zip
Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。
1. ハードウェア対応
Armarillo-460の設定とLAN9118拡張ボードの作成について説明します。
1.1. Armadillo-460の設定
PC/104 拡張バス電源 V_PC104 は、チップ抵抗(0Ω)の実装を変更することでVIN(+5V)または3.3V_EXT(+3.3V)のどちらかを選択できます。出荷状態のArmarillo-460ではVINが選択されています。ダイレクトCPUバスモードを使用する場合は3.3V_EXTを選択する必要があるので、R270にチップ抵抗(0Ω)を実装します。
拡張バスインターフェースの電気的仕様およびR270の位置については、「Armadillo-400シリーズハードウェアマニュアル」を参照してください。
1.2. LAN9118拡張ボードの作成
LANコントローラにLAN9118(SMSC)を使用した拡張ボードを作成します。以下の回路図を参考にしてください。
ダイレクトCPUバスモード(非同期)ではCS3空間とCS4空間が使用可能ですが、今回はCS3空間を使用します。弊社で作成したLAN9118拡張ボード(本Howto最上部の画像)では、ジャンパによってCS3空間とCS4空間を切り換え可能にしています。
- RESET信号はActive-Highで入力されるため、論理を反転しています。ソフトウェアの変更でActive-Lowにすることも可能で、その場合反転する回路は不要になります。
- LAN9118拡張ボードへの電源を、CON21から供給することもできます。その場合、3.3V_EXT消費電流が合計500mA以下になるようにしてください。詳細は、「Armadillo-400シリーズハードウェアマニュアル」を参照してください。
2. ソフトウェア対応
LAN9118拡張ボードに対応したカーネルイメージの作成について説明します。
2.1. カーネルのソースコードを展開してパッチを適用する
[atde ~]$ wget https://download.atmark-techno.com/armadillo-460/source/kernel/linux-2.6.26-at15.tar.gz
[atde ~]$ wget https://download.atmark-techno.com/armadillo-460/sample/linux-a460-lan9118.patch
[atde ~]$ tar zxvf linux-2.6.26-at15.tar.gz
[atde ~]$ cd linux-2.6.26-at
[atde ~/linux-2.6.26-at]$ patch -p1 ../linux-a460-lan9118.patch
このパッチは、割り込み信号としてIRQ3を使用します。その他の割り込み信号を使用したい場合は、パッチを適用した後に以下のファイルで定義されている".start"と".end"の値を変更してください。
arch/arm/mach-mx25/armadillo460.c
static struct resource ext_smsc9118_resources[] = {
:
省略>
:
[1] = {
.start = MXC_EXT_INT_BASE + 3,
.end = MXC_EXT_INT_BASE + 3,
.flags = IORESOURCE_IRQ,
},
};
".start"と".end"に設定可能な値は、Armadillo-460のCPLDに用意された拡張割り込みコントローラの割り込みを、拡張バスインターフェースの割り込みとして使用するための仮想割り込み番号です。割り込み信号名と割り込み番号の対応は以下の表を参照してください。
信号名 | 割り込み番号 |
---|---|
IRQ3 | MXC_EXT_INT_BASE + 3 |
IRQ4 | MXC_EXT_INT_BASE + 4 |
IRQ5 | MXC_EXT_INT_BASE + 5 |
IRQ6 | MXC_EXT_INT_BASE + 6 |
IRQ7 | MXC_EXT_INT_BASE + 7 |
IRQ9 | MXC_EXT_INT_BASE + 9 |
IRQ10 | MXC_EXT_INT_BASE + 10 |
IRQ11 | MXC_EXT_INT_BASE + 11 |
IRQ12 | MXC_EXT_INT_BASE + 12 |
IRQ14 | MXC_EXT_INT_BASE + 14 |
IRQ15 | MXC_EXT_INT_BASE + 15 |
MXC_EXT_INT_BASEは、仮想割り込み番号のベースを表すマクロです。 include/asm-arm/arch-mxc/hardware.hで定義されており、値は192です。
2.2. ビルド
前項で適用したパッチには、armadillo460_smsc9118_defconfigが含まれているので、
それを用いて設定を行います。
[atde ~/linux-2.6.26-at]$ make armadillo460_smsc9118_defconfig
[atde ~/linux-2.6.26-at]$ make CROSS_COMPILE=arm-linux-gnueabi-
:(ビルドには数分かかります)
[atde ~/linux-2.6.26-at]$ gzip -c arch/arm/boot/Image > linux.bin.gz
armadillo460_smsc9118_defconfigによって設定される、i.MX257のWireless External Interface Module(WEIM)レジスタの値の決定方法については、「ap.1. バスタイミングの設定」を参照してください。
ソフトウェアマニュアルを参照し、新しい Linux カーネルイメージ(linux.bin.gz)を Armadillo-460 に書き込んでください。
2.3. 動作確認
Armadillo-460に電源が入っていないことを確認してから、JP5をショートしたLAN9118拡張ボードを接続してください。
作成したLinuxカーネルイメージをArmadillo-460に書き込み、再起動します。
起動ログには、以下のようにLAN9118拡張ボードを認識したことが表示され、ネットワークインターフェースeth1が割り当てられたことが確認できます。
smsc911x: Driver version 2008-10-21.
smsc911x-mdio: probed
eth1: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, irq=-1)
net eth1: MAC Address: 9e:95:79:1d:b0:a9
ログインして、ネットワークの設定をおこないます。以下の例ではdhcpに設定しています。ネットワーク設定の詳細については「Armadillo-460ベーシックモデル開発セットスタートアップガイド」を参照してください。
[root@armadillo460-0 (ttymxc1) ~]# vi /etc/config/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp
iface eth1 inet dhcp
[root@armadillo460-0 (ttymxc1) ~]# flatfsd -s
ネットワークインターフェースeth1を活動状態にします。ネットワーク通信にeth0が使用されないように事前に休止状態にしておきます。
[root@armadillo460-0 (ttymxc1) ~]# ifdown eth0
[root@armadillo460-0 (ttymxc1) ~]# ifup eth1
udhcpc (v0.9.9-pre) started
Sending discover...
Sending select for 172.16.2.127...
Lease of 172.16.2.127 obtained, lease time 86400
以上で設定は完了です。PCから以下のようにコマンドを実行するとネットワークの疎通を確認することができます。
[atde ~]$ ping 172.16.2.127 -c 3
PING 172.16.2.127 (172.16.2.127) 56(84) bytes of data.
64 bytes from 172.16.2.127: icmp_req=1 ttl=64 time=0.246 ms
64 bytes from 172.16.2.127: icmp_req=2 ttl=64 time=0.255 ms
64 bytes from 172.16.2.127: icmp_req=3 ttl=64 time=0.266 ms
--- 172.16.2.127 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.246/0.255/0.266/0.020 ms
[atde ~]$
付録A バスタイミングの設定
Armadillo-460のダイレクトCPUバスモード(非同期)ではi.MX257のWireless External Interface Module(WEIM)レジスタの値を指定し、バスタイミングを設定することができます。 バスタイミングは、LAN9118のバスタイミングに合わせますが、Armadillo-460の遅延を考慮する必要があります。
A.1. LAN9118のタイミング
LAN9118のタイミングは以下の通りです。
- リード時
記号 | 詳細 | min(ns) | max(ns) |
---|---|---|---|
tcycle | リードサイクル時間 | 45 | |
tcsl | CS、OEパルス幅 | 32 | |
tcsh | CS、OEディアサート時間 | 13 | |
tasu | アドレスのセットアップ時間 | 0 | |
tah | アドレスのホールド時間 | 0 | |
tcsdv | データの出力までの時間 | 30 | |
tdoh | データのホールド時間 | 0 |
- ライト時
記号 | 詳細 | min(ns) | max(ns) |
---|---|---|---|
tcycle | ライトサイクル時間 | 45 | |
tcsl | CS、RWパルス幅 | 32 | |
tcsh | CS、RWディアサート時間 | 13 | |
tasu | アドレスのセットアップ時間 | 0 | |
tah | アドレスのホールド時間 | 0 | |
tdsu | データのセットアップ時間 | 7 | |
tdh | データのホールド時間 | 0 |
A.2. Armadillo-460の遅延
Armadillo-460のCPU(i.MX257)と入出力ピン(J1、J2)の間には CPLD とバッファを配置しているため遅延が生じます。また、バッファイネーブルの反映までの時間も大きく影響します。詳細については「Armadillo-400シリーズハードウェアマニュアル」を参照してください。
- ダイレクトCPUバスモード(非同期)の遅延
信号名 | CPLDによる遅延 | Bufferによる遅延 | ||
---|---|---|---|---|
min(ns) | max(ns) | min(ns) | max(ns) | |
CS3 | - | 7.6 | 1 | 7.4 |
OE | - | 11.9 | 1 | 7.4 |
RW | - | 11.9 | 1 | 7.4 |
SA(アドレス) | - | - | 1 | 7.4 |
SD(Armadilloから出力するデータ) | - | - | 1 | 7.4 |
SD(Armadilloへ入力するデータ) | - | - | 0.7 | 7.4 |
- バッファイネーブル反映までの時間
CS3からイネーブルまで | Armadilloから出力時 | Armadilloへ入力時 |
---|---|---|
max(ns) | max(ns) | max(ns) |
7.8 | 23.7 | 12.6 |
A.3. バスタイミングの決定
LAN9118のバスタイミングとArmadillo-460の遅延の最大値を考慮した場合のバスタイミングは以下のとおりです。
記号 | 説明 | 設定値 | 設定可能値 | 備考 |
---|---|---|---|---|
WSC | アクセルサイクル時間 | 8 | 0~62 | (WSC+1)×7.5=67.5 (ns) |
OEA | OEアサートタイミング | 1 | 0~15 | OEA×3.75=3.75 (ns) |
OEN | OEディアサートタイミング | 3 | 0~15 | OEN×3.75=11.25 (ns) |
CSA | CSアサートタイミング | 1 | 0~15 | CSA×3.75=3.75 (ns) |
DSZ | データ幅 | 5 | 0~7 | 3: 8bit、5: 16bit |
CSN | CSディアサートタイミング | 3 | 0~15 | CSN×3.75=11.25 (ns) |
CSEN | チップセレクトイネーブル | 1 | 0、1 | 1:イネーブル 0:ディスエーブル |
RWA | RWアサートタイミング | 1 | 0~15 | RWA×3.75=3.75 (ns) |
RWN | RWディアサートタイミング | 3 | 0~15 | RWN×3.75=11.25 (ns) |
CNC1 | CSディアサート時間(bit2,1) | 1 | 0~7 | (CNC+1)×7.5=15 (ns) |
CNC2 | CSディアサート時間(bit3) | |||
EW | DTACKモードセレクト | 1 | 0、1 | 1:レベル 0:エッジ |
以上より、WEIMレジスタの値は次のようになります。
- CSCR3U
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SP | WP | BCD | BCS | PSZ | PME | SYNC | DOL | CNC | WSC | EW | WWS | EDC |
CNC=1、WSC=8、EW=1より0x00004880です。
- CSCR3L
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OEA | OEN | EBWA | EBWN | CSA | EBC | DSZ | CSN | PSR | CRE | WRAP | CSEN |
OEA=1、OEN=3、CSA=1、DSZ=5、CSN=1、CSEN=1より0x13001531です。
- CSCR3A
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
EBRA | EBRN | RWA | RWN | MUM | LAH | LBN | LBA | DWW | DCT | WWU | AGE | CNC2 | FCE |
RWA=1、RWN=3より0x00130000です。
各レジスタの詳細については付属DVDの/document/datasheet ディレクトリに収録されている「i.MX25 Multimedia Applications Processor Reference Manual」を参照してください。