I2C协议学习小结

I2c通讯协议
一、I2C硬件知识
I2C通信协议是主要是双线通信:SDA/SCL,是一种同步式的半双工通信协议。SDA:串行数据线、SCL:时钟线,该协议通信速率:标准速度:100KHZ,快速模式:400KHZ,高速模式:3.4MHZ;超高速模式:5MHZ 。SMBus是在I2C的基础上进行了特定越苏例如:一定要维持10kHz以上的运作时脉,主要也是为了管理监控,在总线上只有一个主机其他设备只能够作为从机,另外通信时信号边沿的时间也是有要求。以下内容主要是对I2C进行描述。
1、 首先I2C接口内部电路:

  1. 芯片I2C接口内部电路是一个具有带有输入缓冲器的漏级开路的驱动器:这种驱动器只能够有两种状态:高阻态和低电平;电路图如图1所示:

图1 芯片I2C内部电路
从图中可以看出:CBUS为总线电容;当总线上需要保持高电平的时候,需要主机和从机内部的FET不导通(I2C控制器)。I2C standby模式下总线上的电平保持高电平(外部上拉),这也是总线协议中需要上拉的原因。
2) 主机向从机发送数据过程
当主机需要向从机发送的数据为高,内部FET不导通(主机和从机),发送的数据为低:主机内部FET不导通。从机内部输入缓冲器打开开始接收数据,FET不打开。

图2
2、 I2C上拉电阻选择:
设计时主要考虑I2C上拉电阻的选择,根据芯片内部的电路可知:总线的变为高低电平的的时间和电平的大小是与总线上的上拉电阻、电容有关系。
当R阻值比较小(几百欧姆),主机这边FET导通,如下图所示:R2相当于FET导通内阻。R2电路电压为可能会会不够低,所以根据从机技术手册:确保输出最低电压的最大值满足芯片足够要求:
VCC-VOL/Rp(min)=IOL;
根据上式计算出上拉电阻的最小值。

图3
当总线上的数据由低变为高电平(输入)时,这个时候上拉电阻的阻值直接影响到总线电平的上升速度,如果上升的太慢导致BUS拉低前的电平不够高。根据芯片技术手册:

根据电容充放电函数:
Vt = V0 + (Vu – V0) * [1 – exp( -t/RC)]
如果电容上的初始电压为0,则公式可以简化为:
Vt = Vu * [1 – exp( -t/RC)] (充电公式)
以下是上拉电阻最大值计算:

图4
上升时间tr(总线工作频率的1/10)、总线电容Cb;两个参数对应I2C不同的工作速度均在技术手册中说明。

图5
3、 I2C时序解析:
I2C总线时序分析主要是能够分析出各个状态下的保持时间、建立时间是否满足芯片要求。如图所示:

图6
4、 I2C读写步骤:(以芯片24CW16X为例)
24CW16X是一款支持I2C接口的EEPROM芯片,芯片操作包括读、写、初始化操作。
 芯片初始化操作
芯片初始化操作包括复位、开始状态、结束状态(数据传输完成后发出的)。

图7
 写操作

  1. 写一个字节

图8
2) 写多个字节(一页32个字节)

图9

 读操作

  1. 当前地址读

图10
2) 随机地址读

图11
3) 连续读

图12

5、 I2C读写代码分享;
后续上传基于STM32编写的I2C芯片驱动代码。

你可能感兴趣的:(硬件)