60歳からの電子工作ノート

生涯学習として取り組んでいます。

RL78/G16 CPUボートの試作(ROMのチエックサム)

  ROMのチェックサム(CRC)のテストプログラムを作成しました。また定数(const)と変数初期値のメモリ配置について調べました。以下の資料を参考にしています。

資料1*1、資料2*2、資料3*3、資料4*4、資料5*5

CRCの比較

 マイコンのプログラムが壊れていないかを確認するために、ビルド時に作成したCRCと、マイコンで計算したCRCを比較します。

図1. CRCの比較

ここでは セクション .textと.textfの範囲のCRC値を計算します。CRC値の出力アドレスは、0x03DFEとしています。

図2. CRC計算範囲と格納位置
CC-RLの設定

CRCを計算するために、CC-RLのヘキサ出力オプションで設定します。

1) CRC値の出力アドレス

0x03DFEとしました。(ROMが16KBであり、 デバック用のモニタプログラム(.monito2)が0x03E00~0x03FFFを占有しているため)

図3. 出力アドレス

2) 計算範囲

セクション .textと .textf としました。

図4. 計算範囲

3) 演算方式
(汎用CRC}を選択します。

図5. 演算方式

4) 初期値

 初期値は0x0000としました。

図6. 初期値

5) CRC演算結果と出力アドレス表示

「はい」とすることで、ビルド後に表示されます。

図7. 演算結果と出力アドレス表示

図8. ビルド後の表示

6) CRC値をソースファイルに転記します。

図9. ソースファイルへ記入
CRCテストプロラムと動作確認

汎用CRCで計算したCRCと、ビルド時のCRCが一致すれば、 rom_crc_16_err = 0となります。CRCが不一致の場合、rom_crc_16_err = 1 となり、ALM LEDが点灯します。

(注: デバック時にソフトウェアブレークを入れると、コードが変わるためCRCが一致しません。ブレークせずに実行するか、ハードウェアブレークで確認します。)

 

図10. テストプログラムと動作確認

CRCを計算するrom_crc_chk ()はアセンブラ(インラインアセンブラ)です。

CRC演算機能 (資料1 「20.3.1 CRC 演算機能(汎用CRC)」)を使用しています。

図11. CRCの計算
定数(cosnt)と変数初期値の配置アドレス

const宣言された定数は、ROMのアドレス0x00800より入っています。

またミラー領域(0xF0800~0xF3FFF)に反映されています。

図12. const宣言された定数の場所とミラー領域への反映

初期値付きグローバル変数の初期値は、ROMのアドレス0x00080より入っています。

また、RAMのアドレス0xFF700にも格納されています。(スタートアップルーチンでコピー)

図13. 初期値付きグローバル変数の値のある場所

マップファイルでセクションとアドレスを確認できます。

図14. マップファイル

ROM書き込み用のファイル

 フラッシュプログラマ等でROMに書き込む際のファイル形式は、デフォルトでは「モトローラ S形式」となっています。ビルド後にCS+で見ることができます。

図15. 出力形式の指定とモトローラS形式のファイル

作成されたモトローラS形式のファイルの内容です。書き込みアドレスとデータが確認できます。

図16. ROM書き込み用 モトローラS形式
ファイル一覧

図17. ファイル一覧

登録場所: https://github.com/vABCWork/rl78_test_crc

・開発環境

無償評価版 CS+ for CC V8.11.00 [30 Nov 2023]

CC-RL V1.13.00

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10     2023.08

*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13  2023.12

*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」Rev.2.30  2022.04

*4:資料4「RL78ファミリ用Cコンパイラパッケージ(CC-RL) アプリケーションガイド プログラミング・テクニック編」Rev.1.0  2018.11.26

*5:資料5「ダウンロードした.hexファイルのCRC演算期待値が異なる [RL78]」 https://ja.na4.teamsupport.com/knowledgeBase/17796205