目录
(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接收,并且二者可以同时互相进行发送和接收
串口传输;三根线传输: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之前发送个校验位,不过现在一般都不需要校验位了,因为出错的概率太小了,而且一般用于调试。
串行同步外设接口。由摩托罗拉(Motorola)公司开发的全双工同步串行总线,由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成。一主多从。CS决定了唯一的与主设备通信的从设备,片选信号低电平有效。
数据协议:数据在时钟的上升或下降沿由SDO输出,在紧接着的下降或上升沿被采集读取,输入的道理也一样。这样经过8/16次时钟的改变,完成8/16 位数据的传输。
(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
接着介绍一下与上述有关的几种电气接口等:
逻辑门电路,有晶体三极管和电阻构成。速度快,传输延迟时间短(5-10纳秒),但是功耗大。
TTL电平:+5V为逻辑1,0V为逻辑0。
异步传输标准接口。全双工。电平信号。主要使用三根线: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米左右。
全双工。差分信号。有五根线:TXA、RXA、TXB、RXB、GND。一发十收。
发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~6V,是另一个逻辑状态。最大传输距离为4000英尺(约1219米),最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比。
半双工。差分信号。有三根线:TX/RX+、TX/RX-、GND。一发多收。
逻辑"1"以两线间的电压差为+(2-6)V表示;逻辑"0"以两线间的电压差为-(2-6)V表示。最大传输距离标准值为4000英尺,实际上可达3000米。
最后再介绍两种常用的总线:
(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总线是一个广播类型的总线,在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一"隐性"电平而监视到的是一"显性"电平,那么这个节点失去了仲裁,必须退出发送状态。
(Universal Serial Bus)通用串行总线
总线协议是以Intel为主,并有Compaq,Microsoft,IBM,DEC,Northern_Telecom以及日本NEC等共七家公司共同制定的串行接口标准。属于一种轮询式总线,主机控制端口初始化所有的数据传输。每一总线动作最多传送三个数据包,包括令牌(Token)、数据(Data)、联络(HandShake)。