硬件设计基础----通信协议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的主要内容,如果未能解决你的问题,请参考以下文章

Arduino IIC协议笔记

FPGA基础设计:IIC协议

ZYNQ之FPGA学习----IIC协议驱动模块仿真实验

IICSPI小记

IIC协议

IIC协议详解,附单片机软件模拟源码