« クワガタとカブト | トップページ | 横浜も雪だよ »

2018年3月18日 (日)

lpc_checksum(バグ?)

LPC11U35-501という、小さな基板を2つ持っています。 これ、ARM-cortexM0のCPU搭載のSoCなんですね。(NXP製)

HighSierraを入れた際にまっさらから入れなおしたので、ARM用のgccも入れなおさないといけなかったのです。 でもまぁしばらく使ってなかったので今日入れ直したのです。

pathも追加して、、makeも通るしchecksum生成、cpで書き込み、RESETで実行だ。

と・こ・ろ・が   「動きません?!」

はて? checksum生成の「checksum.bin」がなくなったので、同機能の「lpc_checksum」を使うように変更しただけなんだけどなぁ? バイナリの先頭4bytex7ブロック分のsumを8ブロック目に格納してバイナリコピーしないとFlashに書き込めない仕様なのです。

Lpcsum

手計算してみると、lpc_checksum の結果が確かにおかしいようだ。pythonは苦手だけどソース見てみるか・・・(以下に計算部分を抜粋)

Bsource

単純に7ブロックを足して2の補数にしてるだけだな。 はて?・・・・ あ!!!

そう。 赤丸の部分で0xFFFFFFFFで割った余りに丸めてますね。余りは0〜0xFFFFFFFEになってしまい、1小さくなってしまうのです。

0xFFFFFFFFを超えなければ出ないBUGですね。

result = (result + value) % 0x100000000 または、
result = (result + value) & 0xFFFFFFFF ですね。

この部分を変更した lpc_checksum を使って、無事にLPC11U35-501が動くようになりました。

ふぅ・・・ 疲れた。(^^;

|

« クワガタとカブト | トップページ | 横浜も雪だよ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: lpc_checksum(バグ?):

« クワガタとカブト | トップページ | 横浜も雪だよ »