求教PIC16F1939单片机Flash擦除问题
如题void Flash_Erase(unsigned int address)
{
while(WR);
EEADR = address;
CFGS = 0;
EEPGD = 1;
FREE = 1;
WREN = 1;
GIE = 0;
EECON2 = 0x55;
EECON2 = 0xaa;
WR = 1;
asm("nop");
asm("nop");
while(FREE);
GIE = 1;
WREN = 0;
while(WR);
}
在程序开始的控制字里面设置000H至1FFFH写保护,而2000H至3FFFH可以由EECON控制修改
小弟的意思是把2000H至3FFFH的空间当成EEPROM存放数据
现在的情况是flash的读写函数都写好了,且工作正常,唯一不足的地方就是这个flash的擦除函数,比如我在函数中调用Flash_Erase(0x2000),发现地址0x2000H以后的数据全部被擦除掉了,多次调试之后,仍没有解决这个问题,请问神坛里有没有哪位大虾写过这方面的程序,可否指教一下,不胜感激! 为什么不用片内Eeprom HadesHe 发表于 2012-12-23 18:56 static/image/common/back.gif
为什么不用片内Eeprom
感谢您的回复,我现在的数据有5K多,这个片子Flash有16K,留8K给程序,8K打算用来存数据,eeprom只有2K,不够,呵呵。可现在是flash只要擦除任意一个地址,全部被擦除掉,不知道怎么个问题~~ FLASH又不是EEPROM,擦除的话,肯定不可能按照字节擦除的,肯定是按照PAGE或者SECTOR来擦除的,所以也许这是导致这个情况的原因 honami520 发表于 2012-12-23 19:01 static/image/common/back.gif
FLASH又不是EEPROM,擦除的话,肯定不可能按照字节擦除的,肯定是按照PAGE或者SECTOR来擦除的,所以也许这 ...
您好,是这样的,比如我靠mplab把片子的flash擦除干净,然后在2000H至21E0H之间写入数据,任意擦除一个位置,并且位于2000H地址之后,发现2000H至21E0H之间的数据全被擦除{:sad:} 除了ST的单片机,还真没见过其它能按字节擦除的MCU... 本帖最后由 w282529350 于 2012-12-23 19:15 编辑
snoopyzz 发表于 2012-12-23 19:05 static/image/common/back.gif
除了ST的单片机,还真没见过其它能按字节擦除的MCU...
您好,这是它手册的一段截图,我已经看了不下十遍了,至今没弄懂它所谓的按行擦除.....
估计是你的地址末尾5位不全是0的原故? 导致整片擦除了?
按理这个row可以是32字擦除的, 写入地址时估计要保证低5位为0 snoopyzz 发表于 2012-12-23 19:29 static/image/common/back.gif
估计是你的地址末尾5位不全是0的原故? 导致整片擦除了?
按理这个row可以是32字擦除的, 写入地址时估计要 ...
谢谢您的帮助,我再理解一下,呵呵,没办法,天生愚笨。。。 谢谢楼上诸位的帮忙,问题已经解决,我把程序中GIE=0;关中断的语句提到最前面就解决了
void Flash_Erase(unsigned int address)
{
GIE = 0;
while(WR);
EEADR = address;
CFGS = 0;
EEPGD = 1;
FREE = 1;
WREN = 1;
EECON2 = 0x55;
EECON2 = 0xaa;
WR = 1;
asm("nop");
asm("nop");
while(FREE);
GIE = 1;
WREN = 0;
while(WR);
} 哎 楼主跟我搞的一样嘛
问下 楼主你这个用BOOTLOADER来修改数据了吗?
PIC内部的FLASH没法按字节来擦除、存储数据
但是软件可以帮忙做到的
感觉还是可以跟EEPROM样的来使用的 yklstudent 发表于 2012-12-23 22:17 static/image/common/back.gif
哎 楼主跟我搞的一样嘛
问下 楼主你这个用BOOTLOADER来修改数据了吗?
PIC内部的FLASH没法按字节来擦除、存 ...
我第一次用pic单片机,不怎么了解,呵呵
这个pic的程序存储器不是有16K么,我一半用来放程序,一半用来放数据
我都是在程序里操作flash的,比如说擦除,读写什么的~~,你说的那些不懂哎,呵呵 w282529350 发表于 2012-12-24 08:54 static/image/common/back.gif
我第一次用pic单片机,不怎么了解,呵呵
这个pic的程序存储器不是有16K么,我一半用来放程序,一半用来放 ...
我的意思就是不是在运用程序部分来进行修改参数(即擦除、读写、修改FLASH)
而是FLASH中,分出一个FLASH部分,用来写BOOTLOADER程序;可以用来在线IAP下载运用程序和修改运用程序部分的参数
我现在就是这个BOOTLOADER写不起来
不知道具体怎么做,无从下手。
对PIC的BOOTLOADER还是很不了解 yklstudent 发表于 2012-12-24 09:19 static/image/common/back.gif
我的意思就是不是在运用程序部分来进行修改参数(即擦除、读写、修改FLASH)
而是FLASH中,分出一个FLASH ...
额 这些没有接触过,感觉bootloader很高端的样子,呵呵,就昨天的一个擦除就把我搞惨了,参考的网上的程序,看他们GIE=0的位置写的很随意,我也就没在意,哎 以后还得严格按照它们的手册来写{:dizzy:} 学习了,忙完这段时间试试。以前不太考虑这个问题,因为有EEROM
页:
[1]