CYT2B9如何查询 workflash 可读?

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,我们正在使用 CYT2B9,发现 workflash 在擦除后,直接读取会触发异常,只有写入数据后,才能正常读取。我的问题如下。

如果我在写 workflash 的过程中异常掉电或复位,下一次运行时,我怎么才能知道 workflash 的数据是可读取的?如果直接读取可能会触发异常导致。

0 点赞
1 解答
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Dear yongs,

我i觉得是不是逻辑搞错了。在Cy_WorkFlashBlankCheck后,如果返回是true,那说明此时是blank,意味着此时读可能会产生错误;如果返回时false,那意味不是blank,就可以读。你可以试下在erase之后进行program,然后再去查看Cy_WorkFlashBlankCheck的返回值。

在原帖中查看解决方案

0 点赞
9 回复数
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

如果直接去读workflash擦除区域的数据,这在设计中是不允许的。你需要先对被擦除的区域进行program,然后才可以读取,否则可能出现异常。TRM中有对此问题提出方法,参考以下

JimmyLiu_0-1661132561039.png

如果在写work flash的过程中出现异常,建议重新擦除再进行写操作。

0 点赞
yongs
Level 1
Level 1
First like given 10 sign-ins 5 sign-ins

您好,按照TRM中对应的方法,在擦除work falsh(未进行写操作)的环境下,读检查work flash的状态,但是这个函数的返回值一直是true(SUCCESS),还是无法区分work flash的数据是否可读。

请问在work flash 被擦除未写入数据时,Cy_Flash_BlankCheck的函数返回值为什么一直是CY_FLASH_DRV_SUCCESS。还有没有其他途径可以知道work flash不可读了。

yongs_1-1661140068012.png

 

 

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi yongs,

从你的截图看起来你指定读取的workflash区域并没有被erase或者已经被写入数据。您可以参考我司SDL中的sample code来做erasing/writing/verifying a whole sector for non-blocking mode. sample code在\T2G_Sample_Driver_Library_7.5.0\tviibe2m\src\examples\flash\work\cm0_cm4_non_blocking。

0 点赞
yongs
Level 1
Level 1
First like given 10 sign-ins 5 sign-ins

您好,

         首先,很感谢您的回复。这个例子我也看了,这个是按照擦除->写入->读取的这个操作。但是我们对work flash的操作在每次MCU上电后都会去读取workflash的数据,进行数据有效性判断,如果无效再重新擦除->写入。所以要求work flash擦除后未写入的状态下,也可以能读取work flash的数据(或者至少要返回work flash此时为不可读取的状态)。

       下面是我按照贵司的work flash example,写的一段测试程序。

yongs_0-1661148594832.png

 

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi yongs,

为何你的Cy_Flash_BlankCheck函数一直返回true,是因为您用了non-blocking mode,请看下面的解释。

JimmyLiu_0-1661147533018.png

还请参考Blocking mode的代码\T2G_Sample_Driver_Library_7.5.0\tviibe2m\src\examples\flash\work\cm0_cm4。

0 点赞
yongs
Level 1
Level 1
First like given 10 sign-ins 5 sign-ins

您好,

        按照Blocking mode的代码,修改成了blocking mode,增加了测试代码,发现执行Cy_WorkFlashBlankCheck还是会返回true,接下来读取work flash数据就触发了异常。

       

yongs_0-1661150929990.png

 

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Dear yongs,

我i觉得是不是逻辑搞错了。在Cy_WorkFlashBlankCheck后,如果返回是true,那说明此时是blank,意味着此时读可能会产生错误;如果返回时false,那意味不是blank,就可以读。你可以试下在erase之后进行program,然后再去查看Cy_WorkFlashBlankCheck的返回值。

0 点赞
yongs
Level 1
Level 1
First like given 10 sign-ins 5 sign-ins

您好,

        非常感谢您的帮助。的确是这样的,返回true代表的是当前是不可读的状态。目前我还在进一步的调试中,感谢您的答复。

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi yongs,

很高兴能帮助到你。我会把这条thread关掉,如果您有新的需求,可以新建thread,谢谢。

0 点赞