我开发了一个程序,可以从 srec 文件中擦除闪存并编写新的 sw。
我在测试以下配置时遇到问题:
1- 只有 1 个块被擦除,函数 pflashErase 正确返回,我的代码继续正常执行,我可以用新程序对我的闪存进行编程(但我的需要是擦除我的程序所需的整个可写块)
//unlock all
pSetLock(&ssdConfig, C55_BLOCK_LOW, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_MID, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_HIGH, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_256K_FIRST, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_256K_SECOND, 0x00000000);
//select blocks to erase
lowBlockSelect = 0x0;
midBlockSelect = 0x1;
highBlockSelect = 0x0;
n256KBlockSelect.first256KBlockSelect = 0x0;
n256KBlockSelect.second256KBlockSelect = 0x0;
returnCode = pFlashErase(&ssdConfig,
C55_ERASE_MAIN,
lowBlockSelect,
midBlockSelect,
highBlockSelect,
n256KBlockSelect); 2- 使用以下配置,我可以在调试器中看到所有需要的分区都被擦除但是函数 pFlashErase 不返回任何东西并且它保持阻塞并且我的程序无法继续执行(我可以看到当我重置时所有需要的块都被擦除板并使用 ic5700 调试器在断点处停止执行)
//unlock all
pSetLock(&ssdConfig, C55_BLOCK_LOW, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_MID, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_HIGH, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_256K_FIRST, 0x00000000);
pSetLock(&ssdConfig, C55_BLOCK_256K_SECOND, 0x00000000);
//select blocks to erase
lowBlockSelect = 0x0;
midBlockSelect = 0x40;
highBlockSelect = 0x0;
n256KBlockSelect.first256KBlockSelect = 0x000FFFFF;
n256KBlockSelect.second256KBlockSelect = 0x0;
returnCode = pFlashErase(&ssdConfig,
C55_ERASE_MAIN,
lowBlockSelect,
midBlockSelect,
highBlockSelect,
n256KBlockSelect);
你有没有解释这种行为以及如何解决它?
注意:对于所有情况,我都可以正确执行 pFlashProgram