硬件设计基础----通信协议IIC
Posted 鲁棒最小二乘支持向量机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬件设计基础----通信协议IIC相关的知识,希望对你有一定的参考价值。
1 IIC通信协议
1.1 协议介绍
IIC(Inter-Integrated Circuit)集成电路总线
,支持设备之间的短距离通信,需要两根信号线完成信息交换。IIC总线是一种多主多从、半双工同步串行总线
总线由数据线SDA
和时钟线SCL
构成,可发送和接收数据,三个不同的模式传输速率分别为100Kb/s、400Kb/s、3.4Mb/s
双线是极简的通信方式,每根线上的信号形式有0、1、下降沿、上升沿
四种,两根信号线共有16种组合表达,故需要用16种形式规定IIC通信协议
1.2 设备连接
IIC总线属于多主多从(多个主机(Master),多个从机(Slave))的总线结构,总线上的每个设备都有一个特定的设备地址
,以区分同一I2C总线上的其他设备,设备连接如图所示:
相互通信的设备需要共地
,两条通信线需要上拉电阻
上拉
为什么接上拉电阻: IIC的接口一般都是OD或者OC门,芯片内部无上拉电阻时,外部需要加上拉电阻才能输出高电平。上拉电阻可以是1.5K,2.2K,4.7K, 电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响
IIC最多可挂载从机数量: 由IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址,所以理论上可以挂127个从机。但是IIC总线协议规定总线电容不能超过400pF,管脚有输入电容,PCB也会有寄生电容,故不超过8个从机设备(经验值)
1.3 通信过程
主机发送起始信号
启动IIC总线,总线启动后,总线处于占用状态
主机发送一个字节指明从机地址
和数据传送方向
,高7位表示从机地址,最后一位表示传送方向(主机读为1,主机写为0)
主机发送停止信号
结束通信,总线处于空闲状态
通信过程步骤如下:
- 1、主机发送起始信号
- 2、主机发送一个字节(从机地址+数据传送方向)
- 3、被寻址的从机应答
- 4、发送器发送一字节数据
- 5、接收器应答
- 6、重复步骤4、5
- 7、主机发停止信号
2 IIC工作原理
2.1 IIC总线数据帧
IIC通信协议把传输的消息分为两种类型的帧:
- 地址帧: 用于主机指明消息发往哪个从机
- 数据帧: 由主机发往从机的数据或者接收来自从机的数据,每次读写单位为8bit,高位先发
数据位有效性: IIC总线进行数据传送时,SCL时钟信号为高电平期间,SDA数据线上的数据必须保持稳定,只有在时钟电平为低电平期间,数据线上的高电平或者低电平状态才允许变化。即数据在时钟线SCL的上升沿到来之前就需要准备好,并在下降沿到来之前必须保持稳定,刚好涉及到两个概念:建立时间和保持时间
:
- 建立时间(setup time): 时钟触发事件来临之前,数据需要保持稳定的最小时间,以便数据能够被时钟正确的采样
- 保持时间(hold time): 时钟触发事件来临之后,数据需要保持稳定的最小时间,以便数据能够被电路准确的传输
主机写数据到从机,数据传输格式如下:
图中绿色
表示数据从主机传输至从机,蓝色
表示数据从机传输至主机
- 主机发送起始信号
- 主机在数据线上广播从机地址
- 确定数据的传输方向
- 从机返回ACK表示应答,找到从机
- 主机发送一个字节数据,从机接收后,会返回给主机一个应答信号,直到主机发送完数据,或者从机返回一个NACK信号,表示从机不再接收主机发送的数据。主机发送一个停止信号,此次数据传输完成
主机读取从机的数据,数据传输格式如下:
图中绿色
表示数据从主机传输至从机,蓝色
表示数据从机传输至主机
- 主机发送起始信号
- 主机在数据线上广播从机地址
- 确定数据的传输方向
- 从机返回ACK表示应答,找到从机
- 从机返回读的数据,主机返回一个应答信号,表示成功接收从机发出的数据,当主机接收数据完毕,返回一个非应答信号NACK,从机释放数据总线,接着主机发送一个停止信号,此次数据传输结束
2.2 IIC总线信号
空闲状态: IIC总线的数据线SDA和时钟线SCL同时处于高电平时,为总线的空闲状态
起始信号: 时钟线SCL为高电平期间,数据线SDA由高电平向低电平变化
停止信号: 时钟线SCL为高电平期间,数据线SDA由低电平向高电平变化
起始信号和停止信号都是由主机发送
,起始信号产生之后,IIC总线处于被占用的状态,在停止信号产生之后,IIC总线处于空闲状态
应答信号: 发送器发送一个字节(8bit),在第9个时钟脉冲期间,释放数据线,等待接收器反馈应答信号。应答信号为低电平时,规定为有效应答(ACK),表示接收器成功接收该字节;应答位为高电平时,规定为非应答信号(NACK),表示接收器没有成功接收该字节。如果接收器是主主机,则在它收到最后一个字节后,发送一个NACK信号,通知从机结束数据发送,并释放数据线SDA,以便主机发送一个停止信号
起始信号时必需的,停止信号和应答信号可以不需要
2.3 IIC通信实现
IIC控制器实现:
芯片上的IIC外设,也就是硬件IIC,有相应的IIC驱动电路,有专用的IIC引脚,效率更高,写代码相对简单,只要调用I2C的控制函数即可,不需要用代码去控制SCL、SDA的各种高低电平变化来实现IIC协议,只需要将IIC协议中的可变部分(从设备地址、传输数据等)通过函数传参给控制器,控制器自动按照IIC协议实现传输
GPIO软件模拟实现:
软件模拟IIC比较重要,当芯片上没有IIC控制器,或者控制接口不够用时,通过使用任意IO口去模拟实现IIC通信协议,手动写代码去控制IO口的电平变化,模拟IIC协议的时序,实现IIC的信号和数据传输
3 IIC通信特点
优点:
- 只使用两根线通信,线路简单,硬件资源节约
- 有应答机制,确认是否成功接收数据
缺点:
- 传输速率较慢
- 通信距离较近
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距
以上是关于硬件设计基础----通信协议IIC的主要内容,如果未能解决你的问题,请参考以下文章