找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1512|回复: 13
收起左侧

EEPROM的扇区操作是用IAP好还是ISP好

[复制链接]
ID:95375 发表于 2022-8-10 12:29 | 显示全部楼层 |阅读模式


/*----------------------------
扇区擦除
----------------------------*/
void IapEraseSector(WORD addr)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_ERASE;            //设置IAP命令
    IAP_ADDRL = addr;               //设置IAP低地址
    IAP_ADDRH = addr >> 8;          //设置IAP高地址
    IAP_TRIG = 0x5a;                //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                //写触发命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();
}


/*----------------------------





//========================================================================
// 函数: void        EEPROM_SectorErase(u16 EE_address)
// 描述: 擦除一个扇区.
// 参数: EE_address:  要擦除的EEPROM的扇区中的一个字节地址.
// 返回: none.
// 版本: V1.0, 2014-6-30
//========================================================================
void        EEPROM_SectorErase(u16 EE_address)
{
        ISP_ENABLE();                                                //设置等待时间,允许ISP/IAP操作,送一次就够
        ISP_ERASE();                                                //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令
                                                                                //只有扇区擦除,没有字节擦除,512字节/扇区。
                                                                                //扇区中任意一个字节地址都是扇区地址。
        ISP_ADDRH = EE_address / 256;                //送扇区地址高字节(地址需要改变时才需重新送地址)
        ISP_ADDRL = EE_address % 256;                //送扇区地址低字节
        EEPROM_Trig();                                                //触发EEPROM操作
        DisableEEPROM();                                        //禁止EEPROM操作
}



上面这两个扇区擦除函数都是stc-isp给出的,对于IAP和ISP在网看查了好久,还是没搞清楚它们使用的区别,请大神们指点一下,谢谢!


比如我想做一个瓦力机器人,每块芯片都是他的一个大脑记忆细胞,所以有大量的擦除读写操作,那么请问上面两种函数哪种更适合呢?
回复

使用道具 举报

ID:624769 发表于 2022-8-10 14:18 来自手机 | 显示全部楼层
ISP和iap,对应的sfr寄存器地址不同,不是哪个好,而是为了区别不同的地址。
回复

使用道具 举报

ID:161164 发表于 2022-8-10 15:12 | 显示全部楼层
在STC-ISP的EEPROM范例程序里从89看到8H
全都是用IAP
ISP的程序从哪来的?
回复

使用道具 举报

ID:624769 发表于 2022-8-10 15:45 来自手机 | 显示全部楼层
lkc8210 发表于 2022-8-10 15:12
在STC-ISP的EEPROM范例程序里从89看到8H
全都是用IAP
ISP的程序从哪来的?

89的手册,寄存器是ISP_????,头文件也是,89,90的寄存器是ISP_xxxx,15,8的头文件是iapxxxx,指向的地址是不同的。
回复

使用道具 举报

ID:123289 发表于 2022-8-10 16:42 | 显示全部楼层
以51单片机为例:其存储器分为三块。
1、程序存储器:可寻址空间64K,用于存放用户的程序,CPU取指令只能在此空间。
2、外部分扩展存储器:可寻址空间64K,用于存放数据,CPU无法在此空间取指令。
3、内部分RAM:256字节。这里略去功能介绍。
问题来了:如果用户弄了2K的EEPROM,如何让它能被CPU寻址(访问)到呢?
有两种方案:
1、程序一般用不了64K的全部空间,于是在【程序存储器】中挖出2K的空间,将它做成EEPROM。这是STC一种做法。例如:IAP15Fxxxx型号芯片。
由于程序存储器通常只能在烧录时写入,而EEPROM却需要在程序运行中,由程序读、写或擦除,为此STC又特意开发了一套写、擦它的方式。但读取仍可以用通用的指令进行,如:MOVC A, @A+DPTR。
这种方案好处是:无需单独再做EEPROM,直接利用【程序存储器】的FLASH空间当作EEPROM用,且大小空间比较自由灵活,用不完的FALSH空间可以随便用。
这里有一个风险:比如:0000-11FFH放的是程序,如果你把此区域当作是EEPROM,对它进行写、擦操作,则程序就被破坏掉了。所以这个方案需要你知道程度占多长?哪些区域是程序用不到的地方。
不过风险中,也有一个重要的好处:可以用程序,修改自己的程序!例如,程序在运行中就能进行自我升级:擦除原来的程序重新写入新的程序!这是高级用法,就不在此介绍了。
2、在【外部分扩展存储器】中挖出2K的空间,将它做成EEPROM,这是常用的方式,不多介绍了。
楼主用C语言写程序,两种方式无所谓好坏之分。但必须知道EEPROM的数据是在哪个区域,因为你在定义一个EEPROM中的数据变量时,需要用到。
如果不考虑在线或远程升级程序,建议用第2种方式的EEPROM芯片,需要考虑的问题少,不易出错。
回复

使用道具 举报

ID:161164 发表于 2022-8-10 17:04 | 显示全部楼层
188610329 发表于 2022-8-10 15:45
89的手册,寄存器是ISP_????,头文件也是,89,90的寄存器是ISP_xxxx,15,8的头文件是iapxxxx,指向的地 ...

???
2022-08-10_170254.png 2022-08-10_170301.png
回复

使用道具 举报

ID:95375 发表于 2022-8-10 18:46 | 显示全部楼层
188610329 发表于 2022-8-10 14:18
ISP和iap,对应的sfr寄存器地址不同,不是哪个好,而是为了区别不同的地址。

什么不同的地址呢?是不是说这两个只是两种不同的方法,用哪种都行?

     型号        大小   扇区数  开始地址  结束地址   MOVC读偏移地址
STC15F/L2K32S2   29K    58扇区  0x0000  ~  0x73FF        0x8000

比如要读写STC15F2k32s2,用哪种方法都一样是吧
回复

使用道具 举报

ID:95375 发表于 2022-8-10 18:52 | 显示全部楼层
lkc8210 发表于 2022-8-10 15:12
在STC-ISP的EEPROM范例程序里从89看到8H
全都是用IAP
ISP的程序从哪来的?

捕获.PNG 在stc-isp范例程序里的实验箱4程序包里范例14有



回复

使用道具 举报

ID:624769 发表于 2022-8-10 20:39 | 显示全部楼层

STC手册   89系列  第 270 页。
http://www.51hei.com/bbs/dpj-82368-1.html


看到如下图:
STC89_Eeprom.png


注意,红框位置的  地址。

STC15 系列手册   第 841 页。

看到如下图:
STC15_Eeprom.png

注意,红框位置的 地址。

由于,地址本身不同,所以  一个用 ISP 命名, 一个用 IAP命名, 防止因为用错头文件,而出了问题也不知道问题在哪里。
即,虽然是同一个操作方式,但是,由于寄存器地址不同,所以给了不同的名字。目的是为了区分 版本差别。
同理, T2 定时器, 89系列名字 叫 TL2, TH2,  15系列里面叫  T2L, T2H,  都是 定时器 初值定义, 但是寄存器地址 变了,所以,名字就要变。
回复

使用道具 举报

ID:624769 发表于 2022-8-10 20:45 | 显示全部楼层
liyago 发表于 2022-8-10 18:46
什么不同的地址呢?是不是说这两个只是两种不同的方法,用哪种都行?

     型号        大小   扇区数 ...

你用不用 头文件的?

你打开  STC15.H     这个头文件
你只能找到:
sfr IAP_CONTR = 0xC7;
而找不到:
sfr ISP_CONTR = ????

反过来,你打开  STC89C5xRC.H 这个头文件
你只能找到:
sfr ISP_CONTR = 0xE7;
而找不到:
sfr IAP_CONTR = ????

这就是 STC的改版,地址不一样了,名字也不一样,明白了??
没有哪个更好,因为 一个单片机里 只有其中一个。

回复

使用道具 举报

ID:401564 发表于 2022-8-11 13:47 | 显示全部楼层
我感觉没有必要纠结什么的吧
数据手册上有什么,就用什么
如果想知道,可以对比一下擦除时间之类的区别
回复

使用道具 举报

ID:95375 发表于 2022-8-14 23:12 | 显示全部楼层
188610329 发表于 2022-8-10 20:45
你用不用 头文件的?

你打开  STC15.H     这个头文件

明白了,就是头文件里没定义想用都没得用
回复

使用道具 举报

ID:95375 发表于 2022-8-14 23:14 | 显示全部楼层
yzwzfyz 发表于 2022-8-10 16:42
以51单片机为例:其存储器分为三块。
1、程序存储器:可寻址空间64K,用于存放用户的程序,CPU取指令只能 ...

已明白,谢谢!
回复

使用道具 举报

ID:95375 发表于 2022-8-14 23:15 | 显示全部楼层
188610329 发表于 2022-8-10 20:39
STC手册   89系列  第 270 页。

谢谢,就是硬件不同而不同。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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