① AVR单片机中如何写flash,目前能够读出来,就是不知道怎么将变量写到flash任意地址中
如果是在单片机程序中写Flash,这是一个很复杂的过程,
Atmega单片机
Flash分为两个区:可读写区(RWW),不可读写区(NRWW)
RWW:
read-while-write,也就是常说的
bootloader
区,
NRWW:no-read-while-write
一般的应用程序是在NRWW区的,也就是说不可以对flash进行操作,但是你可以写一段
程序下载
到RWW区,然后这一段的程序可能对整个Flash进行读写操作,所以你要实现写Flash的话,你的应用程序必须跳转到RWW区,将要写的地址传给它,然后由该部分的程序去完成操作,然后再跳回你的应用程序
② 单片机对flash的读写问题
stc单片机中的flash是程序存储器 如果你要保存数据可以保存到EEPROM中,stc中有2K~10几K不等,至于到底STC中的flash中能否用于保存除程序之外的数据,没有研究过.......
③ 单片机中,对Flash的读写与外部RAM/EEPROM读写有什么不一样
FLASH是程序存储器,严格来讲是不允许MCU写的,但是出于某些功能有的单片机允许MCU写,但是为了安全写FLASH会有一种相对复杂的操作。EEPROM是电可擦写存储器,他相对写FLASH来说比较简单,不同厂商的单片机EEPROM的操作也会有所不同。前面两种都属于间接寻址,最后RAM是最简单的读写,可以直接寻址操作的。
④ 单片机读写flash为什么必须是偶数地址
如果是操作16位总线,那么访问时必须按偶数地址对齐。
否则就不一定受这样的限制。例如对串行Flash进行读操作是可以对奇地址进行单字节读取的。
⑤ 新手请问师傅们我该如何通过spi读写这个单片机内FLASH
按写的这个顺序来操作啊。
先在偏移02h的寄存器写好地址、在偏移03h的寄存器写好数据,
然后向04h、05h写入A5h、C3h解开写保护,
接着向00h依次写入58A9h和A958h解锁FLASH操作,
然后改写01h寄存器的第4位到第2位,写入FLASH操作命令,并将第0位置1,启动操作,
回读01h寄存器直到第0位变成0,表明操作完成,
⑥ 51单片机如何读写内置的Flash
写进去还是很简单的,用stc-isp一下子就写进去了,要读出来就麻烦了,写进去的时候已经加密了,很难得反编译的。
⑦ 如何用单片机读写FLASH
W25X_16吗?SPI接口,要看你是何种单 片机,有硬件SPI接口和没有配件SPI接口的区别在于读写一个字节的方法不一样,其余上层函数是一样的。如果是STM32单片机,野火和正点原子例程里的都有完整的源文件。
⑧ 读写flash和eprom的区别
FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同。FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,EEPROM在运行中可以被修改,而FLASH在运行时不能修改,EEPROM可以存储一些修改的参数,Flash中存储程序代码和不需要修改的数据,所谓的Flash是用来形容整个存储单元的内容可以一次性擦除。所以,理论上凡是具备这样特征的存储器都可以称为Flash memory。EEPROM里面也分FF-EEPROM和FLASH EEPROM的,现在大家所讲的Flash memory实际上分为两大类,一类是Floating Gate Debice,一类是Charge Trapping Debice,这里的分类标准主要是program与crase的机制不同。
一:FLASH和EEPROM的区别
1:相同点是两者都能掉电存储数据
2:不同点是:
A:FALSH写入时间长,EEPROM写入时间短。
B:FLASH擦写次数少(10000次),EEPROM次数多(1000000次)
二:单片机的数据存储器不能用FLASH,因为:
1:FLASH有一定的擦除,写入次数,一般的单片机的FLASH擦除写入次数的标称值是10000次。
2:FLASH写入数据需要比较长的时间,大约需要4-6ms,而且写FLASH需要加上9V的高压,麻烦。
三:至于EEPROM,可以作为数据存储器,但是单片机如atmegal28,一般用RAM作为数据存储器,因为EEPROM工艺复杂,成本高,适合于存储掉电保护的数据,而这类数据往往不需要太多,所以一般的单片机都没在内部集成EEPROM,需要的时候可以让单片机外挂24C01一类的串行EEPROM。
区别:
1、 FLASH按扇区操作,EEPROM则按字节操作
2、 FLASH写入时间长,EEPROM写入时间短
3、 FLASH擦写次数少(10000次),EEPROM次数多(1000000次)
4、 FLASH的电路结构简单,成本低,EEPROM工艺复杂,成本高
⑨ 如何用单片机读写FLASH
就是这段程序了。我一直用的。不懂的可以找我
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP 0X82// SYSCLK<24M
#define IAP_ADDRESS 0X0000
void IAP_Disable()//Make MCU if safe state
{
//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
IAP_CONTR = 0; //关闭IAP 功能
IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用
IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
IAP_ADDRH = 0x80; // ??? 0x80 ????
IAP_ADDRL = 0;
}
//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
uchar Byte_Read(uint addr)
{
IAP_CONTR=ENABLE_IAP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD=CMD_READ; //IAP/ISP/EEPROM 字节读命令
IAP_ADDRL=addr; //设置目标单元地址的高8 位地址
IAP_ADDRH=addr>>8; //设置目标单元地址的低8 位地址
IAP_TRIG=0X5A;//先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG=0XA5;//送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
IAP_Disable();//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态
return IAP_DATA;
}
//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void Byte_Program(uint addr,uchar dat)
{
IAP_CONTR=ENABLE_IAP;//打开 IAP 功能, 设置Flash 操作等待时间
IAP_CMD=CMD_PROGRAM;//IAP/ISP/EEPROM 字节编程命令
IAP_ADDRL=addr;//设置目标单元地址的高8 位地址
IAP_ADDRH=addr>>8; //设置目标单元地址的低8 位地址
IAP_DATA=dat;//要编程的数据先送进IAP_DATA 寄存器
IAP_TRIG=0X5A;//先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG=0XA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
IAP_Disable();//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
}
void Sector_Erase(uint addr) //擦除扇区, 入口:DPTR = 扇区地址
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
IAP_Disable();
}