脉冲:低电平变为高电平
发送的数据必须是8位的。
目录
接线
SCL:clock
SDA:data
电路图
I2C总线设备互连
对于这两条线,可以挂有多个设备
既然有多个设备,那开发板要访问连接的设备,怎么分辨设备1和设备2呢?
每一个I2C设备中都有一个地址,当传输的值等于这个地址时,目标设备才会回应
开始信号与结束信号
- 开始信号:时钟信号保持高电平,数字信号从高电平变为低电平
- 结束信号:时钟信号保持高电平,数字信号从低电平变为高电平
接在I2C总线的设备收到开始信号时就准备接收数据;接收到结束信号时就停止接收数据
数据传输与响应信号
传输流程:
- 1、发送器的SDA转为低电平,开始发送数据(此时主机的SCL是高电平)
- 2、主机的SCL在发送信号后,会从低电平到高电平反复变化。低电平的时候数据可以发送变化,但当高电平时,发送器发送的数据应该要保持稳定。
这时因为,接在i2c总线上的设备需要在SCL为高电平的时候采集数据。
响应信号
接收器在收到8位数据后,在第9个时钟周期,拉低SDA电平。
然后接收器释放这条SDA线。由于有上拉电阻的存在,电平在下一个时钟周期又变回高电平。
发送器检测到这个引脚变成低电平后,就知道这个设备完成了数据的接收。
单字节数据的传输流程
- 1、开始信号后,发送器的SCL先变为低电平。然后按时间周期发送脉冲。
这时,发送器的电平应保持稳定。因为接在i2c总线的设备,读取信息是在脉冲时读取。 - 2、8位数据发送结束后。在SCL第9个时钟周期,发送器和接收器的SDA都变为低电平。
发送器的SDA为低电平,SCL为高电平,这是结束信号。
接收器的SDA为低电平,这是接收到8位数据的应答信号。 - 3、在第9个时钟周期后,若没有其他信息,则释放I2C总线,接收完毕的从机两条线释放。
由于上拉电阻的存在,全部变为高电平。
其中8位数据可以是:
- 7位设备地址,1位读写选项
- 8位内存地址
- 8位数据
I2C控制器
发送器的SCL时钟,不可以太快。如果太快的话,有可能接收器反应不过来。
所以要根据接收器的存储芯片的要求,来设置发送器的I2C控制器。
当想发送数据时,只要把发送的数据,时钟等信息丢给响应的寄存器即可。
在I2C总线上是允许连接多个设备的,那怎么去访问目标设备而不影响到其他的设备呢。
下一个目录介绍
I2C总线的传输流程
七位地址模式下的写操作格式
- 1、若想访问这个设备。首先发送机发送一个起始信号。
- 2、然后发送8位数据。其中前七位是从机的地址,最后一位是读写选项。
如果从机中有符合此地址的,就返回一个Ask响应信号。
选择写(0),意为发送机向目标从机发送数据。
选择读(1),意为发送机从目标从机读取数据。 - 3、第二个字节用于发送数据,收到后从机返回一个响应信号。
- 4、结束后发送机
设备地址的查看
- 地址的值需要看I2C的芯片手册
第5-7位是由这三个引脚决定的,如果这三个引脚都接0,那么就都是0.
最后一位是读或者写
七位地址模式下的读操作格式
和前面一样,只是读写选项选择了读。
但是从从机读的数据有什么含义,又要去看I2C设备手册了。
比如主机jz2440接上了一块存储芯片。那么要读写某的地址,这个要求一定能满足。
接下来看芯片手册。
读的流程
注释:
– 1:从机地址
– 2:主机想要获取数据的地址
– 3:和1一样的从机地址
– 4:读取的数据
既然要读,主机就需要把想要读的地址先写给对方
告诉从机,主机需要哪个地址的数据
流程如下:
- 1、主机先发送地址寻找从机,选择写,找到后发送8位地址给从机
这个8位地址是从机上的地址,是主机想要获取数据的地址 - 2、再次发送地址寻找刚刚的从机,这时选择读,SDA上会产生相应的信号
- 3、结束后主机发送结束信号
以上每8个字节从机都相应后,从机都会在第9个字节返回相应信号。
写的流程
流程如下:
- 1、首先发送地址寻找从机,并选择写
- 2、发送主机写入从机中的地址
- 3、发送要写入的8位数据
以上每8个字节从机都相应后,从机都会在第9个字节返回相应信号。
本篇以2440为例,实际数据格式请根据手册