Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
RL78 MCU
More
Cancel
RL78 MCU
Forum
RL78/G13のCRCチェック機構
Home
Forum
Tags
More
Cancel
New
Replies
13 replies
Subscribers
446 subscribers
Views
13488 views
Users
0 members are here
CA78K0R
R5F100LEAFB
ハードウエアマニュアル
CubeSuite+
ハードウエアCRC演算
Options
Share
More
Cancel
Related
RL78/G13のCRCチェック機構
tetnoguchi
over 12 years ago
RL78で相変わらずごそごそと調べています。
コード生成の「安全機能」についてなのですが
このうち、フラッシュメモリCRC演算を使いたいと
おもいます。
使用するを選択しても特になにかできるような
コードがはかれているようすはありません。
ハードウエアマニュアルによれば、私のつかう
R5F100LEAFBだと64KBバイトなので
0-FFFBH
を指定してコード生成。
CA78K0R(ビルドツール)のオブジェクトコンバートオプションで
CRC演算を行う
CRC結果出力アドレス FFFC
CRC演算範囲 0h-0FFFBh
CRC演算方法 高速CRC
としたのですが、特になにかが生成されている
様子もありません。
HEXの生成アドレスFFF0からもFFでうめられているように見えます。
そこで問題なのですが、そもそもこのハードウエアCRC
演算は有効なのでしょうか?
CubeSuite+のユーザマニュアルをみよ、との指摘も
ありますが、実際に見つけられたのは
R_CGC_Set_CRCOn(void);
が定義されており、CRC検査開始ビット指定が
あるのみです。
ハードウエアマニュアルの支持通りにするなら
R_CGC_Set_CRCOn(void);
をコールして HALT命令を実行すればCRCチェックが
かかるようにみえますが、具体的には
どうすればいいのでしょう?
なにか資料がありませんでしょうか
チョコ
over 12 years ago
スタッフのチョコです。
ご迷惑をおかけして申し訳ありません。
お問い合わせの高速CRC機能については,サンプルコードとアプリケーションノートを準備中です。
サンプルコードそのものはできていて,現在ドキュメントの作成中です(来月末までには登録する予定です)。
具体的な処理としては,CRC0CTLレジスタを設定して,RAM上のプログラムでHALT命令を実行することでCRC演算が行われます。(マニュアルの図22-3参照)
Cancel
Up
0
Down
Reply
Cancel
フィル
over 12 years ago
スタフのフィルです。
RL78をご使用いただきありがとうございます。
ご質問の件、”RL78/G13 ユーザーズマニュアル ハードウェア編 Aug.22.11Rev.1.00”のP902に記載の本機能の実行条件にご注意ください。
”「RAM上のプログラムによるメイン・システム・クロックでのHALTモードでのみ動作可能です。」”
従いまして、以下の手順で実行が可能です。
・R_CGC_Set_CRCOn(void)実行
・もしサブシステムクロック動作の場合、メインシステムクロック動作に切り替える
・RAM上に配置されたサブルーチンに遷移(RAMフェッチ)
・HALT実行
Cancel
Up
0
Down
Reply
Cancel
tetnoguchi
over 12 years ago
解答ありがとうございます。
おおむね理解しているつもりですが
最大の問題は肝心の想定されるCRC値が
うまく出力されていないようすだということです。
どこに出力されているのでしょう?
前にも書きましたが、CRC値はFFのままにみえるのです。
う~ん。
Cancel
Up
0
Down
Reply
Cancel
tetnoguchi
over 12 years ago
>サンプルコードそのものはできていて,現在ドキュメントの作成中です(来月末までには登録する予定です)。
ということであれば、もう少し早くいただけないですかねぇ。
完全なドキュメントでなくてもかまわないのですが。
月末には実装完なのですが、自前でROMチェックルーチン
つくるよりは遙かに確実なはずなので。
入手の方法はありませんか?
Cancel
Up
0
Down
Reply
Cancel
tetnoguchi
over 12 years ago
以下のような感じです。
HALTしてRETしてくると、PGCRCLはちゃんと返ってくるようです。
ハードウエアマニュアルどおりのうごきだとおもいます。
==========================================
unsigned char ChkHardwareCRC(void)
{
// HALT\, RET
char CRC_check_ram[] = {
0x61\, 0xED\, 0xD7\,
0\,0\,0\,0\,0\,0\,0\,0\,0\,0
};
unsigned int CRCvalue = 0;
unsigned int CRCvalue2 = 0;
unsigned char ret = 1;
//X_ROM_CRC_SUM : 0xFFFC サムの保存アドレス
__far int* const ptr = X_ROM_CRC_SUM;
// RAM アドレス内にHALT配置
void __far (*funcHALT)(void) = &CRC_check_ram[0];
CRC0EN = 1; // CRC演算動作許可
funcHALT(); // HALT実行
CRC0EN = 0; // CRC動作停止
CRCvalue = PGCRCL ;
CRCvalue2 = *ptr;
if ( CRCvalue != CRCvalue2 ) ret = 0;
else ret = 1;
return ret;
}
==========================================
問題は、
0xFFFCにサムアドレスがきちんと生成されていない
ということだとおもいます。
やりかたはあっているでしょうか?
CA78K0R(ビルドツール)をクリックして、
オブジェクト コンバート オプションのタブをひらく。
CRC演算の項目を
CRC演算を行う
CRC結果出力アドレス FFFC
CRC演算範囲 0h-0FFFBh
CRC演算方法 高速CRC
に設定。
もしかして、これだけではダメなんでしょうか?
あと一歩まできているとおもうんですが。
ヒントをいただければ、とおもうんですが。
よろしくお願いします。
Cancel
Up
0
Down
Reply
Cancel
チョコ
over 12 years ago
スタッフのチョコです。
もしかすると,オンチップデバッグをオンにされてはいないでしょうか。
オンチップデバッグではROMの最後の512/256バイトを使用してしまいます。そのためにCRCの値が出力されていないのではないかと思われます。
CGのクロック設定のだけでなく,リンクオプションも確認してください。
落ちらで確認した画面を添付しておきます。
IqBqxnUnN4FUs6Xu-0_A0035.jpg
O0A8sRqgy1zIlK8h-1_A0036.jpg
Cancel
Up
0
Down
Reply
Cancel
tetnoguchi
over 12 years ago
オンチップデバッガ設定が原因でしたか!
たしかにFDFE以前だときちんとHEXファイルには
指定アドレスで書かれるようです。
さすがにE1デバッガなしで開発、ってのは現実的で
ないので、CRCはFDEFにセットするようにして
運用しようとおもいます。
さて、あとすこしだとおもうのですが
もうすこしおつきあいください。
HEXにはきちんとCRCが設定されているようなので
さきのROM読み出しルーチンをやってみましたが
やっぱり失敗します。
いろいろためしてみると、コンパイルしたコードが
入っているアドレスに対してはきちんと読み出しが
できているようです。
これにたいし、コンパイルコードがはいっていない
ROM領域についてはFFFFになる雰囲気なのです。
先にあげたROM読み出しコードではなにかたりないのでしょうか?
Cancel
Up
0
Down
Reply
Cancel
チョコ
over 12 years ago
スタッフのチョコです。
どうも,オブジェクト・コンバータ段階では,オンチップ・デバッグで使用する領域にはFFが埋まっているようです。
このため,オンチップ・デバッグが生きている状態では,ビルド時の値が実際に動作させるときの状態と一致しません。
こうなると,CRCチェックはオンチップ・デバッグしない状態で確認するしかないようです。
Cancel
Up
0
Down
Reply
Cancel
tetnoguchi
over 12 years ago
チョコさん
お手数おかけしています。
たしかにその領域はFFでうめられて、CRCも吐かれないので、了解です。
ただ、ず~っっと前のほうのエリア、たとえば、0300とか、コードが置かれるあたりのほうでためしているのですが、CRCはきちんと指定アドレスに埋め込まれています(HEXで確認)
これで、前回示したプログラムをうごかすと、
ROMコード部はちゃんと読み出せています。
(デバッガで読み出す値と逆アセンブラの値がきちんと一致して読み出せてます)
ところが、ROMコードのないところはFF。
これは正しいのですけど、CRCをおいたところまでFFになるのは何か仕掛けがあるのかなと。
あと一歩だとおもうんですが...
Cancel
Up
0
Down
Reply
Cancel
Okamiya Yuuki
over 12 years ago
tetnoguchi様
情報が大変遅くなり申し訳ございません。
オンチップデバッグを行う際、デバッグ用モニタ領域は、
消去するため、0xFFFCの領域もその対象になり、
期待値を埋め込んでおくことができません。
また、リセットベクタ(0x2番地)もデバッグ用途に
書き換えられますので、演算結果も異なってしまいます。
このためRL78/G13のオンチップデバッグでは
高速CRC機能の動作はできますが、肝心のチェックが
できません。
フルICEのIECUBEではチェックが可能です。
Cancel
Up
0
Down
Reply
Cancel
>