組み込みカード STM32L152RE のブートローダーを C で書いています。このブートローダーは、USART でメッセージが送信されるときに呼び出されます。割り込みを呼び出し、メッセージが受信されると、ブートローダーが実行されます。次に、コンピューターによって USART に送信された新しい HEXA コードでカードのメモリをフラッシュし、リセットする必要があります。
この時点で、ブートローダーは割り込みに応答し、コンピューターから送信されたフレームを読み取ることができます。
メモリをフラッシュする方法がわかりません。私のライブラリには、FLASH_Unlock(void)、FLASH_ErasePage(uint32_t Page_Address)、FLASH_FastProgramWord(uint32_t Address, uint32_t Data) のような関数があります。
フラッシュを消去する必要がありますが、ブートローダーがある部分は消去しません。そのため、このようにリンカー記述子に新しいセクションを作成しました
.bootsection :
{
. = ALIGN(4);
KEEP(*(.bootsection)) /* Bootloader code */
. = ALIGN(4);
} >FLASH
私の記憶は次のように整理されています:MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}
私の質問は、新しいプログラムでフラッシュを消去するときに、ブートローダーがそれ自体を消去しないようにするにはどうすればよいか、また、USART から送信された HEXA コードでフラッシュを適切にフラッシュするにはどうすればよいかということです。