❶ 如何用单片机读写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();
}
❷ 单片机是直接从Flash里读取指令的吗
单片机是直接从Flash里读取指令,好多单片机的程序存储器FLASH比较大,而SRAM则要小得多,不大可能把程序先装入SRAM中再执行,有的单片机虽可以预取指令,但这是属于内部结构上的特点,编程人员并不可控.现今多数51和AVR单片机都有内部RAM和片上RAM,相当于CPU的一级缓存和二级缓存,但由于在多数应用中它们就没有外扩RAM,也就没有人明确提出什么是单片机cache的定义,一般笼统地把内部RAM和片上RAM合称为内存。
❸ 单片机中,对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,表明操作完成,
❻ 单片机中Flash是什么意思
FLASH闪存 闪存的英文名称是"Flash Memory",一般简称为"Flash",它属于内存器件的一种,是一种不挥发性( Non-Volatile )内存。闪存的物理特性与常见的内存有根本性的差异:目前各类 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停止电流供应内存中的数据便无法保持,因此每次电脑开机都需要把数据重新载入内存;闪存在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。