您好,我们正在使用 CYT2B9,发现 workflash 在擦除后,直接读取会触发异常,只有写入数据后,才能正常读取。我的问题如下。
如果我在写 workflash 的过程中异常掉电或复位,下一次运行时,我怎么才能知道 workflash 的数据是可读取的?如果直接读取可能会触发异常导致。
已解决! 转到解答。
Dear yongs,
我i觉得是不是逻辑搞错了。在Cy_WorkFlashBlankCheck后,如果返回是true,那说明此时是blank,意味着此时读可能会产生错误;如果返回时false,那意味不是blank,就可以读。你可以试下在erase之后进行program,然后再去查看Cy_WorkFlashBlankCheck的返回值。
Hi pengzw,
如果直接去读workflash擦除区域的数据,这在设计中是不允许的。你需要先对被擦除的区域进行program,然后才可以读取,否则可能出现异常。TRM中有对此问题提出方法,参考以下
如果在写work flash的过程中出现异常,建议重新擦除再进行写操作。
您好,按照TRM中对应的方法,在擦除work falsh(未进行写操作)的环境下,读检查work flash的状态,但是这个函数的返回值一直是true(SUCCESS),还是无法区分work flash的数据是否可读。
请问在work flash 被擦除未写入数据时,Cy_Flash_BlankCheck的函数返回值为什么一直是CY_FLASH_DRV_SUCCESS。还有没有其他途径可以知道work flash不可读了。
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。
您好,
首先,很感谢您的回复。这个例子我也看了,这个是按照擦除->写入->读取的这个操作。但是我们对work flash的操作在每次MCU上电后都会去读取workflash的数据,进行数据有效性判断,如果无效再重新擦除->写入。所以要求work flash擦除后未写入的状态下,也可以能读取work flash的数据(或者至少要返回work flash此时为不可读取的状态)。
下面是我按照贵司的work flash example,写的一段测试程序。
Hi yongs,
为何你的Cy_Flash_BlankCheck函数一直返回true,是因为您用了non-blocking mode,请看下面的解释。
还请参考Blocking mode的代码\T2G_Sample_Driver_Library_7.5.0\tviibe2m\src\examples\flash\work\cm0_cm4。
您好,
按照Blocking mode的代码,修改成了blocking mode,增加了测试代码,发现执行Cy_WorkFlashBlankCheck还是会返回true,接下来读取work flash数据就触发了异常。
Dear yongs,
我i觉得是不是逻辑搞错了。在Cy_WorkFlashBlankCheck后,如果返回是true,那说明此时是blank,意味着此时读可能会产生错误;如果返回时false,那意味不是blank,就可以读。你可以试下在erase之后进行program,然后再去查看Cy_WorkFlashBlankCheck的返回值。
您好,
非常感谢您的帮助。的确是这样的,返回true代表的是当前是不可读的状态。目前我还在进一步的调试中,感谢您的答复。