发 帖  
原厂入驻New
[问答] PIC32MZ内部闪存我也
73 PIC32 cpu
分享
你好,我想澄清一下每个文档向内部闪存写入的过程。“只有目标地址在没有写保护的页面中时,行字编程才会成功。一旦一行被编程,它必须被擦除,然后其中的任何单词才能被再次编程,即使从擦除的“1”状态改变为“0”状态。我可以写一遍,如果我想再写一遍,我必须擦除整个页面,因为页面是最小的擦除操作。我读错了吗?这就意味着我要跟踪整个页面,这样我就不会擦除当前的程序数据。而且,当我写到内部闪存时,我不会拖延CPU,写相反的库的正确方法是什么?
0
2020-4-1 10:11:44   评论 分享淘帖 邀请回答

相关问题

4个回答
是的,你是正确的,一个页面必须被擦除之前,任何行可以被编程。擦除在大块内存中发生,这是闪存本质的一部分。只要不是a)从高速缓存中运行,就是b)从除试图擦除/编程之外的其他内存中运行,CPU就不会停止。在Flash的情况下,在编程另一半时,程序内存的1/2可以用完。如果你的RAM已经用完了,你可以编程任何闪存。
2020-4-1 10:28:39 评论

举报

拉里,谢谢你的快速反应。我打算设计我的固件只是为了写页面。
2020-4-1 10:42:14 评论

举报

塔霍,拉里,我也读过一句话,就是在擦掉整页之前只写一行。我不这么认为。我使用PIC32MZ的经验是,您可以多次写入同一行,只要在该行中只将比特从1改为零,并且只要在电源周期之间只写入同一行一次。HEM,即使行已经写入之前(曾经在先前的电源周期中)。每当我想把位于RAM中的NVM镜像冲到NVM时,我会这样做。NVM中的前一个化身无效,并写入新行。如果没有更多的空闲行(所有数据位设置)可用,我开始擦除页面。在写入行和/或擦除页之后,我总是重置处理器。我想提出的另一个问题是和谐v2.05NVM驱动程序(在drv_nvm.c中)实际上不能写入行。我已经通过反复地将一个模式写入一行(擦除它的页面)并再次读取该行来验证这一点。支票总是失败,不仅在一个位置上,而且在整个位置上。还没有打开DMA组件(我在SYS_Initialize函数内执行测试,在NVM调用之间调用DRV_NVM_Tasks过程以便能够得到操作的结果),所以这不是问题。检查结果):#defiTEST_NVM#definiTEST_NVVVM检测TEST_NVMunsignTETETETETE_NVM的char全局NVWNVMNVMNNNVMNNVVNNNNNVMBuffer[DRV_NVM_ROW_ROW_SIZE._SIZE];未签名的字符全局读字符全局NVNVVVVMBMBu缓冲器[DRV_NVVVM_NVM_NVM_ROW_ROW_SIZE]DRV_NVVM_NVVM_NVVM_ROW_SIZE];\\\VVVVVVVVVVVVVVVVSYS_MODULE_INIT*)&drvNvmInit;sysObj.drvSDCard=DRV_SDCARD_初始化(DRV_SDCARD_INDEX_DRV_SDCARD_INDEX_0,(SYS_MODU_INIT*)和amp;ddrvSDCardInI);\#ifdefTETEST_NVTEST_NVM DRV_NVMDRVM_NVM_COMVM_COMVM_COMVM_COM_COMVD_SDCARD_SDCARD_SDCARD_初始化_初始化_初始化_初始化_初始化(DRV_DRV_DRV_SDCAR_SDCARD_INDEX_INDEX_INDEX_0_初始化_0,(SYS*);(SYS_SYS_SYS_MODRV_NVM_Erase(driverHandle,&commandHandle,0, 1);(完成)=DRV_NVM_Command.(driverHandle,命令句柄,命令句柄))DRV_NVM_Task(sysObj.drvNVvm){{DRV_NVM_任务(sysObj.sysObj.dsObj.dsObj.dddrvNVNVNvvvvvm)}}}}}}DRV_NVMMMM任务读取(DRV_NVMVMMMMMMMMMMMVVMBMBuffer(globalReadNVNVNVVVVNVVVMBMBMBuffer,全局读取读取NVNVVVVVVVVVVVMBMBuffer)的sizezezeof,0,WriteNVMBuffer=i&0xff;}DRV_NVM_Write(driverHandle,&commandHandle,globalWriteNVMBuffer,0,1);.(DRV_NVM_COMMAND_COMPLETED!= DRV_NVM_Command.(driverHandle,commandHandle)){DRV_NVM_Tasks(sysObj.drvNvm);}DRV_NVM_Read(driverHandle,&commandHandle,globalReadNVMBuffer,0,sizeof(globalReadNVMBuffer))//globalReadNVMBuffer中的行与globalWriteNVMBuffer#endif...中的行有很大不同。新闻是,我修改了NVM驱动程序,使其使用具有4个内部32位数据寄存器的Quad Word方法(128位),而不是使用源地址寄存器。这很好用。从外部,到NVM驱动程序的应用程序接口保持不变:每次调用DRV_NVM_Write都会写入整行,但是在驱动程序内部,在操作期间,行的数量被转换为128位块的数量(对于PIC32MZ2048EFM124,一行写入-2KBytes-is)。翻译成128个四写。
2020-4-1 10:54:21 评论

举报

这里的问题可能与具有ECC的PIC32(和PIC24S)有关。由于ECC,可能无法进行部分写入。对于非ECC闪存,可以多次写入单个擦除。只要是一到零的过渡。
2020-4-1 10:59:52 评论

举报

只有小组成员才能发言,加入小组>>

102个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表