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.

[参考译文] TMS320F28388D:闪存擦除

Guru**** 2601915 points
Other Parts Discussed in Thread: TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1023816/tms320f28388d-flash-erase

器件型号:TMS320F28388D

您好,  

我正在使用 TMS320F28388D 控制器、目前我有一个10ms 的外部看门狗、我正在尝试擦除扇区7、8和9。 我知道擦除每个扇区大约需要40到50ms。

我已访问 CPU1以进行闪存访问、并且在 CPU1完成其闪存操作之前不会释放访问。 这是否正常?

我能够通过使用状态机逻辑刷新外部看门狗并获得闪存 API 函数的反馈来擦除扇区7。

但扇区8和9 将以擦除扇区7的方式被擦除。 我是否需要在每次扇区擦除操作后释放对 CPU1的闪存访问

谢谢、

Nagesh

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

    Nagesh、

    CPU 需要为每个扇区发出扇区擦除命令。  因此、您需要进行相应的规划。  您可以根据需要为每个扇区添加一个超时(基于数据表中提供的擦除时间规格)。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、  

    是的、我已经针对每个扇区在业界发布了擦除命令。

    为了进行擦除验证、我将使用以下命令、这对于闪存扇区是正确的吗?

    if (u32FlashSector = 0x0B8000 || u32FlashSector = 0x0BA000 || u32FlashSector = 0x0BC00A || u32FlashSector = 0x0BE00A)

    EStatus =(Fapi_StatusType) Fapi_doBlankCheck (u32FlashSector、Sector16k_u32length、&oFlashStatusWord);

    其他

    EStatus =(Fapi_StatusType) Fapi_doBlankCheck (u32FlashSector、Sector64k_u32length、&oFlashStatusWord);

    谢谢、

    Nagesh

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

    您好、Vamsi、  

    您能不能告诉我,在发出擦除命令后,fmstat (Fapi_getFsmStatus();)始终为零,但此函数除外  

    //
    //扇区长度为32位
    //
    #define Sector16KB_u32length 0x1000
    #define Sector64KB_u32length 0x4000

    Fapi_doBlankCheck (u32FlashSector、Sector16k_u32length、&oFlashStatusWord);返回 Fapi_Error_FAIL;我还注意到闪存未像其他扇区那样擦除。

    其中  u32FlashSector 保存地址0xBA000。

    您能告诉我这种情况发生的时间。  我最初调用过。

    fapi_issue当 CommandWithAddress (Fapi_EraseSector,(UINT32 *)u32FlashSectorAddr)时 调用一次,因为它返回成功。

    EStatus =(Fapi_StatusType)Fapi_checkFsmForReady();--返回准备就绪

    然后调用 fapi_doBlankCheck()直到它返回未发生的成功。

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

    您好、Vamsi、  

    我尝试使用示例代码 flashapi_ex1_programming、将'Bzero_Sector6_start'替换为'Bzero_Sector10_start'、并尝试擦除已写入的数据、即使在示例程序中不起作用、这是否意味着控制器有问题?

    谢谢、

    Nagesh

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

    Nagesh、

    应用程序是否循环等待检查 FSM 就绪? FSM 准备就绪后、您检查了 fmstat 并且它为零、但空白检查失败-正确吗?

    这仅针对一个扇区发生-其余扇区将被正常擦除。  我是否得到了正确答案?

    到目前为止、您对故障单元上的该扇区执行了多少个写入/擦除周期?

    谢谢、此致、

    Vamsi

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

    你(们)好,Vamsi。  

    应用程序是否循环等待检查 FSM 就绪? FSM 准备就绪后、您检查了 fmstat 并且它为零、但空白检查失败-正确吗?  --是的

    这仅针对一个扇区发生-其余扇区将被正常擦除。 我也观察到扇区10也是如此,但扇区7、8、9正在擦除。 还不确定其他人。

    到目前为止、您对故障单元上的该扇区执行了多少个写入/擦除周期?

    我可能已经做了一些事情、比如200 - 300最大值

    我怀疑设备是否出现故障。

    谢谢

    Nagesh

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

    Nagesh、

    在同一单元上、您以前能够使用相同的软件成功擦除相同的扇区-正确吗?

    您最近是否进行过任何更改、如更新任何 DCSM 设置等?

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、  

    是的、现在看起来工作正常。  

    如果我使用下面的语句擦除长度为0x8000的扇区8、我对上述实现方案有疑问。 其中  Sector16k_u32length 为 0x1000

    EStatus =(Fapi_StatusType) Fapi_doBlankCheck (u32FlashSector、Sector16k_u32length、&oFlashStatusWord);

    我是否只能将其用于长度为0x8000的扇区,它将擦除整个扇区。

    谢谢、

    Nagesh

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

    Nagesh、

    我想您应该问这个空白检查问题、而不是擦除问题。  擦除命令不将长度作为参数。

    关于空白检查: 对于16KB 扇区、必须使用 Sector16KB_u32length (即0x1000); 对于64KB 扇区、必须使用 Sector64KB_u32length (0x4000)。  不确定为什么  将 Sector16KB_u32length 用于64KB 扇区(扇区8)。   请将 Sector64KB_u32length 用于扇区8、因为它是64KB 扇区。

    请注意、空白检查读取的是32位字-因此、我们提供的是32位长度而不是16位长度。   

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、  

    感谢您的响应、我在使用"TMS320F2838x 闪存 API 版本1.60.00" API 文档的文档中找不到此信息。

    我还有一个观察结果,我计算了在某个扇区已被 CCS 擦除时擦除该扇区所需的时间。 我针对第7、8、9扇区执行了此操作

    擦除扇区7的时间为4.268毫秒

    擦除扇区8的时间为4.268毫秒

    擦除扇区9的时间为 8.536ms

    由于所有扇区的大小相同、我希望即使对于扇区9也需要相同的时间、但我尝试了多次、我始终得到相同的值、扇区9的擦除时间始终是其他扇区的两倍。

    我看到、虽然我没有任何需要在10ms 内刷新外部看门狗的循环、但我觉得在使用 API 时擦除扇区9时代码会卡住、如果我不在 CPU1中擦除该扇区、它可以正常工作。

    我已验证 fmstat 寄存器的值是否为零。

    您能不能向我提供一些我可以查看的指针。

    谢谢、

    Nagesh

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

    您好、Nagesh、

    1) 1) 32位长度:

     在闪存 API 指南的第3.3.1节 Fapi_doBlankCheck()的参数和说明段中都提到了32位长度。   

      SW 报头中使用的名称也清楚地表示32位长度->  Sector16KB_u32length、Sector64KB_u32length。

    我先前与您分享的常见问题解答中也提到了这一点。   

    2)擦除时间: 您观察到的数字远低于我们在数据表中给出的典型规格。  只要按照规格进行擦除、就无需担心。  不同的位(以及相应的扇区)的行为不同。  某些位可能需要更多的时间才能被擦除。  这不是问题。   

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、  

    感谢您的澄清。

    我基本上尝试将 Motorola S2记录格式加载到闪存中、我在该闪存中看到的唯一一点是、我们一次最多可以写入128位(16字节)、但我的 s2记录仅为15字节、因此将保留1个字节。

    我注意到有一个工具串行闪存加载程序、我们是否提供了该工具的源代码、以便我可以比较这里处理的字节、以便我可以使用反馈机制来刷新外部 WD。

    谢谢、

    Nagesh

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

    Nagesh、

    由于原始问题已解决、我建议为您的新问题打开一个新帖子。  这有助于我们在跟踪进度时查看线程标题时轻松理解上下文。  我将关闭此帖子-请打开一个新帖子、我们可以根据需要分配给其他专家。

    谢谢、此致、
    Vamsi