I2C概念相关:
1.串行传输:一个时钟周期传输一个bit位,通过一根数据线完成
2.主端,主设备,master:一般就是常说的CPU
3.从端,从设备,slave:一般就是说的I2C设备
4.I2C总线:两线式串行总线,CPU跟外设之间的连接通过2根线进行,数据交互通过1根数据线完成。
在这两个线上可以挂接很多I2C设备。这两个线会接上拉电阻,默认的电平状态是高电平。
5.SDA:数据线,CPU和外设之间的数据传输,如果CPU向外设写入数据,SDA由CPU控制,如果CPU从外设读取数据,SDA由外设来控制。
6.SCL:时钟线,时钟信号由CPU发起,由CPU控制。
STOP信号:结束信号,如果CPU结束对从设备的访问,有CPU发送一个STOP信号, SCL为高电平,SDA由低向高电平跳变,产生一个STOP信号。
ACK信号:应答信号,这个信号用于标识外设是否存在于总线上和CPU与外设之间的一个数据交互的结果。低电平有效!
设备地址:用于标识设备在总线上的唯一性。如果CPU要想访问某一个从设备,CPU必须发送这个从设备的地址。设备地址由芯片厂家和硬件原理图一块来决定。
以EEPROM,AT24C02为例:
设备地址:
1010A2A1A0R/W=>A2,A1,A0原理图接地
读设备地址:10100001 = 0xA1
写设备地址:10100000 = 0xA0
=》设备地址不算读写位,去除读写位,然后右移1位,高位补0=》AT24C02的设备地址=01010000=0x50
以I2C接口的LM77温度传感器为例:
10010A1A0:如果A1,A0都接地=》
LM77的设备地址=1001000=0x48
读设备地址:0x48<<1|1
写设备地址:0x48<<1|0
以I2C接口的背光灯芯片ADP8860为例:
ADP8860的设备地址:0101010x(x=1:read,x=0:write)
读设备地址:0x55;
写设备地址:0x54
最终的设备地址=0x2A
CPU和I2C从设备之间的数据交互过程: 必须参看从设备的芯片手册,参看其中的I2C时序操作!
1.CPU都会首先发送一个START信号
2.CPU会发送设备地址,包括读写位(到底是读设备还是写设备)
3.设备给CPU发送一个应答信号,前提是设备确实存在于总线上。如果不存在于总线上,从设备不会给CPU发。
4.根据读写进行数据的交互
5.CPU再发S
1.串行传输:一个时钟周期传输一个bit位,通过一根数据线完成
2.主端,主设备,master:一般就是常说的CPU
3.从端,从设备,slave:一般就是说的I2C设备
4.I2C总线:两线式串行总线,CPU跟外设之间的连接通过2根线进行,数据交互通过1根数据线完成。
在这两个线上可以挂接很多I2C设备。这两个线会接上拉电阻,默认的电平状态是高电平。
5.SDA:数据线,CPU和外设之间的数据传输,如果CPU向外设写入数据,SDA由CPU控制,如果CPU从外设读取数据,SDA由外设来控制。
6.SCL:时钟线,时钟信号由CPU发起,由CPU控制。
在I2C总线协议中
START信号:起始信号,CPU要访问从设备,必须首先由CPU发送一个START信号, SCL为高电平,SDA由高向低跳变,产生START信号。STOP信号:结束信号,如果CPU结束对从设备的访问,有CPU发送一个STOP信号, SCL为高电平,SDA由低向高电平跳变,产生一个STOP信号。
ACK信号:应答信号,这个信号用于标识外设是否存在于总线上和CPU与外设之间的一个数据交互的结果。低电平有效!
设备地址:用于标识设备在总线上的唯一性。如果CPU要想访问某一个从设备,CPU必须发送这个从设备的地址。设备地址由芯片厂家和硬件原理图一块来决定。
以EEPROM,AT24C02为例:
设备地址:
1010A2A1A0R/W=>A2,A1,A0原理图接地
读设备地址:10100001 = 0xA1
写设备地址:10100000 = 0xA0
=》设备地址不算读写位,去除读写位,然后右移1位,高位补0=》AT24C02的设备地址=01010000=0x50
以I2C接口的LM77温度传感器为例:
10010A1A0:如果A1,A0都接地=》
LM77的设备地址=1001000=0x48
读设备地址:0x48<<1|1
写设备地址:0x48<<1|0
以I2C接口的背光灯芯片ADP8860为例:
ADP8860的设备地址:0101010x(x=1:read,x=0:write)
读设备地址:0x55;
写设备地址:0x54
最终的设备地址=0x2A
CPU和I2C从设备之间的数据交互过程: 必须参看从设备的芯片手册,参看其中的I2C时序操作!
1.CPU都会首先发送一个START信号
2.CPU会发送设备地址,包括读写位(到底是读设备还是写设备)
3.设备给CPU发送一个应答信号,前提是设备确实存在于总线上。如果不存在于总线上,从设备不会给CPU发。
4.根据读写进行数据的交互
5.CPU再发S