I2C学习——读写eeprom

一.理论学习

I2C 通讯协议(Inter-Integrated Circuit)是由Philips公司开发的一种简单、双向二线制同步串行总线,只需要两根线即可在连接于总线上的器件之间传送信息。

I2C物理层

在这里插入图片描述
特点如下:
1.在一个I2C通讯总线中,可挂载多个设备,这些设备既可做主机也可做从机。(一般总线上挂载的设备所在的地址,在出厂的时候已经设置好了,一般来说器件地址是7位,当然也有其他的情况,比如说在eeprom,它的地址设置了高4位,剩下的3位可由用户自己设置)
2.一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。
3.每个连接到总线的设备都有一个独立的地址,主机通过地址去访问相应的设备。
4.总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
5.多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
6.具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。
7.连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

I2C协议层

看一下整体的时序图,分为4个状态:
在这里插入图片描述
1.空闲态:SCL和SDA都为高阻态的时候;
2.起始状态:SCL空闲的时候检测到SDA的下降沿的时候产生一个起始信号,此时总线上的设备检测到该信号会跳出空闲态,等待字节的输入。
3.数据读/写状态:这个状态的具体时序如下:
在这里插入图片描述
主机向从机写数据或指令的时候,在SCL为高电平的时候,串行数据总线SDA向从机写入一位数据,在SCL为低电平的时候,SDA上的数据进行更新;当数据传输满足1byte的时候,从机正确接收到这个字节后,会拉低SDA,向主机发送1bit的应答信号,表示该字节写入成功。如果从机给的是正确应答,就可以结束本字节或者开始下个字节的传输;若给的是错位应答,主机考虑放弃写入或者重新写入。
4.停止状态:SCL高电平时检测到SDA的上升沿的时候产生一个停止信号,此时总线跳转回到空闲状态。

器件地址和存储地址

1.主机想要和从机建立通讯,首先会发将控制命令(器件地址 + 读/写控制位)发送到SDA上,挂载在I2C总线上的器件会接收主机的控制指令和自身进行对比。如果地址相同,会给主机一个应答信号,主机接收到信号之后,主从设备才能建立通讯,进行数据传输。前面说过了,器件地址在出厂的时候就进行了设置。
2.挂载在总线上的设备,他们的内部都有着一些可进行读/写操作的寄存器或存储器。根据设备的不同,存储地址分为单字节和双字节。
以EEPROM存储芯片为例,在ATMEL公司生产的AT24C系列EEPROM存储芯片中选取两款存储芯片AT24C04和AT24C64。AT24C04的存储容量为1Kbit(128byte),7位存储地址即可满足所有存储单元的寻址,存储地址为单字节即可;而AT24C64的存储空间为64 Kbit(8Kbyte),需要13位存储地址才可满足所有存储单元的寻址,存储地址为2字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小勇study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值