I2C学习笔记
I2C简介:I2C ( Inter- Integrated Circuit) 总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。由于其管脚少,硬件实现简单,可扩展性强等特点,因此被广泛的使用在各大集成芯片内。
I2C特点:
• 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地 址 主机可以作为主机发送器或主机接收器
• 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁 防止数据被破坏
• 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速 模式下可达 3.4Mbit/s
• 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整 • 连接到相同总线的 IC 数量只受到总线的大电容 400pF 限制
• SDA 和 SCL 都是双向线路 都通过一个电流源或上拉电阻连接到正的电源电压,当总线空 闲时 这两条线路都是高电平, 连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能
起始条件:当SCL线是高电平时,SDA线从高电平向低电平切换。
终止条件:当SCL线是高电平时,SDA线从低电平向高电平切换
应答响应:
产生应答:SDA输出状态。首先SCL为低;SDA为低;拉高SCL;
无应答:SDA输出状态。SCL为低;SDA拉高;拉高SCL;
等待应答:SDA为输入模式。拉高SDA=1;延时拉高SCL=1;判断SDA输入(GPIO-IDR)的电平,如果为高循环超过250次,超时未应答。如果为低,表示应答。
数据传输:每次数据传输以字节为单位,每个字节保证8位长度,每次传输的字节数不受限制。数据传输时,先传输字节最高位,每一个被传输的字节后跟一个应答位。
SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
每次数据传输总是由主机产生的总之信号结束。若主机希望继续占用总线进行新的数据传输,则可以不产生终止信号,马上发起起始信号对另一从机寻址。
IIC发送数据:SDA输出模式,SCL=0;开始循环8次,可以通过高位与1的形式,记录SDA上数据为1或0,左移1位,拉低SCL=0,循环8次。每次发送完数据后等待应答。
IIC读数据:SDA输入模式。定义receive=0存储数据.循环8次,令SCL=1;判断每次读到的数据(GPIO-IDR)电平状态,为高则将receive++。receive每次左移一位,循环8次。读到最后一个字节或只读一个字节,发送无应答,反之则发送应答。
7位的地址格式:在起始条件 S 后 ,发送了一个从机地址 ,这个地址共有 7 位 紧接着的第 8 位是数据方向位 R/W,0 表示主机发送(写W)数据, 1 表示主机接收(读R)数据。
仲裁:连接多于一个微控制器到 I2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据, 为了避免由此产生混乱 发展出一个仲裁过程。它依靠线与连接所有 I2C 总线接口到 I2C 总线 ,如果两个或多个主机尝试发送信息到总线, 在其他主机都产生 0 的情况下, 首先产生一个 1 的 主机将丢失仲裁 ,仲裁时的时钟信号是用线与连接到 SCL 线的主机产生的时钟的同步结合。