工具与软件:
你(们)好
我对引导加载程序 闪存存储器进行了分区、以便 从引导加载程序存储和引导固件应用程序十六进制文件
每次在 升级新固件应用十六进制期间、我都需要 擦除旧应用十六进制
十六进制的大小约为800KB
当我尝试 在 引导加载程序启动期间擦除旧固件应用程序十六进制的闪存以进行新固件升级时
这并不是完全擦除
例如
引导加载程序代码是星 地址0x00000000
引导加载程序结束 地址为0x0000c000
固件应用十六进制起始地址 0x0000D000
固件应用十六进制结束地址 0x00067570
当我擦除闪存以进行固件升级时、它仅从0x0000D000擦除到0x0000FFFC
在 0x0000FFFC 地址后、它没有擦除
请说明如何解决我添加了内存窗口和代码片段 以供您查看的问题
0x0000FFFC 后、不会将其擦除

这是我的最后一个地址

下面是我的代码供您参考
uint32_t * pui32App = NULL;
pu32App =(uint32_t *) fw_upgrade_memory;
//UARTprintf ("Erase secondary memory\n");
if ((pui32App[0]!= 0xffffffff)||
(pui32App[1]!= 0xffffffff)
{
UARTprintf ("擦除辅助存储器\n");
Flash_Erase (fw_upgrade_memory、900);
}
SysCtlDelay (2000);
void Flash_vEnable (void)
{
//如果设置了 KEY 标志(位4)、则密钥为0xA442。
//否则、密钥为0x71D5 (TM4C123数据表的第583页)。
如果(BOOTCFG & 0x10){
U16_Glob_flashKey = 0xA442;
}
否则{
U16_Glob_flashKey = 0x71D5;
}
}
void Flash_Erase (uint32_t FlashBaseAddress、uint32_t blockCount)/* block 是1k*/
{
uint32_t i;
Flash_vEnable();
对于(i = 0;i < blockCount;i++)
{
SysCtlDelay (20);
//清除然后设置写入地址的偏移量(17:0)
FMA 并且= 0xFFFC0000;//从第0位清除到17位
//块在1KiB 边界上被擦除、因此将索引乘以1024
//并将其添加到基地址
FMA |= FlashBaseAddress +(i*flash_block_size);
//设置擦除命令位
FMC =(U16_Glob_flashKey << 16)| 0x2;
//轮询 ERASE 位直到其被清除
while (FMC & 0x2);
UARTprintf ("\rFlasherase count %d\r\n"、i);
}
}
请 帮助我对问题进行排序:是否需要对代码或闪存配置进行任何更改
参考的.cmd 文件
