秋月電子通商 AKI-H8LAN ボードに無線 LAN CF (Compact Flash) カードを接続し、 無線 LAN (IEEE802.11b, WEP 128 bit 対応)、TCP/IP で双方向通信する。
ラジコン(一方向通信)、リモートセンシング、リモートコントロールなどを、 少ないハードウェア資源で TCP/IP (双方向) 通信に置き換えることが狙い。 H8 で直接、無線 LAN カードを制御するので、USB コントローラや、10Base-T/802.11b ブリッジなどは不要。 既に制御系でH8を使っている場合は、マイコンの追加が不要。 ラジコンの通信チャンネルの不足問題も IPv4 で解決できる?
H8 のバスには 16 Mbit DRAM, 10Base-T Ethernet コントローラ (RTL8019AS), CF カードを接続。 OSとして uClinux が動作。PCMCIA 無線 LAN カードのデバイスドライバを移植した。 実績のある Linux の TCP/IP プロトコルスタックを使った通信が可能。 PCでのネットワークプログラミングで一般的なソケットインタフェースを使い、 通信プログラムを開発できる。
We made the "wlan-h8" system composed of the AKIZUKI AKI-H8LAN board connected a wireless LAN Compact Flash (CF) card. It can communicate with TCP/IP on the wireless LAN (IEEE802.11b, WEP 128bit)The objective is the replacements for radio control, remote sensing or remote control and so on with smaller hardware resources. Since a H8 MCU controls the CF card directly, a USB controller or a 10Base-T/802.11b bridge is not required. If the system has already loaded H8 as a controller, you do not need to add an additional micro controller for the wireless LAN. It may be also a solution for the shortage of channels in a radio control.
A 16 Mbit DRAM, a 10Base-T Ethernet controller (RTL8019AS) and a CF card are connected to the H8 external buses. We are utilizing uClinux as a operating system (OS) and have ported a PCMCIA wireless LAN card device driver. It enables to communicate by using a reliable TCP/IP protocol stack of Linux. Programmers are able to develop network programs with the socket interface, that is a common API as the network programming on UNIX.
Hardware
Circuit, Parts
回路図 (schematics) h8-cf-2.2.ce3.png
ChangeLog
Jul 8, 2004
H8:~IRQ4 - CF:HIREQ-
Feb 8, 2005
CF:IREQ -> CD:-IREQ 極性修正
配線表 (line assigment table) assign.h8-cf.txt (追加 H8:~IRQ4 - CF:HIREQ-)
Aug 5, 2006
H8:D0-7 -> H8:D8-15
AKI-H8LAN (AE3068)
H8/3069F 20MHz; Flash ROM 512kByte, RAM 16kByte, memory mapped I/O
DRAM 16M-DRAM(HM57117800TT-6) 16Mbit(2MByte)
Ethernet Controller RTL8019AS
H8/3069F (mode 5) address space
0x000000 vector table, ROM 0x200000 area1 ~CS1 RTL8019AS (NE2000) 0x400000 area2 ~CS2 DRAM (16Mbit) 0x600000 area3 ~CS3 CF Card (attribute memory space) 0x800000 area4 ~CS4 CF Card (I/O space) 0xFEE000 I/O Register(1), RAM, I/O Register(2)
WLI-CF-S11G (MELCO Wireless LAN CF Card)
最大消費電力 (Power consumption max) 660mW (3.3V * 0.2A)
Intersil PRISM2.5 ISL3873B (fn8019.pdf) Integrated MAC and Baseband Processor for PCMCIA and USB
melco.dump_cis.log (dump_cis on Linux)
CISTPL_DEVICE, CISTPL_DEVICE_A, CISTPL_DEVICE_OA telco.cis.dev.png
CISTPL_CONFIG, CISTPL_CFTABLE_ENTRY melco.cis.cfg.png
8bit data bus 接続 (connection) (ISL3873B fn8019.pdf p.13)
bus access: bus.png
HD[15:0]
ホストインタフェースはワードアクセスを第1に設計されているが、すべての バイトアクセスモードも完全にサポートされいてる。詳細は次のHCE01-, HCE2-の項を見よ。なお、attribute memory空間は偶数バイトアクセスのみの 仕様になっている。
HCE1-, HCE2-
PC Cardのサイクルタイプとサイクル幅をCE信号とともに制御する。 PC Card standardに準拠したHCE1-とHCE2-、HA0の組合せを使用することによ り、ワードとバイトアクセスがサポートされている。
3.3V レギュレータ (regulater)
東芝 低ドロップ三端子レギュレ−タ TA48M033F(S)
正出力 +3.3V, 0.5A 面実装(DPAK) 千石100円
CF Card reset 回路 schematics (CF::RESET)
R: 10kohm, C: 10uF
TC74HC14: Toshiba 74HC14 Hex schmitt inverter
PCIC (PC Card Interface Controller)
TC74HC32: Toshiba 74HC32 Quad 2-Input OR Gate
TC74HC08: Toshiba 74HC08 Quad 2-Input AND Gate
Sunhayato CK-14 (CF -> Universal 変換基板 translation board)
PCB (Print Circuit Board)
version 2
h8-cf-2.pcb
ChangeLog: rotate CK-14 (CF), CF::RESET, CF::-CE1 = (H8:-CS3)&(h8::-CS4), 74HC32::Vcc=3.3V -> 5.0V
version 1
h8-cf.pcb, h8-cf.png
PCB CAD
PCB http://bach.ece.jhu.edu/~haceaton/pcb/
Eagle http://www.cadsoft.de/
Waveforms
NE2000, DRAM, CF attribute, CF I/O を一度 memory dump した後、C Fを Software Reset し再び memory dump するプログラム。 monitor 上での実行用と uClinux 上の userland program としての実行用の2種類を含む。
dump.tar.bz2
$ tar jxf dump.tar.bz2 dump/ (monitor上での実行用) dump/3069s.h dump/Makefile dump/crt0.s (start up routine) dump/h83069Fmon.x (Renesas monitor (DRAM利用)用 linker script) dump/h83069Fredboot.x (redboot用linker script) dump/h83069From.x (ROM化用linker script) dump/dump.c dump/sci.c (SCI driver) dump/sci.h (SCI driver) dump/monitor.mot (Renesas monitor (内蔵RAM利用)) dump/h83069Flmon.x (Renesas monitor (内蔵RAM利用)用 linker script) dump/dump.log (RedBootでの実行結果) dump/linux/ (uClinuxのuserland programとして実行) dump/linux/Makefile dump/linux/3069s.h dump/linux/dump.c (printf()を利用。他のresource(OSが利用)へのアクセスを避ける) dump/linux/dump.failed.log (elf2flt-wlanh8.diffを当てる前のアクセスエラーlog) dump/linux/crt0.S dump/linux/dump.crt0_ram.patch.log (crt0_ram.S.diffを当てた後。正常値) $ cd dump; make (dump.mot (Motorola S format)が生成) $ minicom RedBoot> load -v -m TFTP -b 0x400000 dump.mot; go 0x400000 $ cd linux; make (dump (BINFLT)生成、ROMFS (NFS)にして実行) $ minicom RedBoot> load -r -m TFTP -b 0x400000 aki3068net-image.bin RedBoot> exec -c "console=ttySC1,38400n81" /> /usr/dump
WLI-CF-S11G (BUFFALO wireless LAN CF Card)
電源投入直後 (reset回路 C=10uF, R=10kohm)
Vcc, CF::RESET reset.png
74HC14::2A(In) (RC), CF::RESET rc.png
CF::RESET, CF::-HIREQ hireq.png
RESET (ISL3873B fn8019.pdf p.14)
RESETがde-assertされたときに、CISテーブルが初期化され、初期化を完了す るとHIERQ-がhighになる(リセット直後はHIREQ-はRDY/BSYのようにふるまい、 そして、カードの利用準備ができることを示すhighになる)。CISテーブルは Flashメモリに入っていて、ファームウェアの初期化中にRAMにコピーされる。 ホストシステムはCIS情報を読み、コンフィグレーションレジスタに書き込む ことで、カードを初期化することができる。
read attribute space (dump.c) (3 state 3 wait)
CF::-WAITも観測 waitcf.png
CF::-WAITも観測 without CF waitnocf.png
CF::-OE, -WEをアナログで観測(ロジック観測波形に重ね合わせ) analogplus.png
CF::-OE, -WEをアナログで観測(アナログ信号のみ) analogonly.png
read attribute space (dump.c) (3 state, 3 wait, enable BSC.BCR.WAITE)
melco.dump.log melco.dump.png waiteff.png waitexx.png
melco.dump_cis.log (dump_cis on Linux)
Epson memory-mode CF Card (SunDisk)
read attribute space (dump.c) (? state ? wait)
epson.dump.log epson.png
epson.dump_cis.log (dump_cis on Linux)
Software
Cross development environment (h8300-elf)
binutils-2.14
$ tar zxvf binutils-2.14.tar.gz $ cd binutils-2.14 $ ./configure --target=h8300-elf $ make # make install
gcc-3.3
$ tar zxvf gcc-3.3.tar.gz $ cd gcc-3.3 $ patch -p1 < ../gcc-3.3.diff $ ./configure --target=h8300-elf \ --with-newlib \ --with-headers=$HOME/download/newlib-1.11.0/newlib/libc/include \ --enable-languages='c' $ make # make install
elf2flt
http://keihanna.dl.sourceforge.jp/uclinux-h8/5236/elf2flt.patch
に加え、CF Cardの領域(attribute空間 (, I/O空間))にuserlandから書き込みを許可するためにpatchが必要 (device driverで叩く分には必要なさそうですが)。
この2つの修正を含んだ elf2flt (Jan 14, 2004のCVS)に対する patch elf2flt-wlanh8.diff
このpatchを当て済みのパッケージ elf2flt-wlanh8.tar.bz2
$ tar jxvf elf2flt-wlanh8.tar.bz2 $ cd elf2flt-wlanh8 $ ./configure --target=h8300-elf --with-libbfd=/usr/local/lib \ --with-bfd-include-dir=/usr/local/include \ --with-binutils-include-dir=$HOME/download/binutils-2.14/include $ make # make install
Boot Loader (Debug Monitor)
eCos, RedBoot
uClinuxのbootに必要
eCos-h8 [sourceforge.jp]
eCos [redhat.com]
RedBoot [redhat.com]
Hitachi Monitor
テスト用に利用。運用時には不要。
http://www.mechatronics.mech.tohoku.ac.jp/~kumagai/tech/h8/ の「モニタをなんとかする」を参考にしました。
AKI-H8LAN (H8/3067?, 3068, 3069)用 内蔵RAMにprogramをload (DRAM未使用)
akih8mon.bat
monitor.aki
monitor.MOT
h83069Flmon.x (linker script for GNU ld (h8300-elf))
OS
uClinux-h8 [sourceforge.jp]
uClinux [www.uclinux.org]
通常の構築、利用方法は別ページ掲載中 uClinux for H8/300H
wlan-h8での構築方法
H8MAX用のpackageを利用 http://strawberry-linux.com/h8max/
$ tar jxvf uClinux-dist-h8300.tar.bz2 $ cd uClinux-dist-h8300 $ patch -p1 < wlanh8.diff linux-2.4.x/arch/h8300/platform/h8300h/aki3068net/crt0_ram.S: area3,4をCF用bus timingに設定 linux-2.4.x/drivers/net/wireless/Config.in: orinoco_wlanh8.cを追加 (make *config用) linux-2.4.x/drivers/net/wireless/Makefile: orinoco_wlanh8.cを追加 linux-2.4.x/drivers/net/wireless/orinoco_wlanh8.c: orinocoのwlan-h8ボード用wrapper linux-2.4.x/include/asm-h8300/io.h: 16bit read writeを8bitに分ける $ make menuconfig (Akizuki/aki3068net) Vendor/Product (linux-2.4.x) Kernel Version (uClibc) Libc Version [ ] Default all settings (lose changes) (NEW) [*] Customize Kernel Settings (NEW) [*] Customize Vendor/User Settings (NEW) [ ] Update Default Vendor Settings (NEW) kernelの設定 Network device support [*] Wireless LAN (non-hamradio) [*] Hermes chipset 802.11b support (Orinoco/Prism2/Symbol) [*] Wlan-h8 support (EXPERIMENTAL) というようにwlan-h8基板用の設定がでるのでonにする。 その他は面倒なので $ grep =y linux-2.4.x/.config CONFIG_UCLINUX=y CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_EXPERIMENTAL=y CONFIG_BOARD_AKI3068NET=y CONFIG_H83068=y CONFIG_RAMKERNEL=y CONFIG_CPU_H8300H=y CONFIG_NET=y CONFIG_KCORE_ELF=y CONFIG_BINFMT_FLAT=y CONFIG_DEFAULT_CMDLINE=y CONFIG_BLK_DEV_BLKMEM=y CONFIG_NOFLASH=y CONFIG_INET=y CONFIG_NETDEVICES=y CONFIG_NET_ETHERNET=y CONFIG_NET_ISA=y CONFIG_NE2000=y CONFIG_NET_RADIO=y CONFIG_HERMES=y CONFIG_WLANH8_HERMES=y CONFIG_NET_WIRELESS=y CONFIG_SH_SCI=y CONFIG_SERIAL_CONSOLE=y CONFIG_RAMFS=y CONFIG_PROC_FS=y CONFIG_ROMFS_FS=y CONFIG_NO_KERNEL_MSG=y CONFIG_ZLIB_INFLATE=y userlandの設定 (RAMがぎりぎりなので、なるべくダイエット) busyboxを使う (default) shutdown, rebootなどは削除 (IDE (CF)無しなのでいい?) iwconfig (wireless_tools) busyboxではなく単体のバイナリ Network Applications --- Wireless-tools [*] wireless_tools support [*] iwconfig $ make dep $ make clean $ LANG=C make
Wireless LAN Device Driver
linux-2.4.x/drivers/net/wireless/orinoco_wlanh8.c
上記(OS)のpatch (wlanh8.diff)に含まれている。
network interfaceは
eth0: RTL8019AS
eth1: WLI-CF-S11G
orionco_plx.cから移植。
orinoco_plx.cはPCMCIA slotを持つPCI bus card。 PCMCIA slotに無線LAN PCカードを挿入して使われる。 orinoco_plx.cからorinoco.c, hermes.cと順に呼ばれる。
Prism chipsetのdevice driverについて情報収集した資料 driver.txt
Instructions for running
利用方法。
生成された kernel & userland image (image/aki3068net-image.bin) を TFTP serverに配置
$ minicom RedBoot> load -r -v -m TFTP -b 0x400000 aki3068net-image.bin RedBoot> exec -c "console=ttySC1,38400n81" (uClinux-H8 boot 略) /> free /> ifconfig eth0 172.21.27.21 netmask 255.255.255.0 /> ping 172.21.27.48 /> iwconfig eth1 essid 'hoge' key s:wep_key_string /> iwconfig /> ifconfig eth1 163.221.183.73 netmask 255.255.255.0 /> ping 163.221.183.48 /> cat /proc/net/dev /> route /> cat /proc/kmsg (略) <7>orinoco.c 0.13b (David Gibsonand others) <7>hermes.c: 4 Dec 2002 David Gibson <7>orinoco_wlanh8.c (OKAZAKI Atsuya ) <7>orinoco_wlanh8: CIS: 01:03:00:00:FF:17:04:67: <7>Detected Orinoco/Prism2 wlan-h8 device at irq:16, io addr:0x800000 <7>eth1: Station identity 001f:0004:0001:0003 <7>eth1: Looks like an Intersil firmware version 1.3.4 <7>eth1: Ad-hoc demo mode supported <7>eth1: IEEE standard IBSS ad-hoc mode supported <7>eth1: WEP supported, 104-bit key (と言われるが、128bitで使えた) <7>eth1: MAC address 00:07:40:0F:15:6B <7>eth1: Station name "Prism I" <7>eth1: ready (略) <6>eth1: New link status: Connected (0001)
/etc/rc (romfs/etc/rc) に書けば起動時に実行される。
RedBootもscriptを埋め込み、自動でTFTPからバイナリを読み込み、bootすることが出来る(らしい)。
inflate_boot [sourceforge.jp] を使えば、ROM化、standalone運用も出来る(らしい)。
PCMCIA for Linux
Host PC (Linux) での PCMCIA 関連情報
Linux PCMCIA [sourceforge.net]
/sbin/dump_cis dump_cis - display PCMCIA Card Information Structures # /sbin/dump_cis -v > melco.dump_cis.log /sbin/pack_cis pack_cis - compile PCMCIA Card Information Structures /sbin/cardinfo cardinfo - PCMCIA card monitor and control utility for X /sbin/cardctl cardctl - PCMCIA card control utility /sbin/cardmgr cardmgr - PCMCIA device manager
WLI-CF-S11G on Debian GNU/Linux (woody)
Host PC (Linux) で WLI-CF-S11Gを使う方法。
# apt-get install kernel-image-2.4.18-bf2.4 # apt-get install pcmcia-modules-2.4.18-bf2.4 (reboot) # modconf # vi /etc/pcmcia/config card "BUFFALO WLI-CF-S11G" version "BUFFALO", "WLI-CF-S11G" bind "orinoco_cs" を追加 # /etc/init.d/pcmcia restart # apt-get install wireless-tools # iwconfig eth0 essid 'hoge' key s:wep_key_strings
An application example: NTP Clock
NTP Clock (PICNIC) の無線LAN対応版原子時計に繋がったNTP server (ntp3.jst.mfeed.ad.jp) からtimestampを取得し、LCDに表示。
H8にcharacter LCDを接続。pin aasignは右図の通り。
プログラムはUDP/IP ネットワークプログラムとLCD制御プログラムから成る。 デバイス依存(LCD)以外の部分をHOST PC (Linux) で開発しておき、 最後にクロス開発環境(h8300-elf)でデバイス依存のコードを追加した。
$ tar jxvf ntp.tar.bz2 ntp/ ntp/Makefile ntp/lcd.c (LCD driver in userland) ntp/lcd.h ntp/3069s.h ntp/lcd.lb3 (回路図 LCD library for qbsch) ntp/lcd.ce3 (回路図 for qbsch) ntp/ntp.c (main routing) ntp/lcd.png (回路図 png) ntp/linux/ (HOST PC (Linux)上でのテスト開発用) ntp/linux/ntp.c ntp/linux/Makefile $ vi Makefile (DIST=書き換え) $ make
生成されたntp (flt binary) をuClinux-dist-h8300/romfs/usr/に入れ、 uClinux-dist-h8300以下でimageを生成 ($ make image)。 以降、上記(Instructions for running)手順と同様。
/> iwconfig eth1 essid 'foo' key s:wep_key_strings /> ifconfig eth1 163.221.183.73 netmask 255.255.255.0 /> route add default gw 163.221.183.1 /> /usr/ntp 210.173.160.87 (ntp3.jst.mfeed.ad.jp)
unsigned int sleep(unsigned int seconds);
で1秒を生成しているので、正確な1秒ではない。 RAM容量がぎりぎりなので、romfsのサイズを小さくするため、*printf()
や perror()
は除いた。
Reference
- CQ出版 『LANによるハードウェア制御』 第4-8章 Appendix「μClinux/H8を利用した無線LANの実験」
- CQ出版 『PCカード/メモリカードの徹底研究』
- CFA CF+ and CompactFlash Specification Revision 1.4 (cfspc1_4.pdf)
- O'REILLY 『Linuxデバイスドライバ 第2版』
- H8/3069F-ZTATハードウェアマニュアル
- 先人の例
Staff
- OKAZAKI Atsuya
- TOGAWA Satoshi
s-togawa at tkd.att.ne.jp