完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛| 
 
你好,我想澄清一下每个文档向内部闪存写入的过程。“只有目标地址在没有写保护的页面中时,行字编程才会成功。一旦一行被编程,它必须被擦除,然后其中的任何单词才能被再次编程,即使从擦除的“1”状态改变为“0”状态。我可以写一遍,如果我想再写一遍,我必须擦除整个页面,因为页面是最小的擦除操作。我读错了吗?这就意味着我要跟踪整个页面,这样我就不会擦除当前的程序数据。而且,当我写到内部闪存时,我不会拖延CPU,写相反的库的正确方法是什么?
 
 | 
|
相关推荐
 
 4个回答 
 
 | 
|
| 
 
是的,你是正确的,一个页面必须被擦除之前,任何行可以被编程。擦除在大块内存中发生,这是闪存本质的一部分。只要不是a)从高速缓存中运行,就是b)从除试图擦除/编程之外的其他内存中运行,CPU就不会停止。在Flash的情况下,在编程另一半时,程序内存的1/2可以用完。如果你的RAM已经用完了,你可以编程任何闪存。
  
 | 
|
| 
 | 
|
| 
 
拉里,谢谢你的快速反应。我打算设计我的固件只是为了写页面。
  
 | 
|
| 
 | 
|
| 
 
塔霍,拉里,我也读过一句话,就是在擦掉整页之前只写一行。我不这么认为。我使用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个四写。
  
 | 
|
| 
 | 
|
| 
 
这里的问题可能与具有ECC的PIC32(和PIC24S)有关。由于ECC,可能无法进行部分写入。对于非ECC闪存,可以多次写入单个擦除。只要是一到零的过渡。
  
 | 
|
| 
 | 
|
只有小组成员才能发言,加入小组>>
5244 浏览 9 评论
2035 浏览 8 评论
1955 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3214 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2261 浏览 5 评论
779浏览 1评论
675浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
601浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
683浏览 0评论
580浏览 0评论
 /7 
            小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 00:32 , Processed in 0.731702 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
        关注我们的微信
         下载发烧友APP
          电子发烧友观察
          版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

                            
淘帖
2013