读取EEPROM需要多少时间,AVRMEGA8芯片内部的EEPROM芯片一直不断的写最快多长时间
来源:整理 编辑:亚灵电子网 2023-01-30 09:51:00
1,AVRMEGA8芯片内部的EEPROM芯片一直不断的写最快多长时间

2,STC 内部 EEPROM 读写时间
我来闲聊一句~宏晶的51内核微控制器采用精简指令集,时钟跟8051不同,当然为了向上兼容,也可以设置成传统8051的12分频模式,具体请查阅宏晶的相关数据手册。

3,STC12C4052 EEPROM问题

4,EEPROM数据扫描时间
简称:EEPROM 标准:Electrically Erasable Programmable Read-Only Memory 中文:电子抹除式只读存储器 非易失性存储器。电源撤除后,储存的信息(Data)依然存在,在特殊管脚上施加电压,同时输出相应命令,就可以擦除内部数据。典型应用于如电视机、空调中,存储用户设置的参数。 {2IoG$[jerryer这种存储器支持再线修改数据,每次写数据之前,必须保证书写单元被擦除干净,写一个数据的大约时间在2-10ms之间。支持单字节单元擦除功能。
5,谁能告诉我AT24C02 EEPROM的擦除和读写时间分别是多少
6,stc单片机读写EEPROM我要写一个数组数组很大怎么样能很快的一下就
有几点建议:1.一般的EEPROM有两种接口:I2C和SPI,并行的反正我没用过。如果是I2C一般情况下有100KHz和400KHz,当然还有1MHz甚至更高的(例如Ramtron的FM系列铁电存储器),所以只要可能,要选择通讯速率尽量高的EEPROM,或者在不影响通讯成功率的情况下,尽量提高一些通讯速度。方法一适当减小上拉电阻值以提高上下沿变化速度;二是优化底层的驱动代码,尽量做到能不延时的不延时(通过查看汇编代码仔细计算时钟数)。2.由于EEPROM的共性,一次写操作完成最后要延时5ms左右让数据写入单元中,但是不是每写一个字节都要延时呢?不是的。EEPROM可以连续写,例如16字节(具体大小要看你的EEPROM型号),这样就可以写入16字节后只延时5ms,不但节省了15个START、STOP和写地址,还节省了15个5ms,大大加快了写的过程!3.虽然EEPROM读可以不需要延时,但通过连续读,也可以省去一些I2C总线寻址的时间。4.如果你是想写进EEPROM后立刻读出,则可能通过小间隔时间连续测试I2C设备是否就绪的方法,而不是延时的方法判断EEPROM是否已经写入的芯片,从而又节省一些时间。5.由于连续写和连续读,所以需要一定量的缓冲区,根据你的单片机RAM、数据量、EEPROM可以连续读、写的大小合理地选择缓冲区。另外.如果你是用STC单片机内部的EEPROM功能,这就不是太好处理了。它实际上是用它内部的Flash来模拟EEPROM,所以带有一些FLASH的影子在里面(例如有扇区擦除,只能将1写成0等)。这方面要快速读写可以参照STC的数据表中例程说明进行优化。
7,单片机EEPROM存储器读写周期问题
两者都是非易失性存储器 flash的全称是flash eeprom,但跟常规eeprom的操作方法不同 flash和eeprom的最大区别是flash按扇区操作,eeprom则按字节操作,二者寻址方法不同,存储单元的结构也不同,flash的电路结构较简单,同样容量占芯片面积较小,成本自然比eeprom低,因而适合用作程序存储器,eeprom则更多的用作非易失的数据存储器。当然用flash做数据存储器也行,但操作比eeprom麻烦的多,所以更“人性化”的mcu设计会集成flash和eeprom两种非易失性存储器,而廉价型设计往往只有flash,早期可电擦写型mcu则都是eeprm结构,现在已基本上停产了。 一般来说eeprom中存放开机是用到的参数,不可丢失的变量等,而flash中会存放程序,记录文件等。
8,请教一个关于片内EEPROM的问题
片外eeprom调用rom里的程序 这种说法不准确。正确的来说,程序都是由处理器来调用的,片内也好片外也好,它们都是统一编址的。流程是,处理器根据程序地址即pc值读出一条指令,处理器再根据指令做相应操作。ea如果接高的话,地址小4k是片内地址,从片内读,大于4k的就是片外地址了,从片外读。ea接地,就完全从片外来读。调用及跳转,都是通过改变pc地来实现的,pc值改到哪里,处理器下一次就从哪里读指令。片外eeprom可不可以直接调用rom里的程序 ,就是片外中的指令中,call 或jmp 这条执行后,pc改成rom里的地址了。下一次,处理器就用这个pc去读取片内的指令了。写片外eeprom,看线怎么接的,地址都是跟接线有关的。你按一般的片外 ram来接,它的地址就跟一般的ram一样。不过,它写入数据是需要写入时间的,写完一个,再写下一个都等待一定的时间。对于单片机而言,如果有片内EEPROM,就可以通过程序直接读写EEPROM,其内容掉电不丢失,省去了外接EEPROM的麻烦。
9,stc单片机读写EEPROM我要写一个数组数组很大怎么样能很快
有几点建议:1.一般的EEPROM有两种接口:I2C和SPI,并行的反正我没用过。如果是I2C一般情况下有100KHz和400KHz,当然还有1MHz甚至更高的(例如Ramtron的FM系列铁电存储器),所以只要可能,要选择通讯速率尽量高的EEPROM,或者在不影响通讯成功率的情况下,尽量提高一些通讯速度。方法一适当减小上拉电阻值以提高上下沿变化速度;二是优化底层的驱动代码,尽量做到能不延时的不延时(通过查看汇编代码仔细计算时钟数)。2.由于EEPROM的共性,一次写操作完成最后要延时5ms左右让数据写入单元中,但是不是每写一个字节都要延时呢?不是的。EEPROM可以连续写,例如16字节(具体大小要看你的EEPROM型号),这样就可以写入16字节后只延时5ms,不但节省了15个START、STOP和写地址,还节省了15个5ms,大大加快了写的过程!3.虽然EEPROM读可以不需要延时,但通过连续读,也可以省去一些I2C总线寻址的时间。4.如果你是想写进EEPROM后立刻读出,则可能通过小间隔时间连续测试I2C设备是否就绪的方法,而不是延时的方法判断EEPROM是否已经写入的芯片,从而又节省一些时间。5.由于连续写和连续读,所以需要一定量的缓冲区,根据你的单片机RAM、数据量、EEPROM可以连续读、写的大小合理地选择缓冲区。另外.如果你是用STC单片机内部的EEPROM功能,这就不是太好处理了。它实际上是用它内部的Flash来模拟EEPROM,所以带有一些FLASH的影子在里面(例如有扇区擦除,只能将1写成0等)。这方面要快速读写可以参照STC的数据表中例程说明进行优化。数组很大?多大。很快?要求多快? 具体问题具体分析。读数值,其实只有几种方式,一种就查表,一种就用指针,用指针会快点,你可以将这个很大的数组变为一个二维或三维或多维数组,然后建立一个指针数组来对应相关的地址,只要你很快地计算出指针的地址,立刻就读出来了.
10,六位数存入EEPROM的问题
#include<STC12C5A> //注意此处调用的为STC提供的STC12C5A系列库文件#include<intrins.h>typedef unsigned int WORD;typedef unsigned char BYTE;void EEPROM_Delay(BYTE n) WORD x; while(n--) x=0; while(++x); } }void EEPROM_Idle(void) //使MCU处于一个安全的状态 IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0x80; IAP_ADDRL = 0;}BYTE EEPROM_ReadByte(WORD addr) //从EEPROM读一Byte数据 (地址) BYTE dat; IAP_CONTR = 0x81; //XTAL<=20M IAP_CMD = 1; //读一字节 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; IAP_TRIG = 0x5a; IAP_TRIG = 0xa5; _nop_(); dat = IAP_DATA; //FLASH 数据寄存器 EEPROM_Idle(); return dat;}void EEPROM_ProgramByte(WORD addr,BYTE dat) //写数据到扇区, (地址 ,数据) IAP_CONTR = 0x81; //设置等待时间 IAP_CMD = 2; //设置EEPROM程序指令 IAP_ADDRL = addr; //设置EEPROM地址低位 IAP_ADDRH = addr>>8; //设置EEPROM地址高位 IAP_DATA = dat; //写EEPROM数据 IAP_TRIG = 0x5a; //发送触发命令1 IAP_TRIG = 0xa5; //发送触发命令2 _nop_(); EEPROM_Idle(); } void EEPROM_EraseSector(WORD addr) //抹去整个扇区 (输入扇区地址) IAP_CONTR = 0x81; //打开EEPROM函数,设置延时 IAP_CMD = 3; //设置上去抹去命令 IAP_ADDRL = addr; //设置地址低位 IAP_ADDRH = addr>>8; //设置地址高位 IAP_TRIG = 0x5a; //写命令 IAP_TRIG = 0xa5; _nop_(); EEPROM_Idle();}/****************************向扇区储存数据(123456)********************************/char EEPROM_WriteSTA(void) //储存成功返回1(会删除以前整个扇区储存数的据)long int x=0,sta=123456; //测试数据为123456 char a[4],i; EEPROM_EraseSector(0x0000); //抹去1扇区数据EEPROM_Delay(10); a[0]=char((sta>>24)&&0xF); //最高位a[1]=char((sta>>16)&&0xF); a[2]=char((sta>>8)&&0xF); a[3]=char(sta&&0xF); //最低位EEPROM_ProgramByte(0x0000,a[0]); //储存数据EEPROM_ProgramByte(0x0001,a[1]); EEPROM_ProgramByte(0x0002,a[2]); EEPROM_ProgramByte(0x0003,a[3]); EEPROM_Delay(10); a[0]=EEPROM_ReadByte(0x0000); //读数据a[1]=EEPROM_ReadByte(0x0001); a[2]=EEPROM_ReadByte(0x0002); a[3]=EEPROM_ReadByte(0x0003); x||=(long int a[0])<<24; //数据校验x||=(long int a[1])<<16;x||=(long int a[2])<<8;x||=(long int a[0]);if(x==sta) i=1;else i=0;return i;}//呵呵,个人观点。储存数据这段没有验证,其余程序已验证,仅供参考void read(uchar sq,unsigned char * eadd,unsigned char * nbadd,unsigned char size)unsigned char i = size;ea = 0;while(i--) iap_addrh = sq; //0x10=使用第9扇区 iap_addrl = (char)eadd; iap_contr = 0x80|iap_wait_time; //11m iap_cmd = iap_byte_read; //读命令 iap_trig = 0x5a;iap_trig = 0xa5; //启动iap *nbadd = iap_data; nbadd++;eadd++; }iap_contr = 0;iap_cmd = 0;iap_trig = 0;iap_addrh = 0xff; //重新指向第0扇区ea = 1;}void save(uchar sq,unsigned char *eadd,unsigned char *nbadd,unsigned char size)unsigned char i = size;ea = 0;weism |= dig[0]; //消隐iap_contr = 0x80|iap_wait_time; //11miap_addrh = sq; //0x10=第9扇区iap_addrl = 0x00;iap_cmd = iap_sector_erase; //擦除命令iap_trig = 0x5a;iap_trig = 0xa5; //启动iapwhile(i--) iap_addrh = sq; iap_addrl = (char)eadd;// iap_contr = 0x80|iap_wait_time; //11m iap_cmd = iap_byte_prog; //写入命令 iap_data = *nbadd; iap_trig = 0x5a;iap_trig = 0xa5; //启动iap nbadd++;eadd++; }iap_contr = 0; //关闭iapiap_cmd = 0;iap_trig = 0;iap_addrh = 0xff; //重新指向第0扇区ea = 1;}
文章TAG:
读取EEPROM需要多少时间读取 eeprom 需要