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.

[参考译文] TMS320F280049:闪存 API 操作问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1486861/tms320f280049-flash-api-operate-question

器件型号:TMS320F280049

工具/软件:

尊敬的专家:

如果我们将闪存 API 程序放置在闪存组0中并对闪存组1执行编程和擦除操作、这是否会影响闪存组0中的数据、影响闪存组0的 ECC、或者影响闪存组0最后一个扇区(=15)中的数据?

此外、如果我们将闪存 API 程序放置在闪存组0的扇区1至3中、然后对闪存组0的扇区4至15执行编程和擦除操作、可能会出现哪些偶尔或不可避免的问题?

此致

螺栓

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

    您好、

    Unknown 说:
    如果我们将闪存 API 程序放置在闪存组0中并在闪存组1上执行编程和擦除操作、这是否会影响闪存组0中的数据、影响闪存组0的 ECC、或影响闪存组0最后一个扇区(=15)中的数据?

    否、这不会对 BANK0产生任何影响。

    此外、如果我们将闪存 API 程序放置在闪存组0的扇区1至3中、然后对闪存组0的扇区4至15执行编程和擦除操作、可能会出现哪些偶尔或不可避免的问题?

    您不能在相同的存储库上执行读取和无线操作。 对于这种方法、您必须将代码从扇区1复制到 RAM 中、并从 RAM 执行代码。 您可以参考位于 C200ware 中的闪存 API 示例"flashapi_ex1_program_autoecc"。   有关更多详细信息、另请参阅 www.ti.com/.../spnu628文档。

    此致、

    Rajeshwary

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

    嗨、Rajeshwary、

    感谢您的答复。

    如果我将函数Fapi_issueProgrammingCommand()Fapi_AutoEccGeneration方法配合使用:

    1. 闪存擦除后、如果我进行写入0xFFFF(FMC 能否识别更新的值与擦除状态相同并跳过写入?)、是否可以稍后将其修改为0x0000
    2. 如果地址已编程为非0xFFFF值(例如0x1234)、那么如果我连续写入相同的值(0x1234)会发生什么情况? 是否会发生错误、或者 FMC 能否识别预期更新相同并跳过写入?

    此致

    螺栓

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    闪存擦除后、如果我写入0xFFFF(FMC 能否识别更新的值与擦除状态相同并跳过写入?)、我以后是否可以将其修改为0x0000?

    不可以、它会触发 ECC 错误。

    如果地址已被编程为非0xFFFF值(例如0x1234)、如果我连续写入相同的值()会发生什么情况0x1234? 是否会发生错误、或者 FMC 能否识别预期更新相同并跳过写入?

    针对64位对齐地址和相应的64位数据计算 ECC。 未提供的任何数据(在给定的64位对齐存储器内)都会被视为0xFFFF。  因此、如果您没有向所有 相应的地址写入相同的值、这种情况也会触发 ECC 错误。

    此致、

    Rajeshwary

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

    嗨、 Rajeshwary、

    感谢您的再次光临。

    如果我总是将Fapi_issueProgrammingCommand()该函数与该Fapi_AutoEccGeneration方法结合使用、

    闪存 API 程序在闪存组0中执行。 操作步骤遵循闪存 API 说明:Erase→Program→CheckFSM→GetFSMStatus→doVerify。

    当执行闪存 API 来更新闪存中的数据时、我们会屏蔽其他中断插入并暂停看门狗超时。

    但是、当我尝试更新0x91000~0x9111F闪存组1扇区1中地址范围内的值时、偶尔会发现更新后整个范围的 ECC 值不正确。 具体来说、从开始的68个 ECC 值0x1082200包含数据、但不正确。

    在哪些情况下、闪存程序操作偶尔会导致写入的值与其 ECC 不匹配?

    此致

    螺栓

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在哪些情况下闪存程序操作偶尔会导致写入的值与其 ECC 不匹配?

    您是否在尝试更新相同的数据或一些不同的数据? ECC 值根据数据值而变化。

    此致、

    Rajeshwary

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

    嗨、 Rajeshwary、

    每当需要写入新数据时、我首先擦除整个扇区。 但是、将数据写入该扇区并重新引导 F280049后、它会跳转到 NMI_ISR。 经调查发现、这是整个区域的 ECC 不匹配问题。

    使用 AutoECC 闪存操作方法时、我无法重现整个范围(0x91000~0x9111F)写入错误的问题。 我最多可以观察到12个字的错误、之后 FMC 状态机或数据验证过程会检测到错误并进行报告。

    操作步骤遵循闪存 API 说明:Erase→Program→CheckFSM→GetFSMStatus→doVerify。

    因此、我想问:按照 闪存 API 的描述步骤操作、 在什么情况下整个区域可能会被错误地写入、而不会在写入过程中触发错误?

    此致

    螺栓

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最多可以看到12个字的错误、之后 FMC 状态机或数据验证过程检测到错误并报告。

    在 12个字后的 doVerify 期间它是否失败?

    此致、

    Rajeshwary

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

    嗨、Rajeshwary、

    我目前遇到了一个问题、即使用闪存组0中的闪存 API 写入闪存组1中的特定扇区后、偶尔下电上电会导致该扇区整个写入地址范围的 ECC 验证失败。
    但是、写入过程遵循闪存 API 中指定的正确步骤。

    我无法持续重现整个闪存扇区 ECC 验证失败的问题。
    使用下面的特殊写法,我只能得到12个字不能写之前,进一步的写成为不可能。

    测试步骤:

    1. 应用 自动抄送 要写入的4个字0xFFFF
    2. 应用 仅数据 要写入另外4个字(例如0x1234) 而不执行 Fapi_doVerify()
    3. 重复步骤1和2四次。
    4. 在步骤2的第四次迭代之后、 FMC 状态机检查失败 。 因此、在遇到问题之前、我只能写入12个与 ECC 不匹配的字。

    问题:

    按照正确的闪存 API 步骤操作、在何种情况下可能会发生 整个区域 写入错误 而不会在写入过程中触发错误

    此致

    螺栓

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

    您好、

    通常、FSM 会校正 SECDED 单错、并由触发 ECC 错误的 FSM 检测双错。

    此致、

    Rajeshwary