EEPROMサポートについて

V1.2からEEPROMサポートが追加された。この機能はデフォルトで無効化されている。

回路

図のような回路でH8とEEPROMを接続する。SCLは出力ポートに、SDAは入出力ポートに接続する必要がある。

無効化の解除・接続ポートの設定

モニターに含まれているeeprom.cを参照して、EEPROMサポートを有効にする。接続ポートの設定方法もeeprom.cに記載されている。

モニターをコンパイルしなおした後、全てのユーザープログラムを再度コンパイルする必要がある。

EEPROMサブシステム

H8のモニタで'e'コマンドを入力するとEEPROMサブシステムが起動する。
起動時に簡単なコマンドの説明が表示される。

S-record(.mot)ファイルの書き込み、読みだし

EEPROMサブシステムで'l'コマンドを入力すると、モニタ本体での'l'コマンドと同様の操作でEEPROMにS-recordファイルが格納される。ただしS-recordファイルは格納時に圧縮される。
'e'コマンドを入力するとEEPROMに格納されたプログラムをメモリ上に展開する。この状態でモニタ本体に戻り'g'コマンドを入力すれば、展開されたプログラムを実行することが出来る。

オートロード

EEPROMサブシステム上で'a'コマンドを入力することにより、オートロード機能を有効/無効化できる。

オートロード機能が有効になっている場合、モニタは起動時に'e'コマンドと同様の操作により、EEPROMからS-recordファイルをメモリ上に展開する。
この機能によれば、H8の電源を入れた後Goスイッチを押すことによってパソコンを使用せずにEEPROMからプログラムを実行できる。

プログラムの読み出しと展開には幾らかの時間を要する。これは典型的なロボット用のプログラムで2秒程度である。この間Goスイッチを押してはならない。

オートロードの開始前にオートロードは一旦無効化され、オートロードが成功するのを確認した後に再び有効化される。つまり、何らかの理由によってオートロードが失敗した場合、次回の起動からはオートロードが行なわれない。

'l'コマンドによってEEPROMにプログラムが格納された直後はオートロードは無効化されている。

ユーザープログラムでのEEPROMの利用

アドレス0はオートロードフラグとして使用されているので、書き換えるべきではない。

EEPROM操作用の関数としては

extern int eep_write_byte(unsigned long int address, unsigned char data);
extern unsigned char eep_read_byte(unsigned long int address);
extern void eep_write_bytes(unsigned long int address, int size, unsigned char *buf);
extern void eep_read_bytes(unsigned long int address, int size, unsigned char *buf);

が用意されている。ただしaddressにはEEPROM上のアドレス、sizeには入出力のバイト数、bufには入出力用のバッファへのポインタを指定する。

H8モニターのページへ