秋月電子通商販売の H8/3048F マイコンボードと RealTek 社の ISA バス Ethernet コントローラ RTL8019AS を利用し、 ネットワークインタフェースカードを製作しました。 最終的には、H8 上で OS を動作させ TCP/IP プロトコルスタックによる通信を目指しています。
しかし、残念ながらOSを動かす技術を未だ持ち合わせていないので、TCP/IP プロトコルスタックを実装したスタンドアロンプログラムを構築しました。 現在、NTP (UDP) と HTTP, SMTP (TCP) まで実装できました。
We created a network interface card with Akizuki H8/3048F microcontroller board and RealTek ISA bus ethernet controller RTL8019AS. The final goal is set that we make a operating system run on H8 to communicate someone with TCP/IP protocol stack.
However, we still have no skill to implement operating systems on it. Therefore we made a stand alone program that implements TCP/IP protocol stack. NTP (UDP), HTTP, SMTP (TCP) have been working now.
Hardware
(追記) AKI-H8LANキット(H8/3068F+RTL8019AS)に対応しました。以下は自作のH8NIC(AKI-H8/3048F+RTL8019AS)についての記述です。
マイコンはAKI-H8/3048Fマイコンボードを利用しました。 H8とRTL8019ASはISA busを使って接続します。 今回はISA bus NICであるPLANEX ENW-2401P-Tを利用しました。
AKI-H8/3048Fマイコンボートに1Mbit SRAM (HM628128)を増設しました。 (RAMは無くても動くと思いますが、動作確認はしていません。 RAM上にprogramをおいてMonitorで動作させました)。
文字表示用にLCDを接続します。Push switchとLEDも付けました。
Circuit
回路図は未だ書いていません。
トランジスタ技術 2001年 9月号 第4章
『H8/3067Fマイコンボードの設計&製作』
に掲載されているp. 184 図2. p.185 図4と主要配線は同じです。
- 記事ではH8/3067Fを使用していますが、AKI-H8/3048Fを使いました。
- RTL8019AS:INT3とH8/3048F:IRQ1を接続していますが、現在は未使用です。
- H8/3048FのCS1にSRAMを、CS2にRTL8019ASに繋ぎNE2000 Registerを割り当て、mode 5で動作させます。
- 図3のRTL8019AS:^WR, ^RDは29, 30pinとなっていますが、実際は逆さだと思います。H8との接続はあっています。
- LCD Character Display Module (16 characters * 2 lines) SC1602BS (秋月で購入)を追加します
接続 H8/3048F - LCDPB0 - D4 PB1 - D5 PB2 - D6 PB3 - D7 PB4 - E PB6 - Rs PB7 - R/~W
- 確認用LEDをP4-0,P4-1に接続
- NTP Request Packet送信用のPush SwitchをP4-3
- mail (SMTP)送信用Push SwitchをP4-2
- CとRで時定数を付けたReset Switchも付けました。Monitorでの開発中に使いました。
Evaluation Board
h8nic4.pcb (PCB for UNIX) h8nic4_group1.pdf (pattern) h8nic4_componentsilk.pdf (silk) 写真: DSCF0045s.jpg, DSCF0046s.jpg Bug: RS232CのRx, Txが反対。 GNDパターンはありません。ベタグランドです。基板の作り方によってGNDが消えてしまいます。
Software
TCP/IP protocol stackは最終的にOS (ITRON?)を動かす事を考慮して、 ITRON OSの例であるTOPPERS/JSPのCVS中のTCP/IP protocol stack routineをOS無しで動作するように移植しました。 TOPPERS/JSPのライセンスによると移植後の再配布は条件を満たせば可能ということなので今回公開することにしました。 現在1Mbit SRAMを増設し、HitachiのMonitor programによって、増設したRAM上でprogramを実行しています。 ROM化または、その他のMonitorでの動作は未確認です(ldscriptを書き換えれば動くと思います)。 AKI-H8LAN キットは HTTP, SMTP に対応しました。 ただし、SMTP は EEPROM や送信ボタンなどのハードウェアの増設が必要。 (Jan 23, 2003)
Protocol Stack
現在、UDP である NTP (Network Time Protocol), Echo, TCP である HTTP, SMTP (Simple Mail Transfer Protocol)まで実装しています。 ARP (Address Resolution Protocol)は当然対応していますし、 ICMP (Internet Control Messege Protocol)のうちPing応答は実装済です。 今後、 DHCP, TCP/IP APIやTimeout、再送、ポート不到達通知機能などの実装をする予定です。開発環境
H8用のGNU Toolsです。 http://h8300-hms.sourceforge.net/ この他多くのweb siteにおいてこの開発環境の構築方法が記載されています。 一応、Monitorを含め開発環境を整える際のメモをこちらのページで公開しています。 この文書中の増設RAM用のHitachi Monitorで開発、動作確認をしました。 尚、NTP clientではGNUPro C Libraryのchar *ctime(time_t clock)
を利用するので、newlibを含めた開発環境の構築が必要です。 AKI-H8LANキットではHitachi Monitorを動作させDRAM上でProgramを実行しています。 Monitorはここ のものを使わせて頂きました。 RedBoot 用の linkter script も追加しました。 Makefile 中で linker script を指定してください。 RedBoot では TFTP なども利用できるので大きなプログラムも転送が早いです。 (Jan 23, 2003)
Download
h8nic.tar.gz (Jan 24, 2003 update, RSCからCVSに移行) 内容の簡単な説明(詳細はMakefileやsourceを読んでください)
3048f.h 3067f.h Makefile TODO arp.[ch]: ARP layer crt0.s: start up routine eeprom.[ch]: EEPROM device driver ether.[ch]: Ethernet layer h83048Frhmon.x: Hitachi Monitor用ldscript (H8NIC RAM増設 mode 5) h83048From.x: ROM化ldscript (H8NIC RAM増設 mode 5) h83068Fmon.x: Hitachi Monitor用ldscript (AKI-H8LAN用 mode 5) h83068Fredboot.x: AKI-H8LAN用RedBoot用ldscript (AKI-H8LAN用 mode 5) h83068From.x ROM化ldscript (AKI-H8LAN用 mode 5) icmp.[ch]: ICMP layer ip.[ch]: IP layer itron.h: ITRON header file lan-util.[ch]: LAN sub-routines lcd.[ch]: LCD driver http://member.nifty.ne.jp/softbone/OneBoard/H8Template/ を参考にさせていただきました。 ne2000.[ch]: NE2000 driver nic.c: main routine ntp.[ch]: NTP layer sci.[ch]: SCI driver http://www.ertl.ics.tut.ac.jp/~muranaka/h8/ を参考にさせていただきました。 tcp.[ch]: TCP layer (TCP, HTTP, SMTP) tcpip.h: TCP/IP header udp.[ch]: UDP layer util.[ch]: utility sub routines
使い方
source file 中の IP address, subnet mask, default gateway address (, NTP server address, SMTP server address, 送信先、元mail address)を書き換えてください。
共通(H8NIC, AKI-H8LANキット) ip.c:46:unsigned long node_ip_addr = 0xAC151B16; /* 172.21.27.22 */ ip.c:47:unsigned long subnet_mask = 0xffffff00; /* 255.255.255.0 */ ip.c:48:unsigned long default_gateway = 0xAC151B01; /* 172.21.27.1 */ 以下、SMTP, NTP のみ (AKI-H8LANはNTPは移植してません。また、SMTPは簡単なハードウェアの増設が必要。) udp.c:121: unsigned long ntp_server = 0xD2ADA01B; /* ntp1.jst.mfeed.ad.jp 210.173.160.27 */ tcp.c:270: dest.ip = 0xD3848062; /* SMTP server */ tcp.c:281: send_tcp(&dest, (TCP_FLAG_ACK | TCP_FLAG_PSH), packet, "HELO bc.wakwak.com\r\n", 20); /* SMTP server */ tcp.c:285: send_tcp(&dest, (TCP_FLAG_ACK | TCP_FLAG_PSH), packet, "MAIL FROM:<atsuya@mac.com>\r\n", 28); tcp.c:289: send_tcp(&dest, (TCP_FLAG_ACK | TCP_FLAG_PSH), packet, "RCPT TO:<atsuya@mac.com>\r\n", 26);
コンパイル、リンク、コンバートしてRAMに転送し、Monitor上で実行します。
Makefileを確認 (ldscriptなど書き換え) $ make smtp (SMTP client) $ make http (HTTP server) $ make ntp (NTP client (clock)) $ (kermit, hterm, h8term などsci通信Programで転送) H8/3048 Series Advanced Mode Monitor Ver. 2.2A Copyright (C) Hitachi, Ltd. 1995 Copyright (C) Hitachi Microcomputer System, Ltd. 1995 : l (転送 smtp.mot, http.mot, ntp.mot) : g 20100 (ldscriptがh83048Frhmon.xの場合) (いろいろDebug情報が出ます。) (smtp.motの場合、mail 送信用のpush switchを押すとmailが送信されます。 P4DR.BIT.B5 = 0 の時、bootstrap-mode (送信先やIP addressの設定、EEPROMに保存) P4DR.BIT.B5 = 1 の時、bootstrap-mode (設定値をEEPROMより読みだし)) (http.motの場合、BrowserでH8NICのIPを指定して見てください。http://192.168.0.43/ など) (ntp.motの場合、NTP Request Packet用のpush switchを押すとLCDが現在時刻から時刻を刻始めます。)
AKI-H8LANキットの場合
Makefileを確認 (ldscriptなど書き換え) $ make http(HTTP serverのみ対応) $ (hterm, kermit, h8term などsci通信Programで転送) H8/3067 Series Advanced Mode Monitor Ver. 2.2A Copyright (C) Hitachi, Ltd. 1995 Copyright (C) Hitachi Microcomputer System, Ltd. 1995 : l ### upload (u), exit (q), exit this menu (esc) ### upload file name: http.mot ............................................... Top Address=400000 End Address=FFC193 : g 400000
EEPROM Device Driver
AKI-H8LANキットのIC4ソケット用のEERPOM (94LC64)のドライバを作成しました。 しかし、キットの基板(新ロット)ではSDAがプルアップされているだけです。 I2Cの推奨回路ではI2Cデバイスを並列に接続できるように、SCLもプルアップする必要があります。 プルアップしました。 また、A1も浮いていますが、GNDに落し、A0, A1, A2を000に設定しました。 h8nic.tar.gz 中にあります。UEC SVBL Idea Contest
University of Electro-Communications SVBL (Satellite Venture Business Laboratory) Idea Contestに応募しました。 -> 採択されました。関係者の皆様、ありがとうございました。 予稿集原稿: draft.pdf (1.1MB) Poster: poster.pdf (264KB) Presentation: presen.pdf (254KB)
Reference
- H8開発環境構築メモ
- トランジスタ技術 2001年 1月号, 9月号
- H8/3048シリーズ各種マニュアル
- RTL8019AS Data sheet
- TOPPERS/JSP
- GNU Development Tools for the Hitachi H8/300[HS] Series
- RedHat GNUPro Toolkit Manuals
- RedHat 組み込み Download GNU Pro関連
- マスタリングTCP/IP入門編
- TCP/IP Illustrated, Volume 1:The Protocols W.Richard Stevens
Staffs
- OKAZAKI Atsuya
- TOGAWA Satoshi
s-togawa at tkd.att.ne.jp