您好,
我正在使用 TMS320F28388D 控制器、目前我有一个10ms 的外部看门狗、我正在尝试擦除扇区7、8和9。 我知道擦除每个扇区大约需要40到50ms。
我已访问 CPU1以进行闪存访问、并且在 CPU1完成其闪存操作之前不会释放访问。 这是否正常?
我能够通过使用状态机逻辑刷新外部看门狗并获得闪存 API 函数的反馈来擦除扇区7。
但扇区8和9 将以擦除扇区7的方式被擦除。 我是否需要在每次扇区擦除操作后释放对 CPU1的闪存访问
谢谢、
Nagesh
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 控制器、目前我有一个10ms 的外部看门狗、我正在尝试擦除扇区7、8和9。 我知道擦除每个扇区大约需要40到50ms。
我已访问 CPU1以进行闪存访问、并且在 CPU1完成其闪存操作之前不会释放访问。 这是否正常?
我能够通过使用状态机逻辑刷新外部看门狗并获得闪存 API 函数的反馈来擦除扇区7。
但扇区8和9 将以擦除扇区7的方式被擦除。 我是否需要在每次扇区擦除操作后释放对 CPU1的闪存访问
谢谢、
Nagesh
您好、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。
应用程序是否循环等待检查 FSM 就绪? FSM 准备就绪后、您检查了 fmstat 并且它为零、但空白检查失败-正确吗? --是的
这仅针对一个扇区发生-其余扇区将被正常擦除。 我也观察到扇区10也是如此,但扇区7、8、9正在擦除。 还不确定其他人。
到目前为止、您对故障单元上的该扇区执行了多少个写入/擦除周期?
我可能已经做了一些事情、比如200 - 300最大值
我怀疑设备是否出现故障。
谢谢
Nagesh
您好、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