1、IIC协议简易概述IIC全称Inter-Integrated Circuit (集成电路总线) , 是由PHILIPS公司在80年代开发的两线式串行总线 , 用于连接微控制器及其外围设备 。IIC属于半双工同步通信方式 。特点
- 简单性和有效性 。由于接口直接在组件之上 , 因此IIC总线占用的空间非常小 , 减少了电路板的空间和芯片管脚的数量 , 降低了互联成本 。总线的长度可高达25英尺 , 并且能够以10Kbps的最大传输速率支持40个组件 。
- 多主控(multimastering)其中任何能够进行发送和接收的设备都可以成为主总线 。一个主控能够控制信号的传输和时钟频率 。当然 , 在任何时间点上只能有一个主控 。
- 构成IIC串行总线一般有两根信号线 , 一根是双向的数据线SDA , 另一根是时钟线SCL , 其时钟信号是由主控器件产生 。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上 , 各设备的时钟线SCL接到总线的SCL上 。对于并联在一条总线上的每个IC都有唯一的地址 。
文章插图
为了保证数据稳定性和减少干扰 , SCL和SDA都需接上拉电阻(大小由速度和容性负载决定 , 一般3.3-10K之间) 。
2、IIC协议IIC总线在传输数据的过程中一共有三种类型信号 , 分别为:开始信号、结束信号和应答信号 , 这些信号中 , 起始信号是必需的 。
*** IIC总线通信过程**1.主机发送起始信号启用总线2.主机发送一个字节数据指明从机地址和后续字节的传送方向 , 0000 0110 , 最后一位为0表示主机给从机发 , 为1表示从机给主机发3.被寻址的从机发送应答信号回应主机4.发送器发送一个字节数据5.接收器发送应答信号回应发送器....循环步骤4,5n.通信完成后主机发送停止信号释放总线
- 起始信号SCL为高电平时 , SDA由高变低表示起始信号
文章插图
/*定义IIC信号引脚*/sbit scl = P0^1;sbit sda = P0^3;/***IIC起始信号***/void IIC_Start(){sda = 1;scl = 1;_nop_();//11.0592MHZ晶振下 , _nop_()函数耗时约5ussda = 0;_nop_();}
- 终止信号SCL为高电平时 , SDA由低变高表示停止信号
文章插图
/***IIC终止信号***/void IIC_Stop(){sda = 0;scl = 1;_nop_();sda = 1;_nop_();}
- 应答信号发送器每发送一个字节(8个bit) , 就在时钟脉冲9期间释放数据线 , 由接收器反馈一个应答信号 。应答信号为低电平时 , 规定为有效应答位(ACK , 简称应答位) , 表示接收器已经成功地接收了该字节;应答信号为高电平时 , 规定为非应答位(NACK) , 一般表示接收器接收该字节没有成功 。
文章插图
/***IIC应答信号***/char IIC_ACK(){char flag;sda = 1;//在时钟脉冲9期间释放数据线_nop_();scl = 1;_nop_();flag = sda;_nop_();scl = 0;_nop_();return flag;}
- 数据发送的时序IIC总线在进行数据传送时 , 时钟线SCL为低电平期间发送器向数据线上发送一位数据 , 在此期间数据线上的信号允许发生变化 , 时钟线SCL为高电平期间接收器从数据线上读取一位数据 , 在此期间数据线上的信号不允许发生变化 , 必须保持稳定 。
经验总结扩展阅读
- 含源码 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别
- 分享一个Vue实现图片水平瀑布流的插件
- springboot自动配置原理以及手动实现配置类
- 通用 HTTP 签名组件的另类实现
- 在 WPF 中实现融合效果
- 详解JS中 call 方法的实现
- EFCore分表实现
- 利用msg_msg实现任意地址读写
- 用AR Engine手部骨骼跟踪能力实现虚拟手表试戴
- 争做新时代自信好少年