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
13253 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チェックが
かかるようにみえますが、具体的には
どうすればいいのでしょう?
なにか資料がありませんでしょうか
Parents
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
Reply
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
Children
No Data