请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LS3137 主题中讨论的其他器件:HALCOGEN
你(们)好
我不熟悉 Hercules 处理器。 我使用的是 Hercules 安全 MCU 开发套件、使用 TI FEE 驱动器读取大量数据并将其写入 EEPROM 时遇到问题。
我已经包含了一份代码副本、下面我从 Example_TI_fee_Write_Read.c 进行了调整
我在 Halcogen 中配置了 TI FEE 驱动器、使用16个块、每个块的大小为2048字节和4个虚拟扇区
我使用简单的8位校验和来确定数据是否正确读回、并且在读取块7之后、我始终会得到校验和不匹配。 我还检查了每次读取和写入后的最后一个错误和作业结果、它们没有指示任何问题。
查看我的 Halcogen FEE 驱动器配置屏幕截图和下面的代码
/*用户代码开始(0)*/ #include "ti_fee.h" /*用户代码结束*/ *包含文件*/ #include "sys_common.h" /*用户代码开始(1)*/ /* FEE 块大小* /#define BLOCK_SIZE 2048 TI_FeeErrorType JobResult=job_OK; TI_Unsigned Data_Resid_Resid_Resid_Resid_0=TI_In_Resid_Resid_Inue_In_Resid_Inue_Size=sy_Resid_Resid_Resid_Resid_Resid_Resid_Resid_0=nue_In_Resid_Resid_Resid_Resid_In uint8 specialRamBlock[block_size]; unsigned char pattern; uint16 u16writecounter; unsigned int FeeVirtualSectorNumber; unsigned char VsState、 u8EEPIndex; unsigned char u8VirtualSector; uint8 Test_Recovery; uint8 Test_Cancel; void delay (void) { unsigned int dummycnt=0x0000FFU; 操作 { dummycnt--; } while (dummycnt>0); } //*用户代码结束*/** @fn void main (void) *@简短应用程序主函数 *@注意此函数默认为空。 * *此函数在启动后调用。 *用户可以使用此函数来实现应用程序。 */ /*用户代码开始(2)*/ /*用户代码结束*/ int main (void) {// *用户代码开始(3)*/ unsigned int BlockNumber; unsigned int BlockOffset、Length; unsigned char * read_ptr=read_data; unsigned int loop; /*初始化 RAM 阵列。*/ UINT8 RandomData[7]={0xBAU、0x28U、0x4BU、0x27U、0x64U、 0xB4U、0x7BU }; for (loop=0;<BLOCK_SIZE;loop++)SpecialRamBlock[loop] = RandomData[loop%7]; /*计算 RAM 阵列数据的8位校验和*/ uint8 Checksum1 = 0; for (loop=0;<BLOCK_SIZE;loop++) Checksum1 += SpecialRamBlock[loop]; Checksum1 =~Checksum1 + 1; /*格式化所有 EEPROM */ TI_FEE 格式(0x5A5A5A5AU); /*初始化费用。 这将创建虚拟扇区、初始化全局变量等。*/ TI_FEE (); 操作 { TI_fee_MainFunction(); delay(); STATUS=TI_FEE _GetStatus (0); } while (Status!= IDLE); /*将块异步写入 EEP。 块大小在 ti_fee_cfg.c 文件中配置。 * 对于(BlockNumber = 1;BlockNumber <= TI_fee_number_for_blocks;BlockNumber++) { TI_fee_WriteAsync (BlockNumber、&SpecialRamBlock[0]); 操作 { TI_fee_MainFunction(); delay(); STATUS=TI_FEE _GetStatus (0); } while (状态!=空闲); /*写入后检查错误*/ 错误= TI_FeeErrorCode (0); JobResult = TI_FEE (0); if (错误!= Error_Nil || JobResult!= job_OK) while (1); } /*读取块*/ BlockOffset = 0; 对于(BlockNumber = 1;BlockNumber <= TI_fee_number_for_blocks;BlockNumber++) { 长度= FEE BlockConfiguration[BlockNumber-1].FeeBlockSize; oResult=TI_fee_read (BlockNumber、BlockOffset、READ_PTR、Length); 操作 { TI_fee_MainFunction(); delay(); STATUS=TI_FEE _GetStatus (0); } while (状态!=空闲); /*计算从 EEPROM 读取的数据的8位校验和*/ uint8 Checksum2 = 0; for (loop=0;<BLOCK_SIZE;loop++) Checksum2 += *(Read_Ptr+loop); Checksum2 =~Checksum2 + 1; if (Checksum1!= Checksum2) { /*校验和不匹配*/ 错误= TI_FeeErrorCode (0); JobResult = TI_FEE (0); /******** 阅读完模块7后,总是卡在这里 / while (1); } for (loop=0;<BLOCK_SIZE;loop++) *(Read_Ptr+loop) = 0; } /*使写入的块无效*/ 对于(BlockNumber = 1;BlockNumber <= TI_fee_number_for_blocks;BlockNumber++) { TI_FEE 验证块(BlockNumber); 操作 { TI_fee_MainFunction(); delay(); STATUS=TI_FEE _GetStatus (0); } while (Status!= IDLE); } /*设置组7的格式*/ TI_FEE 格式(0xA5A5A5A5U); while (1); /*用户代码结束*/ 返回0; }//* 用户代码开始(4)*/* 用户代码结束*/





