本帖最后由 sanitIT 于 2019-5-20 12:41 编辑
目前这个项目中需要存储十几个字节的数据作为系统参数,而且掉电不能丢失。正好使用赛元LB1011触控评估板做一个初期实验评估。参见【SC92F8463B_8462B_8461Bv0.5cn.pdf】手册,可以发现,赛元SC92F8462B这款芯片内部最高位地址的128字节的EEPROM可以作为数据存储使用,并且写之前无需擦除操作,10万次写入,10年以上保存寿命,完全符合项目需求。这样项目上就可以简化,无需外挂EEPROM,节省成本。
于是就参考20章节EEPROM及IAP操作,打开官方提供的代码配合理解,很快就成功了。不得不说,非常的好用啊。写之前,不需要擦除,这才是真正的EEPROM,非常的好用。 废话少说,直接上读写代码,需要的拿去。
unsigned char code *IapAddr = 0x00; /************************************************** *函数名称:voidEEPROM_Write(INT8U Addr,INT8U *BUF,INT8U LEN) *函数功能:写入EEPROM *入口参数:(INT8UAddr,INT8U *BUF,INT8U LEN) *出口参数:void **************************************************/ void EEPROM_Write(INT8U Addr,INT8U*BUF,INT8U LEN) { INT8U i; INT8U addr;
addr = Addr;
EA= 0; IAPADE = 0x02; //0x00:选择ROM区操作 0x02:选择EEPROM区操作 for(i=0;i<LEN;i++) { IAPDAT = BUF; //写入数据Data IAPADH = 0x00; //写入地址的高5位,默认写0 IAPADL = addr+i; //写入地址的低8位
IAPKEY = 0xF0; //IAP开启保护控制时间 IAPCTL = 0x06; //CPU holdtime为2ms,写入操作命令 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } IAPADE = 0x00; //MOVC指向ROM EA= 1; }
/************************************************** *函数名称:voidEEPROM_Write(INT8U Addr,INT8U *BUF,INT8U LEN) *函数功能:读取EEPROM *入口参数:(INT8UAddr,INT8U *BUF,INT8U LEN) *出口参数:void **************************************************/ void EEPROM_Read(INT8U Addr,INT8U*BUF,INT8U LEN) { INT8U i; INT8U addr;
addr = Addr;
EA= 0; IAPADE = 0x02; for(i=0;i<LEN;i++) { BUF = *(IapAddr+addr+i); //读取的数据 } IAPADE = 0x00; //MOVC指向ROM EA= 1; }
注名: 微信号:X1172240606
|