以块(1024字节)擦除闪存

时间:2014-05-28 16:42:31

标签: embedded microcontroller pic bootloader microchip

我正在制作一个bootloader。在向该块中的那些寄存器写入任何内容之前,我必须擦除1024字节的内存。即使我想写2个字节,我也不得不擦除1024个字节。我的问题是我不知道每个块的起始位置。例如,假设我想将以下字节写入此地址。

地址: 0x198F0

字节: C80E00010001616FDFECD6F08C8C92EC

当我尝试从地址0x198F0开始擦除1024个字节时,我注意到它开始从0x19800删除。

我如何知道每个块的起始位置,以便我可以用软件计算它?

我想知道这个的原因是我可以在擦除之前将整个块复制到ram中,然后修改它,然后将其写回到同一个块中。我正在使用PIC18f87J11和MPLAB XC8编译器。我希望清楚我想要做什么,否则请在评论中告诉我。

谢谢!

1 个答案:

答案 0 :(得分:5)

PIC18f87J11的FLASH存储器模块对齐1024字节。要计算某个块的起始地址,请将最后10位地址设置为0,这样就可以使用:

StartAddress = AddressPtr and 0xFFFC00

在你的情况下:

0x198F0 and 0xFFFC00 = 0x19800