嵌入式总线与通信
时间:2023-01-29 23:30:00
嵌入式总线和通信
- I2C通信
-
- I2C通信的特点
- I2C通信协议
- I2C硬件连接
-
- I2C数据线SDA如何实现双向传输(如何实现半双工)
- SOC上的I2C一般硬件接口
- I2C接口与接口之间的连接
- I2C设备在整个ARM系统中的位置
I2C通信
I2C通信的特点
I2C通信协议(规定传输格式)也是通信接口(SOC标准电路)也是一条总线(指传输信号线)。
I2C通信是串行的(一个一个传输数据),同步的(除了数据线,还需要时钟信号),半双工(一时只能发一个收,不能同时收)
I2C通信支持多主机,启动数据传输的机器是主机。多主机同时启动传输时,有总线仲裁机制(总线仲裁见嵌入式三级书138)。
I2C总线最长约7.5m,传输速率有100kb/s、400kb/s、高速模式可达3.4Mb/s,直接用于板级芯片的短距离低速通信。
I2C通信协议
一个流行的例子:老师和学生传球
操场上有个老师(主机,I2C在某时刻只能有一个主机,多个学生(从机),老师需要做以下操作才能把球(数据)传给学生或者从学生那里要球:
1.大喊球,让所有接老师球或传球的准备(老师:球!
2.老师叫同学的名字,说会和同学传球或者接球(老师:张三!
3.老师告诉学生是传球还是接球(老师:接球!或传球!
4.学生回答老师是否能接球或传球(张三:好!或者不好!
5.老师传球或接球,老师传给学生,学生接球后回应老师,老师接球后回应学生
6.老师说他做得很好!(说互动结束)
以上例子是I2C协议传输数据帧的过程如下:
1、主机发出start信号表示此次传输开始
2.主机发出从机设备地址信号,表示操作从机
3.主机发出信号,表示数据传输的方向是从主到主还是从主
4.从机器上发出响应信号,表示准备接收或发送数据
5.数据传输,如果主机发送到从机,则从机回应,从机发送到主机,则主机回应。这个响应信号是数据帧的结束
6.主机发出结束信号,结束数据传输(请注意,不是每个数据帧的结束,而是整个数据传输的结束)
用框图表示主机和从机的读写过程如下,上面是主机写从机,下面是主机读从机,黑色是主机发送的数据,红色是从机发送的数据:
I2C通信一般有两条信号线,一条SDA用于传输数据,一个SCL用于传输时钟信号,以下两条线结合上图的数据格式:
START信号:SCL保持高电平,SDA由高变低
设备地址:7位,与方向位合并,行成8位数据帧,先传最高位(MSB)。主机发出START信号发出后,每个时钟周期发送一个二进制位,并在第八个时钟周期发送设备地址和方向位。主机在第九个时钟等待设备发出的响应信号。每个数据都在SCL低电平电平期间发生变化SCL高电平时必须保持稳定。
方向位:1位
回应:1位,低电平有效
数据:8位
STOP信号:SCL保持高电平,SDA由低变高
总的来说,I2C数据帧通常是九个时钟周期,前八个时钟周期用于传输数据,第九个时钟周期是响应。
下图是S3C2440A手册上的I2C时序图:
I2C硬件连接
I2C在一条数据线SDA如何实现双向传输(如何实现半双工)
从以上分析可以看出,在阅读或写作中,数据传输需要双方相互发送信号,或数据或回应,I2C如何通过SDA实现双方数据发送的一条线?一条数据线通常是单工或半双工,这相当于问如何实现半双工。
要完成半双工,需要满足以下几点:
1.设备A发送数据时,设备B不应发送数据
2.当设备A发送数据时,设备B阴极的电平变化不应受到影响SDA在线数据电平
第一点可以由时钟信号控制,因为I2C发送卡死了,比如START信号发出后,主机发送8小时,8小时内从机不发送数据。
第二点可以由上拉电阻和三极管控制。三极管采用泄漏收集电路作为输出。具体电路见下图:
如果发送端输出高电压(逻辑1),通过非门后会变成低电压,由于上拉电阻的存在,低电压不会驱动三极管。SDA高压(逻辑1)。如果发送端输出低压(逻辑0),经过非门后会变成高压,高压会打开三极管。SDA接地,逻辑0。
我们假设设设备A和设备B发送端同时施加电压,列出设备A发送端、设备B发送端和SDA电压真值表。
若AB都为0,非门后,都会打通三极管,SDA接地,为0
若A为0,B为1,非门后,A打开三极管,SDA接地,为0
若A为1,B为0,非门后,B打开三极管,SDA接地,为0
若A为1,B为1,非门后不打开三极管,SDA为1
从以上分析可以看出,如果设备不想影响SDA以上电平不驱动三极管。当设备A作为主设备发送数据时,它负载SDA传输数据,此时设备B的发送端不驱动三极管,即输出0,使设备B的发送端处于高阻力状态,使设备B发送端上的电波不受影响SDA上的数据。那么SDA所有上述数据均由设备A控制。
SCL的处理: 上面的三极管和上拉电阻连接图是SDA的,SCL和SDA同样的连接,也要加三极管和上拉电阻。SCL加三极管和上拉电阻的作用在于暂时停止传输(中场休息,或者拥有单独处理每个数据帧的能力)。我们前面说过,I2C每个数据帧是九个位置,即九个时钟周期,SCL传输时钟信号,由主设备发出,即通常由主设备驱动SCL(主设备三极管打开,从设备三极管关闭),数据帧结束后,如果主或设备感觉传输太快,无法处理,三极管可以一直驱动(也就是一直驱动自己)SCL发送端1),注意前面的真值表,只要有一个设备的发送端总是1,SCL电压总是0,I2C约定通信协议SCL低电平时暂停数据传输(因为每个数据都是SCL高电平时保持稳定)。
上面对于SCL以下是嵌入式系统开发技术138的解释:
SOC上的I2C一般硬件接口
根据以上知识,我们只需要两个引脚加一些三极管、上拉电阻和时钟电路来模拟自己I2C然而,这种模拟需要手动编写代码来分析I2C数据帧,很麻烦。SOC,比如S3C2440A,都有专门的集成I2C接口(或称I2C控制器)。
I2C接口主要完成以下功能:
1、配置I2C传输速率。方法是SOC传来的时钟(PCLK)分频(开发者设置I2C分频寄存器)
二、地址译码。I2C接口内有好几个寄存器,不同的寄存器一般称为**“端口”**,比如I2C数据寄存器是数据端口,I2C控制寄存器是控制端口。这些寄存器有不同的地址。如果我们想操作这些寄存器,我们必须通过硬件和翻译选择特定的寄存器。
3.串并/并串数据转换。ARM的SOC内部一般通过外围总线APB传输数据到I2C接口,I2C接口需要将内部传输的并行数据转换为串行数据,并将来自设备的串行数据转换为并行数据APB总线。
触发中断。CPU一般通过IRQ中断接收I2C通信数据,I2C根据通信状态存器,根据通信状态触发中断。
5.前面说过总线仲裁。I2C当多主设备发生冲突时,需要仲裁机制来支持多主结构。
一个传统的I2C接口原理框图如下:
I2C接口与接口之间的连接
下图是各个I2C设备之间的连接示意图是SOC与SOC,SOC与具有I2C接口设备之间的连接:
下图是SOC与特定设备的连接是特定的S3C铁电存储器芯片2440FM24CL连接64:
I2C设备在整个ARM系统中的位置
我们上面说的I2C接口在ARM SOC中间的位置和具体布局说明了如何通过不同的接口I2C总线(SDA加SCL)现在我们来谈谈互联。I2C接口在整个ARM SOC如下图所示: