H8NIC (2002)

秋月電子通商販売の 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 - LCD
    PB0 - 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

Staffs

  • OKAZAKI Atsuya
  • TOGAWA Satoshi
    s-togawa at tkd.att.ne.jp