IP Power 9212で足りないところを埋めるにはやはり自分で作るしかないので、秋月通商で販売している「H8/3069FフラッシュマイコンLANボード」キットを使ってみることにしました。
このキットにはH8/OSが付属していますが、そのTCP/IPプロトコルスタックやEhternetドライバはパケット紛失等の準正常処理がやや不十分です。組込みソフトウェアを試しに使う程度であれば支障はありませんが、安定動作は期待できません。 本サイトで利用を試みたV3.51でも同様です。 安定動作を期待するのであればH8/OSの後継OSであるMESや、TINET等を利用した方がよいかもしれません。
それにも関わらずここでH8/OSを利用したのは、H8/OSの不具合に気づいたのがアプリケーションを作成して動作確認をしている段階だったためであることが一番の理由ですが、H8/OSは規模も小さくソース解析も改造もやりやすいという利点もあったからです。H8/OSの改造方法についても後半に掲載していますので参考にしてください。

【開発環境】

〜2009/72009/8〜
マシン PowerPC G4 1GHz mac mini 2GHz Intel Core 2 Duo
OS MacOS 10.3.9 * MacOS 10.6.2
その他 Xcodeインストール済み
*:その後10.5にアップグレードしました。10.3.9時にmakeしたjerm,put,h8writeはアップグレード後もそのまま利用できています。10.5環境でのmakeはgccのバージョンもあがっているためにwarningが出ますが、対処しなくても動作するようです。また、10.5にアップグレードした際に、下記で記載のKeyspan社シリアル-USB変換器のドライバを更新しました。ドライバはここからダウンロードしました。このドライバの場合は、下記で記載のcu.USA19QI1b223P1.1のような名称ではなく、cu.KeySerial1 といった名称になります。

【作業の流れ】
ボードの作成
動作テスト OSのロード ROM書き込みソフトの準備
OS書き込み
LAN動作確認 ターミナルソフトの準備
pingを試す
APLのロード RAM書き込みソフトの用意
APL書き込み
組込みソフトの開発


【ROM書き込みソフトの準備】
キットに付属している開発ソフトのCDに付属していたh8writeを使用しました。
CD内のlunuxフォルダ内にROM書き込みソフトのソース「h8write.c」が収録されているのでこれをコンパイル。次の二カ所の書き換えが必要でした。これらに手を加えてターミナル画面でgccでコンパイルするだけです(おそらくXcodeをインストールしていないとgccは使えません)。


オリジナル 書き換え
OSの種類を変更
配列サイズを変更

ひとつめの書き換えはMacはFreeBSDベースなのでそれに合わせるための変更です。
ひとつめの書き換えだけだとなぜか書き込みを行うと、

H8/3069F is ready! 2002/5/20 Yukio Mituiwa.
writing
Segmentation fault

となって異常終了してしまいます。ソースを確認してみると、なぜか配列enableの上限を超えているようでしたので、とりあえずサイズを4096としたところ書き込みに成功しました。


[追加情報1]
後日もう一度書き込みを行おうとしたらまたSegmentation faultが発生しました。もう一度h8writeのソースを見たところ、3069を指定した場合に変数endromを初期化していないようでしたので次のように修正しました。

オリジナル 書き換え
endromの初期化

[追加情報2]
MacOSをsnow leopardに変えたら(というよりInterlmacに乗り換えたら?)h8writeがハングアップしてしまいます。コンパイルし直すといくつかのwarningが出るので下記のincludeを追加し、さらに、通信速度を4800に落としたら動作するようになりました。原因はまだ追究していませんがとりあえずこのまま使っています。(2009.9.26)

オリジナル 書き換え
includeの追加 #include <stdio.h>
#include <fcntl.h>
#define CPU3048
¦
#include <stdio.h>
#include <fcntl.h>
#include <\string.h>
#include <stdlib.h>
#define CPU3048
¦
通信速度の変更 int main(int argc, char **argv) {
¦
if(opencom(sPort, 9600) == -1) return -1;
¦
int main(int argc, char **argv) {
¦
if(opencom(sPort, 4800) == -1) return -1;
¦


【OS書き込み】
Macには232Cシリアルポートはないので、手元にあったUSB-シリアル変換器を利用しました。機種はKEYSPAN社のUSA-19Qiです。
まずポート番号を入手します。変換器をMacのUSBポートに接続して

$ ls /dev/cu*
/dev/cu.USA19QI1b223P1.1   /dev/cu.modem

とします。この場合のポートは/dev/cu.USA19QI1b223P1.1です。差し込むUSBポートを変えると変わるので注意。
次に、h8/3069FのDIPSWを説明書通りに、ON/ON/OFF/ONにして電源を接続し、シリアルケーブルを接続して、

$ ./h8write -3069 -f20 plus3068.mot /dev/cu.USA19QI1b223P1.1
H8/3069F is ready! 2002/5/20 Yukio Mituiwa.
writing
ingore record
...............................................................................................................
...............................................................................................................
...............................................................................................................
........
EEPROM Writing is successed.

となりめでたく書き込み成功です。
ここでplus3068.motはコンパイル済みのOSで開発キットCDのh8_osフォルダ内にあります。plus3068.motこれはコマンドインタープリタ付きのOS(モニタ?)です。

[追加情報]
上記のendromの初期値設定を行うようにしたところ次のような出力が出ますが書き込みは正常にできているようです。
$ ./h8write -3069 -f20 plus3068.mot /dev/cu.USA19QI1b223P1.1
H8/3069F is ready! 2002/5/20 Yukio Mituiwa.
writing
for,524287,7,4095
fscanf1
fscanf2
ingore record
...............................................................................................................
...............................................................................................................
...............................................................................................................
........
EEPROM Writing is successed.


【ターミナルソフトの準備】
コマンドインタープリタ付きのOS(plus3068.mot)をROMに書いておけばRS-232CからのコマンドでIPアドレス設定ができてpingの確認ができます。
シリアル通信用ソフトにはZakTermやJermなどいくつかのフリーソフトがありますのでこれらを利用させてもらうことにしました。
Jermにはmakeファイルも付属してくるので、makeするだけで使用できました。

【pingを試す】
h8/3069FのDIPSWを説明書通りに、ON/OFF/ON/OFFにして、Ethernetケーブルとシリアルケーブルをつないで、電源を接続します。
次にシリアル通信ターミナルソフトを起動します。通信速度は57600です。この値が異なると文字化けを起こすようです。

$./jerm -b 57600 /dev/cu.USA19QI1b223P1.1
Jerminal v0.8096 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007 candy
Type "Ctrl-M ~ ." to exit.
ispeed 57600 ospeed 57600
+IGNBRK -BRKINT -IGNPAR -PARMRK -INPCK -ISTRIP -INLCR -IGNCR -ICRNL -IXON -IXOFF -IXANY -IMAXBEL
-OPOST -ONLCR -OXTABS -ONOEOT
cs8 -CSTOPB +CREAD -PARENB -PARODD +HUPCL +CLOCAL -CCTS_OFLOW -CRTSCTS -CRTS_IFLOW -MDMBUF -ECHOKE -ECHOE -ECHO -ECHONL -ECHOPRT -ECHOCTL -ISIG -ICANON -ALTWERASE -IEXTEN
-EXTPROC -TOSTOP -FLUSHO -NOKERNINFO -PENDIN -NOFLSH

ここでh8/3069Fボードのリセットボタンを押すと、Welcome to the H8 Monitor!!が表示されるます。これで232Cを経由した通信はOKです。
続いて、ethbaseコマンドとifconfigコマンドを使って初期設定を行います。IPアドレスやネットマスクの設定は各自のネットワークに合わせた値で設定してください。 なお、この設定はボードをリセットすると初期化されます。

Welcome to the H8 Monitor!!
H8/OS >ifconfig
H8/OS >ethbase 200000
set ether base adddress..
H8/OS >ifconfig inet 192 168 1 90
H8/OS >ifconfig mask 255 255 255 0
H8/OS >ifconfig
Link encap:Ethernet HWaddr 00:02:CB:02:10:59:
inet addr:192.168.1.90. Mask:255.255.255.0.
H8/OS >

PCから上記で設定したIPアドレスへpingを打つと、ボードの送受LEDが点滅し、pingの応答も返ってきます。


【RAM書き込みソフトの準備】
キットに付属している開発ソフトのCDに付属していたputを使用しました。
CD内のlunuxフォルダ内にRAM書き込みソフトのソース「put.c」が収録されているのでこれをコンパイル。次の一カ所の書き換えをしました。


オリジナル 書き換え
OSの種類を変更


【APL書き込み】
作成したputを使って、http.motを書き込みます。http.motは、開発キットCDのh8_os/httpprog内にあります。http.motの起動はシリアル接続して(jermを起動しボードをリセットしてから)exec ffDE40とします。

$ ./put http.mot /dev/cu.USA19QI1b223P1.1
ffde40 10 5E FF E0 5C 54 70 01 00 6D F6 0F F6 7A 37 00 00
ffde50 10 01 54 01 00 6D F4 01 00 6D F5 01 00 6F E1 FE C4
..(省略)..
ffe300 4 4C 3E 00 00
$ ./jerm -b 57600 /dev/cu.USA19QI1b223P1.1
..(省略)..
Welcome to the H8 Monitor!!
H8/OS >exec ffDE40

このプログラムではh8/3069FのIPアドレスが192.168.0.145に設定されます。もし、自分のLANのネットワークアドレスが異なるようなら、PCと直接接続すれば、http://192.168.0.145/でメッセージが返ってきます。
PCと直接接続する場合には、PCのアドレス設定も忘れずに、192.168.0.10あたりのアドレスを固定で割り付けておく必要があります。また、説明書にはクロスケーブルで接続するよう記載されていますが、自動検出(PCの機能?)されているようでストレートケーブルでも動作を確認できました。



目次 >次