工具与软件:
您好、 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.