1

アドレス 0x1800 にブートローダーがあり、アドレス 0x0000 にファームウェアがある ATMEGA88 チップを搭載したボードがあります。どちらもUSBにアクセスできます。ブートローダーは新しいファームウェアを書き込むことができますが、新しいブートローダーを作成する必要があります。

確かに、これは AVR プログラマーを使用する場合は問題ありませんが、USB を介してこれを行うことも可能ですか? 私の考えは、新しいブートローダーを書き込むことができる古いブートローダーを介して特別なファームウェアをフラッシュすることでした。それは可能ですか?はいの場合、どのように?

私の現在の試みは成功しませんでした。すべてのコマンド (boot_page_erase、boot_page_fill、および boot_page_write) は、ブートローダーが実行しているのと同じ方法で正常に実行されます (唯一の違いは、0x0000 ではなくインデックス 0x1800 で書き込みを開始することです)。フラッシュには実際には何も書き込まれませんでした。

4

2 に答える 2

1

ATmega88 のメモリは、Read-While-Write (RWW) と Non-Read-While-Write (NRWW) の 2 つのセクションに分割されます。SPM コマンドを実行できるのは、NRWW セクションからのみです (RWW セクションから実行すると、サイレントに失敗します)。データシートのセクション 2.2 (6 ページ) を参照してください。NRWW セクションは、最大のブートローダ セクションに相当します。

そのため、SPM 命令を使用してブートローダを再プログラムするには、ブートローダ セクションに少なくとも最小限のコード スタブが必要です。これは削除せず、SPM 命令を実行します。

于 2011-03-07T17:35:19.473 に答える
0

AtMegaで遊んでからしばらく経ちましたが、ブートローダーがブートローダーの交換をサポートしていない場合(慎重の問題)、またはその周りのメモリに触れていない場合、ブートローダーをゲフラッシュできないことは論理的に思えますブートローダーを介して。

次に、フラッシュを書き換える(ブートローダーに非常によく似た)ファームウェアを作成する必要があります。

于 2011-03-07T14:51:47.217 に答える