以块(1024字节)擦除闪存

Amm*_*mar 3 embedded microcontroller microchip pic bootloader

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

地址: 0x198F0

字节:C80E00010001616FDFECD6F08C8C92EC

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

我怎么知道每个块从哪里开始,所以我可以在软件中计算它?

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

谢谢!

GJ.*_*GJ. 5

PIC18f87J11的FLASH存储器模块对齐1024字节.要将某个块的起始地址设置为将最后10位地址设置为0,因此您可以使用:

StartAddress = AddressPtr and 0xFFFC00
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

0x198F0 and 0xFFFC00 = 0x19800 
Run Code Online (Sandbox Code Playgroud)

  • 所以读者理解你注意到你取1024-1 = 0x3FF,并且你采取该掩码的反转所以~0x3FF = 0xFFFF .... FFFC00这就是你和你的对比.如果你试图在64字节上对齐,你可以和〜(64-1)对齐.仅适用于2的幂 (2认同)