嵌入式中常见通讯方式的基础概念简介

发布于:2021-11-29 01:39:50

目录


(1)UART


(2)SPI


(3)IIC


(4)TTL


(5)RS232


(6)RS422


(7)RS485


(8)CAN


(9)USB



在这里,主要针对一些常用的通讯协议,或者与通讯有关的一些基础概念,做一些简单的介绍,由于网络协议属于特别大的一块,所以在此不对网络协议的相关东西进行介绍。


先对单工、半双工、全双工做一个简单介绍,假如A与B进行通信:


单工方式:只能A发送B接收,或者只能B发送A接收


半双工方式:可以A发送B接收,也可以B发送A接收,但是二者不能同时进行互相发送


全双工方式:可以A发送B接收,也可以B发送A接收,并且二者可以同时互相进行发送和接收



(1)UART

串口传输;三根线传输:TX(发送),RX(接收),GND(地线)。全双工方式,TX和RX要反着接,即A的TX接B的RX,A的RX接B的TX。在单片机和主机使用串口进行通信时,需要接一块电*转换芯片,将TTL/CMOS(单片机电*)转换为RS232(PC机电*)。


数据协议:以PC机A给单片机B发数据为例(1为高电*,0为低电*):A.TX到B.RX。刚开始B.RX的端口保持1,当A.TX发来一个0作为起始位告诉B我要发数据了!然后就开始发数据,发多少呢?通常一次是5位、6位、7位、8位,这个双方事先要用软件设置好。PC机一般会用串口助手设置,单片机会在uart的驱动中设置。一小帧数据发送完了以后,A.TX给个高电*1告诉B.RX我发完了一帧。如果还有数据,就再给个0然后重复上一步。如果双方约定有校验位,还要在发停止位1之前发送个校验位,不过现在一般都不需要校验位了,因为出错的概率太小了,而且一般用于调试。


(2)SPI

串行同步外设接口。由摩托罗拉(Motorola)公司开发的全双工同步串行总线,由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成。一主多从。CS决定了唯一的与主设备通信的从设备,片选信号低电*有效。


数据协议:数据在时钟的上升或下降沿由SDO输出,在紧接着的下降或上升沿被采集读取,输入的道理也一样。这样经过8/16次时钟的改变,完成8/16 位数据的传输。


(3)IIC

(Inter-Integrated Circuit)总线是由飞利浦(Philips)公司开发的两线式串行总线。一个时钟线SCL和一个数据线SDA。半双工。两根线上可以挂很多从设备(各个从设备的IIC地址不同),可以通过IIC地址来区别各个设备。


数据协议:假设A给B发数据(这里A.SCL接B.SCL,A.SDA接B.SDA)。起初SDA和SCL上的电*都为高电*。然后在SCL高电*的时候,将SDA拉低,之后再将SCL拉低(即发送起始位)。SDA发送数据和SCL发送脉冲的要符合的关系是:SDA必须在SCL是高电*时保持有效,在SCL是低电*时发送下一位(SCL会在上升沿对SDA进行采样)。规定一次必须传8位数据,8位数据传输结束后A释放SDA,但SCL再发一个脉冲(这是第九个脉冲),这会触发B通过将SDA置为低电*表示确认(该低电*称为ACK)。最后SCL先变为高电*,SDA再由低电*变为高电*(即结束标志)。如果B没有将SDA置为0,则A停止发送下一帧数据。IIC总线(即SDA和SCL)上的每个设备都有唯一地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式)。指示位是0表示写,1表示读。还有10位寻址模式,使用两个字节来保存地址,第一个字节的最低两位和第二个字节的8位合起来构成10位地址。在时钟线(SCL)为高电*的时候,一定不能动数据线(SDA)状态,除非是启动或者结束总线。


信号类型:
?? ??? ??? ?(1)开始信号START:SCL为高电*时,SDA由高电*向低电*跳变,开始传送数据
?? ??? ??? ?(2)结束信号STOP:SCL为高电*时,SDA由低电*向高电*跳变,结束传送数据
?? ??? ??? ?(3)数据传输信号:在开始条件以后,时钟信号SCL的高电*周期期间,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作。在时钟信号SCL的低电*周期期间,数据线上数据才允许改变。每位数据需要一个时钟脉冲。
?? ??? ??? ?(4)应答信号ACK:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电*脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
?? ??? ?写流程:
?? ??? ??? ?(1)Master发起START
?? ??? ??? ?(2)Master发送I2C addr(7bit)和 W操作0(1bit),等待ACK
?? ??? ??? ?(3)Slave发送ACK
?? ??? ??? ?(4)Master发送reg addr(8bit),等待ACK
?? ??? ??? ?(5)Slave发送ACK
?? ??? ??? ?(6)Master发送data(8bit),即要写入寄存器中的数据,等待ACK
?? ??? ??? ?(7)Slave发送ACK
?? ??? ??? ?(8)第6步和第7步可以重复多次,即顺序写多个寄存器
?? ??? ??? ?(9)Master发起STOP
?? ??? ?读流程:
?? ??? ??? ?(1)Master发起START
?? ??? ??? ?(2)Master发送I2C addr(7bit)和 W操作0(1bit),等待ACK
?? ??? ??? ?(3)Slave发送ACK
?? ??? ??? ?(4)Master发送reg addr(8bit),等待ACK
?? ??? ??? ?(5)Slave发送ACK
?? ??? ??? ?(6)Master发起START
?? ??? ??? ?(7)Master发送I2C addr(7bit)和 R操作1(1bit),等待ACK
?? ??? ??? ?(8)Slave发送ACK
?? ??? ??? ?(9)Slave发送data(8bit),即寄存器里的值
?? ??? ??? ?(10)Master发送ACK
?? ??? ??? ?(11)第9步和第10步可以重复多次,即顺序读多个寄存器
?? ??? ??? ?(12)Master发起STOP



接着介绍一下与上述有关的几种电气接口等:


(4)TTL

逻辑门电路,有晶体三极管和电阻构成。速度快,传输延迟时间短(5-10纳秒),但是功耗大。


TTL电*:+5V为逻辑1,0V为逻辑0。


(5)RS232

异步传输标准接口。全双工。电*信号。主要使用三根线:TX、RX、GND。一收一发。


在TxD和RxD上:逻辑1(MARK)=-3V~-15V,逻辑0(SPACE)=+3~+15V。在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)=+3V~+15V,信号无效(断开,OFF状态,负电压)=-3V~-15V。传输速率较低,传输距离大概15米左右。


(6)RS422

全双工。差分信号。有五根线:TXA、RXA、TXB、RXB、GND。一发十收。


发送驱动器A、B之间的正电*在+2~+6V,是一个逻辑状态,负电*在-2~6V,是另一个逻辑状态。最大传输距离为4000英尺(约1219米),最大传输速率为10Mb/s。其*衡双绞线的长度与传输速率成反比。


(7)RS485

半双工。差分信号。有三根线:TX/RX+、TX/RX-、GND。一发多收。


逻辑"1"以两线间的电压差为+(2-6)V表示;逻辑"0"以两线间的电压差为-(2-6)V表示。最大传输距离标准值为4000英尺,实际上可达3000米。



最后再介绍两种常用的总线:


(8)CAN

(Controller Area Network)控制器局域网络。现场总线。包括两根线CAN_H和CAN_L。串行差分信号。


在CAN_H和CAN_L之间需要接上120欧姆的终端电阻。CAN收发器的作用是负责逻辑电*和信号电*之间的转换。


是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO-11898),是国际上应用最广泛的现场总线之一。


CAN总线采用不归零码位填充技术,CAN总线上信号有两种不同的信号状态,分别是显性的逻辑0和隐性的逻辑1,信号每一次传输完之后不需要返回到逻辑0的电*。位填充规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。


CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电*。


CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电*。


CAN总线是一个广播类型的总线,在仲裁期间,每一个发送器都对发送的电*与被监控的总线电*进行比较。如果电*相同,则这个单元可以继续发送。如果发送的是一"隐性"电*而监视到的是一"显性"电*,那么这个节点失去了仲裁,必须退出发送状态。


(9)USB

(Universal Serial Bus)通用串行总线


总线协议是以Intel为主,并有Compaq,Microsoft,IBM,DEC,Northern_Telecom以及日本NEC等共七家公司共同制定的串行接口标准。属于一种轮询式总线,主机控制端口初始化所有的数据传输。每一总线动作最多传送三个数据包,包括令牌(Token)、数据(Data)、联络(HandShake)。


?


?

相关推荐

最新更新

猜你喜欢