单片机通信全解
1. 单片机通信的种类¶
1.1. 同步和异步¶
1 2 |
|
1.2 串行通信与并行通信¶
1.3 单工通信、半双工通信和全双工通信¶
2.串口通信的原理¶
2.1串口通信属于全双工串行,既有同步(USART)也有异步(UART)¶
- USART:通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换,既可以同步通信也可以异步通信。
- UART:通用异步收发器(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能(时钟同步),只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。
-
UART、USART不是协议,而是一种“设备”。因为cpu处理数据的最小单元是字节,而串口发送的是位,所以需要把
UART,是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。那么它要完成什么功能呢?它的最基本功能,是串行数据和并行数据之间的转换。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。例如: 比如确认一个Byte的这8个bit是什么时候开始的,又是什么时候结束的,两个班次之间至少要隔多长时间的缓冲,等等。这一部分,也具有协议的特征,但是相对于道路上的协议,更具有一般性,或曰,是与车在什么道路上开,相对独立的。 4. 总结:从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据,并变成CPU可直接读写的形式。
注意下边的说法可以帮助理解,但是不对。UART本身既包含协议(TTL),也是一个硬件设备,但是平时默认UART TTL,但是实际上UART支持TTL RS232 485等所有的串口协议。它本身既有物理特性也有协议特性。
2.2 串口通信的数据缓冲区¶
- 串口通信一般有一个环形队列作为数据缓冲区,在linux中,串口的输出据缓冲区一般为4096个字节。
- 在linux中读取串口数据时,可以自行设置串口缓冲区的大小,但是一次读取的数据不能超过串口缓冲区的大小。
- 串口缓冲区能够有效解决,数据发的快,但是读的慢的问题。如果数据已经发送过来了,但是还没读,就先存在数据缓冲区,等到读取了一部分数据以后,就在缓冲区队列把已经读了的这部分数据删除掉。
- 可以看这个视频
2.3 串口通信的解析的例子¶
每个两个十六进制数(hex),也就是8位代表一个字节,也就是串口通信的一次发送/接收。我们通过他给的数据定义去解析数据。具体可以看这个视频
3. 各种通信协议的区别¶
3.1 UART、RS485、RS232的区别(串口)¶
他们首先都是串口通信(串行、异步、全双工)
其次:
3.2 SPI¶
和这个 SPI通信有四条线,SDO,SDI,SCLK,SS。是总线通信协议,存在主从设备。 因为有四条线,可以实现全双工通信。速度比I2C快,速度可达几Mbps。
3.3 I2C¶
I2C通信有两条线SCL和SDA,是一种总线通信协议,存在主从设备。用地址选择从机。 因为只有一条数据线(SDA),所以他是半双工通信。但是由于是总线通信,所以两条线可以驱动多个设备(最多256个0x 00- 0xFF)