您好!
我正在使用 TMS570LC0714控制器。 我想对一个可擦除和编程的引导加载程序软件进行编程
闪存组0。 但我在擦除闪存区域时遇到问题。
因此、我知道、如果我想擦除闪存组0的闪存部分、fapi 函数必须在 RAM 区域中运行。
以下几点显示了我所做的工作:
1) 我使用不带浮点单元的控制器、因此我使用了 Lib "F021_API_CortexR4_be.lib"。 希望这是正确的。
2) 我按照以下方式调整了链接器命令文件:
引导程序 (X) :origin=0x00000000 length=0x00000020
Flash_API (RX):origin=0x00000020 length=0x000014E0
FLASH0 (RX):origin=0x00001500 length=0x0001EB00
堆栈 (RW):origin=0x08000000 length=0x00001500
RAM_API (rwx):origin=0x08001500 length=0x0000EB00
RAM (RW):origin=0x08010000 length=0x00010000
AJSM (RX):origin=0xF0000000 length=0x00000010
闪加匹:
{
--library= F021_API_CortexR4_be.lib (.text)
}load = flash_API、run = RAM_API、load_start (FlashApi_LoadStart)、run_start (FlashApi_RunStart)、size (FlashApi_LoadSize)
3) 我在擦除闪存之前将所有闪存数据复制到 RAM 中、如下所示:
void CopyAppiFromFlashToRam (void){
uint32大小;
uint32 i;
大小=(uint32)&FlashApi_LoadSize;
for (i=0;<size;i++))
{
(((char *)&FlashApi_RunStart)[i]=((char *)&FlashApi_LoadStart)[i];
}
}
4) 我擦除闪存的函数称为 Fapi_BlockErase (闪存区域)。
以下映射文件列表显示了具有相应闪存/RAM 地址的 Fapi 函数。
000086d0 Fapi_BlockErase
所有 fapi 函数都位于 RAM 区域、也是 Fapi_serviceWatchdogTimer 函数。
08001c49 fapi_calculateEcc
08001bc5 Fapi_calculateFletcherChecksum
08001a55 Fapi_enableEpromBankSectors
08001ad5 Fapi_enableMainBankSectors
08001c5d Fapi_getNumberOfBankSectors
08001501 Fapi_initializeFlashBanks
08001bfd Fapi_issue19 CommandWithAddress
080018dd Fapi_issueProgrammingCommand
08001c8c Fapi_serviceWatchdogTimer
08001761 Fapi_setActiveFlashBank
00000794 FlashApi_LoadSize
00000020 FlashApi_LoadStart
08001500 FlashApi_RunStart
但它仍然不会擦除闪存。 有什么想法?
此致
布鲁诺