This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LS3137:TI FEE 驱动器问题将大数据读取/写入多个块

Guru**** 2482225 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/722811/tms570ls3137-ti-fee-driver-problem-reading-writing-large-data-to-multiple-blocks

器件型号: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 VsStateu8EEPIndex
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 BlockOffsetLength
unsigned char * read_ptr=read_data

unsigned int loop

/*初始化 RAM 阵列。*/ 
UINT8 RandomData[7]=0xBAU0x28U0x4BU0x27U0x64U0xB4U0x7BU }
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 = 1BlockNumber <= TI_fee_number_for_blocksBlockNumber++) 

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 = 1BlockNumber <= TI_fee_number_for_blocksBlockNumber++) 

长度= FEE BlockConfiguration[BlockNumber-1].FeeBlockSize

oResult=TI_fee_read (BlockNumberBlockOffsetREAD_PTRLength)
操作 

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 = 1BlockNumber <= TI_fee_number_for_blocksBlockNumber++) 

TI_FEE 验证块(BlockNumber)
操作 

TI_fee_MainFunction()
delay()
STATUS=TI_FEE _GetStatus (0)

while (Status= IDLE)


/*设置组7的格式*/ 
TI_FEE 格式(0xA5A5A5A5U)

while (1)
/*用户代码结束*/ 

返回0
}//*


用户代码开始(4)*/*
用户代码结束*/ 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Andrew、
    所有数据块的大小不能超过虚拟扇区长度! 如果您将 block_size 定义为1024、则代码应该可以正常运行。
    有关 TI FEE 驱动器的更多信息、请参阅 HALCoGen\[vresion]\Docs 文件夹下的"TI FEE 用户指南.pdf"。


    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Miro

    我更改为2个虚拟扇区、每个扇区映射到2个物理扇区、我还将块大小更改为2000个字节、现在全部正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我将 F021 FEE 库用于我们的项目、遇到了相同的问题。 我试图将日期设置为8400字节、但我不知道如何配置虚拟扇区、您能向我展示您的 VS 配置吗?

    我的配置在 Halcogen 中完成、如下所示,