主题中讨论的其他器件:HALCOGEN
工具与软件:
我有一个基于应用手册 spna192构建的 CCS 工程。 我在尝试运行应用程序时收到文件擦除错误。 奇怪的是、应用程序会正常加载和运行、但它无法擦除闪存。 我曾尝试在工程属性中使用"所有扇区"来擦除 闪存、但在其余闪存地址空间中看到非 FFFFFFFF 地址。 这在已知良好的 LaunchPad 和生产板上具有类似的行为方式。 我怀疑是配置错误导致了此问题。 我尝试使 icashe 无效并调用 Fapi_flushPipel()但没有成功。
例如 FFFF FFFF FF7F FFFF FFFF FFFF FFFF FFCB FEFF FFFF FFFF FFFF
FFFF FFBF FFFF FFBE FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
FFFE FFFF FF5F 7FFF FFFF FFFF FF7B EFFF FFFF FFFF FFFF FFF7
FFFF FFFF FFFF FFFF FFFB FFFF FFB7 DFFF FFFF BFFF FFEF FFB6 D9FF
FFFF FFFF FFFF FFFF FFFF FFF6 FDFF FFFF FFFF FFFF FF7F FFFF FFB7
DFFF
感谢任何帮助。
uint32_t Fapi_Block (uint32_t ulAddr、uint32_t Size)
{
uint8_t i=0u;
uint8_t ucStartBank;
uint8_t ucEndBank;
uint8_t ucStartSector;
uint8_t ucEndSector;
uint32_t EndAddr;
uint32_t status;
#if 1.
EndAddr = ulAddr + Size;
for (i = 0;I < NUMBEROFSECTORS;i++)
{
if ((ulAddr >=(uint32_t)(FLASH_SECTOR[i].start))&&(ulAddr <((uint32_t) FLASH_SECTOR[i].start + FLASH_SECTOR[i].length))
{
ucStartBank = flash_sector[i].bankNumber;
ucStartSector = i;
休息;
}
}
for (i = ucStartSector;i < NUMBEROFSECTORS;i++)
{
if (EndAddr <=(((uint32_t) flash_sector[i].start)+ flash_sector[i].length))
{
ucEndBank = FLASH_SECTOR[i].bankNumber;
ucEndSector = i;
休息;
}
}
// API 版本2.01
状态= Fapi_initializeFlashBanks ((uint32_t) SYS_CLK_FREQ);
if (status == Fapi_Status_Success)
{
Status = Fapi_enableAutoEccCalculation ();
for (i = ucStartBank;i <(ucEndBank + 1);i++)
{
if (status!= Fapi_Status_Success)
{
休息;
}
状态= Fapi_setActiveFlashBank(( Fapi_Flash 类型) i );
if (status!= Fapi_Status_Success)
{
休息;
}
// API 版本2.01
状态= Fapi_enableMainBankSectors (0xFFFF);
if (status!= Fapi_Status_Success)
{
休息;
}
while (fapi_check_fsm_ready_busy!=4074 Fapi_Status_Fsm);
}
for (i=ucStartSector;i<(ucEndSector+1);i++)
{
Fapi_issueAsyncCommandWithAddress (Fapi_Erase 52ctor、FLASH_SECTOR[i].start);
if (status!= Fapi_Status_Success)
{
休息;
}
while (fapi_check_fsm_ready_busy == Fapi_Status_Fsm y);
while (FAPI_GET_FSM_STATUS!= Fapi_Status_Success);
}
}
status |= Flash_Erase_Check (ulAddr、size);
返回(状态);
}
uint32_t Flash_Erase_Check (uint32_t Start_Address、uint32_t 字节)
{
uint32_t error = ERASE_NO_ERR;
寄存器 uint32_t * dst1 =(uint32_t *) Start_Address;
寄存器 uint32_t bytes =字节;
_iCacheInvalidate_();
Fapi_flushPipeline();/*刷新高速缓存*/
while (字节> 0U)
{
if (*dst1++!= 0xFFFFFFFFU)
{
错误= ERASE_ERR;
休息;
}
字节-= 0x4U;
}
返回错误;
}