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.

关于eeprom emulation

Other Parts Discussed in Thread: TMS470MF06607, HALCOGEN

你好,能否提供基于TMS470MF06607的关于eeprom仿真模块的配置步骤和案例代码?万分感谢!

  • Hi Forever,

          您可以参考HALCoGen中的Help Tips,里面有您需要的EEPROM的读写参考例程和具体步骤:

    首先下载最新HALCoGen,链接如下:http://www.ti.com/tool/halcogen 

    安装完毕之后,您可以在安装路径下面可以看到Help 文件夹:

    打开后看到:

    最后在TMS470M的Help工具中就可以看到您需要的EEPROM例程了:

    谢谢!

  • 你好,感谢你详细的解答,我已初步调试成功,但由于HCG生成代码太多,没有时间一一详细查看,无法准确理解其含义。其是否主要用以自动实现此FLASH空间划分多区域的EEPROM重复利用??想跟你再确认一下

    1.HCG的FEE选项中第二配置页,共16个FEE BLOCK,每个最多80bytes,合计1280bytes,而一个FEE FLASH SECTOR有16Kbytes,差不多有15倍的空余空间。此空余空间是否由HCG生成的代码来自动完成对SECTOR区间划分成约16个页,来提高FLASH模拟EEPROM的耐久性?若确实如此,那是否意味着要考虑合计的FEE BLOCK容量不能超过16K/16页=1024bytes?

    2.SECTOR最多可设置5个,但在HCG的代码里没有看到可人为选择SECTOR的函数,是否意味着自动完成了模拟EEPROM前一个SECTOR写满后,转入下一个SECTOR,再将前一个SECTOR擦除的功能?

    3.自动生成代码有许多WARING,如下图,虽不影响使用但看着不舒服,如何消除?

  • Hi Forever,

        我来说一下我的理解哈。

        Block是指需要保存的数据对象,比如在一个应用中,要保存两个数据,[时间] (8byte) 和[地点] (16byte),那么就设置两个Block,[时间]对应block 1, [地点]对应block 2。

        在HALCoGen中,需要配置两个Block,并且把它们的长度也设置好。

        如何计算空间,需要看我们的Virtual Sector一页中是如何设置的。

     

       

        比如默认的设置,那么Virtual Sector 1 对应 (Real) Flash Sector 0。长度是16KB。

        接下来,假设每次都是[时间]和[地点]同时需要更新保存的话,(为了算方便,我没有考虑overhead的长度),那么每次要存储8+16 = 24个byte。

        16KB/24byte ~= 682次。

         也就是说大概保存682次后,Virtual Sector 1就被写满了。(当然,如果考虑overhead的话,次数会比682少一些。)

         FEE driver会自动切换到Virtual Sector 2, 并把Virtual Sector 1 全部擦除。

         切换过程中,FEE driver会保留最后写入的[时间]和[地点]的值到Virtual Sector 2。

         对于TMS470的FEE driver,还有一个叫做"Maximum Number of Links”的参数,这个参数是用来更加快速的切换Virtual Sector时使用的。

         如果你打开driver的代码就会发现,让Driver去检查是否Virtual Sector已经写满的速度比较慢,而如果用户指定这个Link的数字的话,(Link最大只能设置256...)

         Driver 判断是否要切换Virtual Sector的速度会比较快一些。

          如果您对操作速度要求不高,那么Max. Link参数可以设置成0,这样就不会检查Link数了。

  • 关于Warning,我这里看到有3类:

    1. 关于.sysmem的warning,应该只有一条,这个warning是因为FEE driver中使用到了heap,但是默认的链接选项中没有分配heap空间。

        解决它可以在[项目属性]->[Build]->[ARM Linker]->[Basic Option]中加入Heap的长度设置,如0x800。

        或者在对应的.cmd文件中设置也可以。

       2. "*** variable is declared but never used" warning,这类警告是因为local变量没有被使用到,主要是因为ECC功能的宏命令开关问题。

           如果您有时间,可以在这些变量声明的地方也加入宏开关。

        3. “ enumerated type mixed with another type”是因为代码中给某些枚举类型的变量赋值了整数值造成的,逻辑上没有错误,如果不希望看到warning,可以在赋值的整数类型前面做类型转换。