工具与软件:
您好、 Skyler Baumer 和团队
我们将在 TMS320F28388D 上开发 EEPROM 仿真特性。 当 EEPROM 仿真功能在 CPU1和 CPU2上按预期工作时、我们当前也尝试为 CM 内核开发相同功能。
/* Programming Commands */
#if defined(_C28X)
extern Fapi_StatusType Fapi_issueProgrammingCommand(
uint32 *pu32StartAddress,
uint16 *pu16DataBuffer,
uint16 u16DataBufferSizeInWords,
uint16 *pu16EccBuffer,
uint16 u16EccBufferSizeInBytes,
Fapi_FlashProgrammingCommandsType oMode
);
extern Fapi_StatusType Fapi_issueProgrammingCommandForEccAddresses(
uint32 *pu32StartAddress,
uint16 *pu16EccBuffer,
uint16 u16EccBufferSizeInBytes
);
#else
extern Fapi_StatusType Fapi_issueProgrammingCommand(
uint32 *pu32StartAddress,
uint8 *pu8DataBuffer,
uint8 u8DataBufferSizeInBytes,
uint8 *pu8EccBuffer,
uint8 u8EccBufferSizeInBytes,
Fapi_FlashProgrammingCommandsType oMode
);
extern Fapi_StatusType Fapi_issueProgrammingCommandForEccAddresses(
uint32 *pu32StartAddress,
uint8 *pu8EccBuffer,
uint8 u8EccBufferSizeInBytes
);
#endif
我们已确定上述 API 的变化、其中针对 CPU1和 CPU2将数据类型指定为 uint16、而针对 CM 内核将数据类型指定为 uint8。 (请参阅上述代码)。
将 C28x 闪存库替换为 CM 闪存库并修改数据类型后、将组状态、页面状态和页面数据写入存储器的功能现在可以正常工作。
从闪存读取数据时、它会作为 NMI 生成。
uint8 Read_Buffer[DATA_SIZE] = {0};
EEPROM_Read(Read_Buffer);
void EEPROM_Read(uint8* Read_Buffer)
{
uint16 i;
if (Empty_EEPROM)
{
} else
{
EEPROM_GetValidBank(1);
Page_Pointer += 16; // data type is uint8 and globally declared
for(i=0;i<DATA_SIZE;i++)
{
Read_Buffer[i] = *(Page_Pointer++); // This code generates NMI
}
}
我们已经验证、在复制操作期间、page_pointer 是否正确指向了预期的存储器位置(用于保存页数据)。

调试窗口消息- 存储器映射阻止读取0xFFFFFFF8 [代码= 0x20000]
使用 Fapi_Auto EccGeneration 配置选项对数据进行编程。
闪存配置:
Flash_initModule (FLASH0CTRL_BASE、FLASH0ECC_BASE、4);
oReturnCheck = Fapi_initializeAPI (F021_CPU0_BASE_ADDRESS、125);
Flash_Disable 452-SW_Workaround (FLASH0CTRL_BASE);
oReturnCheck = Fapi_setActiveFlashBank (Fapi_Flash 0);
Flash_Enable 452-SW_Workaround (FLASH0CTRL_BASE);
您能帮助我们读取 EEPROM 存储器吗? 此外、您能否提供有关如何确定生成 NMI 的根本原因的指导?
谢谢、此致、
Vikram Tathe.