eeprom

蓝桥杯——使用eeprom存取和读取数据

时间秒杀一切 提交于 2020-02-05 03:45:18
一、原理部分 设备寻址 在开启eeprom后需要一个8位设备地址,以使芯片能够进行读或写操作,第八位为0的时候进行写的操作,为1的时候进行读的操作。 写操作 进行写操作的时候要先写入一个设备地址,然后还需要写入一个8位的数据地址,eeprom收到这个地址后会再次响应,这时eeprom会接受后面的8位的数据,接受完成后会储存数据到内部,直到全部写完后才会再次响应。 根据时序图编写以下代码 void write_eeprom ( unsigned char add , unsigned char date ) { IIC_Start ( ) ; //启动总线 IIC_SendByte ( 0xa0 ) ; //发送设备地址,第八位为0所以为写 IIC_WaitAck ( ) ; //等待应答 IIC_SendByte ( add ) ; //发送数据地址 IIC_WaitAck ( ) ; //等待应答 IIC_SendByte ( date ) ; //发送数据 IIC_WaitAck ( ) ; //等待应答 IIC_Stop ( ) ; //停止总线 } 读操作 读操作的时候只需要在设备地址的第八位改成1就可以进行读取。 根据时序图编写以下代码 unsigned char read_eeprom ( unsigned char add ) { unsigned char temp

RK3399—用户态操作EEPROM

佐手、 提交于 2020-01-20 18:37:48
  在此之前,在其他平台上应用i2c总线用户接口(ioctrl)进行访问EEPROM,具体可以参考“ 嵌入式Linux下 24系列EEPROM/FRAM驱动 ”文章。现将其移植到RK3399平台运行。 编译系统:Ubuntu16.04 ARM硬件:firefly RK3399 ARM系统:firefly Ubuntu16.04(SDK) 连接i2c:i2c4 EEPROM:AT24C02 电路原理图: 查看器件   首先使用“i2ctools”工具查看硬件连接是否正常。   i2c总线已经正确识别到到AT24C02,根据电路原理图地址线A0—A2接地,所以0x50是AT24C02的器件地址。0x51—0x57是24系列高容量型号芯片的地址(24c04—24c16)。 编译源码 clone源码 https://github.com/Prry/linux-drivers/tree/master/i2c-24cxx 文件目录结构: 24cxx目录为EEPROM/FRAM用户态访问抽象公共接口 at24cxx为EEPROM读写测试程序 fm24cxx为FRAM读写测试程序 修改“at24cxx.c”源码   本次硬件使用的是AT系列EEPROM,选择“at24cxx”目录源码。 /* 修改EEPROM数据结构描述 */ /** * @brief device init */ const

FPGA上实现IIC读写EEPROM

旧巷老猫 提交于 2020-01-20 08:31:56
FPGA上实现IIC读写EEPROM 1、IIC协议简介 IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”(“I-squared-C”),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。 IIC协议的起始和结束条件如下图所示: 2、IIC协议读过程 这里给出的是针对某个地址的单次读,IIC也有连续读的,就是顺着当前地址一直读下去,不过我个人觉得那种方式用的不多,还是针对某个地址读的方式用的多。 IIC协议写过程 IIC写过程,也是有连续写的,但是这里只给出针对某个地址写的,单次写数据,也是用的较多的。 FPGA实现IIC读写EEPROM 主要代码: module iic_rw_test( input clk, input rst_n, input iic_done, input [7:0] data_read, output reg exc_iic, output reg iic_rw_ctl, output [7:0] data_write,

区分单片机RAM、ROM、Flash

≡放荡痞女 提交于 2020-01-13 07:17:56
最近搞毕设,又一次接触到51单片机系列了,但是由于之前学习单片机的时间过去的有点久,我对单片机的有些硬件知识记得有点模糊了,现在重新翻旧账出来复习复习。 单片机的RAM,学名叫随机存储器,就是一个可读可写而且速度还比较快的存储器,缺点是断电数据会丢失,在单片机中用作程序运行时所产生的中间变量的数据存储器。 ROM,只读存储器,从名字就可以看出ROM生产完成后就不能再写数据,只能读取数据。后来技术发展,出现了EPROM,EEPROM等可擦除重写的存储器,但是成本高,而且寿命限制大,所以一般用作存储不会频繁改动的程序指令和数据。 Flash,又称Flash EEPROM、Flash Memory,是一种新的存储结构,成本低、寿命大。 以下内容转载自 https://www.cnblogs.com/renchong/p/6594229.html 传送门: 为什么单片机中既有Flash又有EEPROM 单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。 插播一段:ROM最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了PROM,可以自己写入一次,要是写错了,只能换一片。随着不断改进,终于出现了可多次擦除写入的EPROM

C51实时时钟SD24XX读写演示程序

感情迁移 提交于 2020-01-12 06:44:42
//************************************************************ // 实时时钟SD24XX读写C51演示程序 // MCU: STC15W1K16S @11.0592MHz // E-mail: FAE@whwave.com.cn // TEL: 0755-83114387 // Last update: 2016/11/8 //************************************************************ #include <reg51.h> #include <intrins.h> /******************** RTC Device address ********************/ #define RTC_Address 0x64 /******************** EEPROM/NVSRAM存储器地址宏定义 ********************/ #define EE_FirstPage_Address 0xA0//第一页(尾缀B、C、D、E、F型) #define EE_SecondPage_Address 0xA2//第二页(尾缀B、C型) #define EE_ThirdPage_Address 0xA4//第三页(尾缀C型)

Safely storing and accessing EEPROM

守給你的承諾、 提交于 2020-01-12 03:19:14
问题 I've recently established the need to store infrequently-updated configuration variables in the EEPROM of a microcontroller. Adding state to the program immediately forces one to worry about detection of uninitialized data in EEPROM (i.e. first boot), converting or invalidating data from old firmware versions, and addressing of multiple structures, each of which which may grow in firmware updates. Extensive Googling has only turned up one article that addresses keeping your EEPROM data valid

MSP430G2553 连接 SD24XX C程序

只谈情不闲聊 提交于 2020-01-11 05:06:06
/*********************************************************************** * MSP430G2553 连接 SD24XX C程序(供参考) * DCO:1Mhz * 占用2个IO: P1.4 P1.5 * 特别感谢Mr.Ray提供此程序 * 此程序在Mr.Ray提供的程序上修改 * 2014.07.01 ***********************************************************************/ #include<msp430G2553.h> #include "dco_1m_delay.h" //延时程序,可以自写 #include "uart.h" //串口调试,可以去掉 #define uchar unsigned char #define uint unsigned int /*********************************************************************** ***函数定义 ***********************************************************************/ uchar I2CStart(void); uchar I2CWaitAck

I2C通信(读写EEPROM)

谁都会走 提交于 2020-01-07 02:05:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> I2C协议简介 I2C通信协议(Inter-Integrated Circuit)是由Phiilps公司开发的,它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通信协议的外部收发设备,被广泛的应用在系统内多个集成电路(IC)间通讯。 它是一个多设备总线,即总线可以挂载多个I2C通信设备,支持多个通讯主机及多个通信从机。I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。 每条连接到总线的设备都有一个独立的地址(7位地址或者10位地址),主机可以利用这个地址进行不相同设备之间的访问。 I2C物理层 在电路中有三种状态 ①高电平表示逻辑 1 ②低电平表示逻辑 0 ③高阻态 当通讯设备为高阻态时,即电阻很大,就像和总线断开一样 当通讯设备想表达逻辑1的时候或者空闲时,都要设置高阻态 所以当配置I2C引脚时不能配置成推挽输出,而是要配置成开漏输出(一般用在总线上输出高阻态) 总线数目受到电容限制 I2C协议层 主机写数据到从机 主机先广播从机的地址,在地址后面的这一位表示读写位,0表示写,当有这个地址的从机时,从机会回复一个应答位(ACK),然后主机向从机写数据,每发一个字节的数据,从机会回复一个应答位,当从机无法接收数据时,会回复给主机一个非应答信号

FLASH和EEPROM的最大区别

隐身守侯 提交于 2020-01-05 02:53:53
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。 至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。 没有严谨的工作精神,根本无法成为真正的技术高手。 现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据. 楼 上说的很好 另外,一些变量