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.

[参考译文] TMS570LS0432:将 TMS570闪存存储器用于数据(运行时写入/读取)

Guru**** 2482105 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS0432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695853/tms570ls0432-use-tms570-flash-memory-for-data-write-read-during-runtime

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGEN

尊敬的用户:

我想在运行时使用 TMS570闪存的一小部分来存储一个值(64位数字)。 如果控制器再次关闭并打开、则应从闪存中恢复该值。 我在数据表或互联网中找不到有关此主题的任何有用信息。 在运行时、是否有任何用于写入和读取闪存存储器的示例代码? 任何答案都很有帮助。

此致
米歇尔

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

    TMS570LS0432包括一个用于数据存储的16KB 闪存组(EEPROM 仿真)。 您可以在 HALCoGen 的帮助文件中找到一个示例代码项目、以便与该数据闪存组配合使用。

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

    您好、Sunil、

    感谢你的答复。 我找到了一个示例代码"C:\ti\Hercules \HALCoGen\v04.07.00\examples\TMS570LS04x_03x_02x\example_TI_fee_Write_Read.c"。 我不想测试闪存、以下代码也足够了:

    #define BLOCK_NUMBER 0x01
    
    sint64值= 0;
    
    void main (){
    
    TI_FEE _ Init();
    
    readValue ();
    
    //...
    
    while (1){
    
    if (/* value changed */){
    writeValue();
    }//...
    
    
    }
    }
    
    void readValue(){TI_fee_read(block_number,
    0,&value, 8);
    }
    
    void writeValue(){TI_fee_WriteAsync
    (block_number,&value);
    } 

    然后、我想问以下问题:

    WriteSync 和 WriteAsync 有何区别?

    2.我发现块大小是在 ti_fee_cfg.c 文件中配置的、但我在哪里对存储在闪存中的地址进行编程?

    TI_fee_MainFunction()的用途是什么?

    此致

    米歇尔

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

    我会将您的问题转交给软件团队。

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

    感谢您的回答。 由于我在我的软件中一直没有这个部件、所以我有兴趣回答这个问题。

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

    我的答案:

    WriteSync 函数会同步完成数据写入、即在函数退出之前将数据写入 FlashBank 7。
    WriteAsync 函数接受写入作业、但实际写入数据在 TI_FEE 主函数 API 中完成。

    2. FEE 驱动器负责向银行7中的免费地址进行写操作。 应用程序不需要知道要写入的下一个空闲地址。 FEE 驱动器负责将有效块移动到新扇区(扇区已满时)、擦除扇区等

    TI_FEE 函数用于完成异步写入/读取作业、将数据移动到新扇区(扇区已满)、擦除该扇区并准备好使用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vishwanath,

    因此、在调用 TI_FEE Init()之后、我是否需要调用此 TI_FEE 主函数、如下所示:

    执行{
    TI_fee_MainFunction ();
    delay();
    Status=TI_FEE _GetStatus (0);
    }
    while (Status!= IDLE); 

    或者 init 函数本身是否调用此函数?

    如果我理解正确,我可以使用 writeValue()函数中的 TI_fee_WriteSync()函数来避免调用上述循环。

    因为我之前没有使用过 EEPROM、所以所有空间都应该是空闲的。

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

    您需要调用 TI_fee_MainFunction、如示例所示。 TI_FEE 不执行它。

    此外,即使您使用 TI_fee_WriteSync(),也必须定期调用 TI_fee_MainFunction。 这是为了确保一旦扇区已满、所有有效的数据块都被移动到新扇区。