基于I2C接口协议 EEPROM的读写测试
【基于I2C接口协议 EEPROM的读写测试】1. EEPROM简介
文章图片
开发板板载了一片EEPROM,型号为24LC04,容量为:4Kbit(2* 256*8bit),由2个256byte的block组成,通过IIC总线进行通信。板载EEPROM就是为了学习IIC总线的通信方式。EEPROM一般用在仪器仪表等设计上,用作一些参数的存储,掉电不丢失。这种芯片操作简单,具有极高的性价比,所以虽然容量比高,但价格非常便宜,对于那些对成本要求很高的产品来说,是个不错的选择。图为EEPROM的原理图
文章图片
SCL连接I2C的clk引脚,SDA为数据引脚(双向),这两个端口同时也接了上拉电阻。WP为写/读引脚,由电平高低来控制。
文章图片
2. I2C通讯协议
I2C(Inter-Integrated Circuit)总线是由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。由于其管脚少,硬件实现简单,可扩展性强等特点,因此被广泛的使用在各大集成芯片内。下面我们就从I2C 的物理层与协议层来了解I2C。
A 它的物理层有如下特点:
(1)它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在
一个I2C 通讯总线中,可连接多个I2C 通讯设备,支持多个通讯主机及多个通
讯从机。
(2)一个I2C 总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4)总线通过上拉电阻接到电源。当I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5)多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6)具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为
400kbit/s,高速模式下可达3.4Mbit/s,但目前大多I2C 设备尚不支持高速模式。
(7)连接到相同总线的IC 数量受到总线的最大电容400pF 限制。
B I2C的协议层如下:
I2C 的协议定义了通信的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。下面我们就来简单介绍下。
I2C是一种==半双工==的通讯方式,由==两根总线==组成,即SDA和SCL
文章图片
①:I2C的SDA和SCL两条信号线同时处于高电平时(可由上拉电阻拉高),规定总线的空闲状态。
②+③:如下图,启动信号和时序信号是一种电平跳变的时序信号,而不是电平信号
文章图片
④:数据在SCL的上升沿到来之前就需要准备好,并在下降沿到来之前必须稳定。只有在SCL低电平时才能改变SDA电平状态
⑤:应答信号(ACK)
每当发送器件传输完一个字节的数据后,后面必须紧跟一个校验位,这个校验位是接收端通过控制SDA(数据线)来实现的,以提醒发送端数据我这边已经接收完成,数据传送可以继续进行。这个校验位其实就是数据或地址传输过程中的响应。响应包括“应答(ACK)”和“非应答(NACK)”两种信号。作为数据接收端时,当设备(无论主从机)接收到I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答(ACK)”信号即特定的低电平脉冲,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答(NACK)”信号即特定的高电平脉冲,发送方接收到该信号后会产生一个停止信号,结束信号传输。应答响应时序图如下:
文章图片
每一个字节必须保证是8 位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9 位)。
如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答” 通知主机,主机则应发出终止信号以结束数据的继续传送。
当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。
这些信号中,起始信号是必需的,结束信号和应答信号都可以不要。
3.I2C的寻址方式
I2C 总线寻址按照从机地址位数可分为两种,一种是7 位,另一种是10位。采用7 位的寻址字节(寻址字节是起始信号后的第一个字节)的位定义如下:
文章图片
D7~D1 位组成从机的地址。D0 位是数据传送方向位,为“ 0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。
10 位寻址和7 位寻址兼容,而且可以结合使用。10 位寻址不会影响已有的7 位寻址,有7 位和10 位地址的器件可以连接到相同的I2C 总线。我们就以7 位寻址为例进行介绍。
当主机发送了一个地址后,总线上的每个器件都将头7 位与它自己的地址比较,如果一样,器件会判定它被主机寻址,其他地址不同的器件将被忽略后面的数据信号。至于是从机接收器还是从机发送器,都由R/W 位决定的。从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7 位寻址位有4 位是固定位,3 位是可编程位,这时仅能寻址8 个同样的器件,即可以有8 个同样的器件接入到该I2C 总线系统中。
4.数据传输
I2C 总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在起始信号后必须传送一个从机的地址(7 位),第8 位是数据的传送方向位(R/W),用“ 0”表示主机发送(写)数据(W),“ 1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
在总线的一次数据传送过程中,可以有以下几种组合方式:
a、主机向从机发送数据,数据传送方向在整个传送过程中不变:
文章图片
注意:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。A 表示应答,A 非表示非应答(高电平)。S 表示起始信号,P 表示终止信号。
b、主机在第一个字节后,立即从从机读数据
文章图片
c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好相反。
文章图片
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 2020-04-07vue中Axios的封装和API接口的管理
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 调取接口时报404错误(ID:16)
- CICC(脑机接口,科幻几近成真())
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- 接口|axios接口报错-参数类型错误解决
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- 190403|190403 - Jmeter压测接口