一、单片机中各种通信方式的分类
根据发送方式的不同,通信方式可分为串行通信和并行通信两种,单片几种常用的串行通信有 SPI、单总线(1-wire)、I2C、UART(常说的串口) 等。
其中,串行通信又可有几种不同的分类:
- 根据数据传送方向,可将串行通信分为单工、半双工、全双工三类;
- 根据数据分段方式的不同,可将串行通信分为同步、异步两类。
1. 串行通信中的单工、半双工、全双工
对于单工、半双工、全双工的概念解释,网上有很多,也很好理解,本文不再赘述。读者可参考CSDN博主【Ruo_Xiao】的博客:单工、半双工和全双工的区别。
本文在这里只放出三张图,以粗略解释其概念:
- 左图:单工
- 中图:半双工
- 右图:全双工
在单片机常用的SPI、单总线(1-wire)、I2C、UART(常说的串口)中,单总线和I2C是半双工,SPI和UART是全双工。
2.串行通信中的同步和异步
-
同步传输:接发双方一定有一个共用的同步时钟,它规定着每个信号持续多久后就进入下一个信号。就像两个人的手表,以秒为单位在行进,若说话者一秒说一个字,倾听者一秒听一个字,就不会出错;如果说话者一秒说一个字,倾听者两秒才听一个字,那么后者就会对信号解析错误。
-
异步传输:异步传输的接发双方没有同步时钟,但要规定相同的波特率,也就是规定一个信号持续的时长,这样接收方就能按时长来拆分信号,实际上与同步时钟的原理差不多。另外,异步传输的双方也会商量好相同的起始位、终止位、校验位等。
3. 单片机中的串行通信方式分类表
根据以上串行通信的两种不同分类方式(单工/半双工/全双工、同步/异步),我们把单片机中的SPI、单总线(1-wire)、I2C、UART**总结如下:
通信方式 | 所需线束 | 单/半/全 | 同/异 |
---|---|---|---|
UART | TXD、RXD、GND | 全双工 | 异步 |
单总线(1-wire) | DQ:发送/接收端 | 半双工 | 异步 |
SPI | SCK:同步时钟、MISO:主机输入/从机输出、MOSI:主机输出/从机输入 | 全双工 | 同步 |
I2C | SCL:同步时钟、SDA:数据输入/输出 | 半双工 | 同步 |
根据上表可以看出,半双工的通讯方式往往只有一根线,既用来发送、也用来接收;全双工有两根线,一根用来发送,另一根用来接收;
同步的通讯方式往往有一根同步时钟线;异步却没有。
二、RS232转换器
在串行通讯时,要求通讯双方都采用一个标准接口,RS232的作用就是使不同的设备可以方便地连接起来进行通讯。
RS232是一种通讯协议,根据这种协议设计的连接头叫做DB9,DB9共有9个针头,如下图所示:
虽然它也有负责发送、接收的针头,但不能直接把串口的发送、接收针头接上来,而也要通过DB9母口来进行对接,否则会因电压不同导致不可预测的后果。
三、 UART串口内部结构示意图
UART串口的内部结构并不复杂,但要细究起来,东西也很多,博主在这里根据正点原子的课程,把其内部结构大致分为几块,标在下图:
串口内部在发送端和接收端都有发送/接收缓冲器和发送/接收寄存器;
且有一个公共的控制波特率的时钟信号发送器;
以及一些控制中断、标志位等的寄存器。