微机系统的通信,则利用电、光等媒介。最常用的是电,表现在数字电路中,就是高低电平的变化。单片机的IO口能实现高低电平的收发,认为它是一种通信接口。接口是通信所依赖的实体。
是两个(或多个)设备之间进行通信,必须要遵循的一种协议。通讯协议分为物理层和协议层。
UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通信双方接三根线,RX、TX和GND,TX用于发送数据,RX用于接受数据,双方收发交叉对接,支持全双工方式。
包括RS232、RS499、RS423、RS422和RS485等接口规范和标准规范。
协议层:串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
因为没有时钟控制,什么时机开始发数据,且保证对方正确接收?
如A发数据到B,平时空闲时A.TX 和 B.RX.保持1,当A.TX先发0作为起始位,告诉B请注意,我要发数据了。一帧数据发完后,A.TX给个高电平告诉B.RX我发完了一帧。如果开启校验位,在发停止位之前发送个校验位,一般都不需要校验位了,短距离有线传输出错的概率非常小。如果还有数据,则重复前面的操作。
一般软件配置串口,有波特率,数据位、停止位、校验位、流控。分别表示传输速度,一帧数据的长度,以及发完告知停止,发完是否校验,是否进行发送控制。一般都是固定8位数据位,1位停止位、无校验、无流控,只是配置波特率。
UART没有时钟控制数据捕获时机,依靠通信前就定义波特率,双方按定义的频率读写数据位,但是传输效率有限,一般高到921600,如果再高可能出现误码。
IIC通讯协议(Inter-Integrated Circuit)
引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
1、物理层:双向串行数据线(SDA),串行时钟线(SCL)
(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL),所以是半双工通信。数据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
2、协议层:定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。
假设主机A给从机B发数据(A.SCL接B.SCL,A.SDA接B.SDA),根据应用,A可以同时接B,C,D。空闲时SDA和SCL上的电平都为高电平。
起始和停止起始条件S:当SCL高电平时,SDA由高电平向低电平转换;停止条件P:当SCL高电平时,SDA由低电平向高电平转换。起始和停止条件一般由主机产生,总线在起始条件后处于busy的状态,在停止条件的某段时间后,总线才再次处于空闲状态。
整体时序I2C总线上的每个设备都有唯一地址,数据包传输时先发送地址位,接着才是数据。一个地址字节由7个地址位(可以挂128个设备)和1个指示位组成(7位寻址模式),0表示写,1表示读。
CAN ( Controller Area Network ) 即控制器局域网络。(广泛应用到汽车中)是一种能够实现分布式实时控制的串行通信网络。
CAN总线标准 只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。
-------------------------------------------------------------
RS232协议是一种流行的串行接口,用于将计算机连接到诸如串口服务器之类的联网设备。它以恒定速率执行异步传输,该速率与起始脉冲信号的电平同步。
现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线;
RS-485协议是对RS-232协议的改进。协议层不变,但只有物理层得到了改进,从而保留了串行通信协议应用简单的特点。
逻辑“0”由两条线之间的电压差表示为+(2-6)伏;逻辑“1”表示为两条线之间的电压差为-(2-6)伏。接口信号电平低于RS-232-C,不易损坏接口电路的芯片,电平与TTL电平兼容,可以方便地与TTL电路连接。