串行通信(Serial Communication)

在计算机系统中,CPU和外部通信有两种通信方式:并行通信串行通信 。 而按照串行数据的时钟控制方式,串行通信又可分为 同步通信异步通信

数据层标准:I2C、SPI、UART、USB、SATA 硬件层标准:RS232、TTL

某些协议可能对于数据层或硬件层有着不同的规定,因此请自行了解并加以区分。

串行通信

Serial communication,指所有的串行的通信协议。是相对并行通信(Parallel communication) 而言的。

同步串行通信

Synchronous serial communication,指发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据的。

如:I2C、SPI。

异步串行通信

Asynchronous serial communication,指发送端在数据发送之前和之后,通过特定形式的信号(例如START信号和STOP信号),告诉接收端,可以开始(或者停止)接收数据了。与此同时,收发两方会约定一个数据发送的速度(波特率),发送端在发送START信号之后,就按照固定的节奏发送串行数据,与此同时,接收端在收到START信号之后,也按照固定的节奏接收串行数据。

如:UART、USB。

在传送数据的过程中,字符与字符之间的传送是完全异步的,位与位之间的传送基本上是同步的,其特点可以概括为: 1. 以字符为单位传送信息。 2. 相邻两字符间的间隔是任意长。 3. 因为一个字符中的比特位长度有限,所以需要的接收时钟和发送时钟只要相近就可以。 4. 异步方式特点简单的说就是:字符间异步,字符内部各位同步。

串行协议标准介绍

本节仅对SPI、I2C、UART、RS232、TTL及COM接口做详细介绍,其他标准作为粗略的补充或拓展之用。

SPI

Serial Peripheral Interface Bus,串行外设接口。是一种用于短程通信的串行通信同步接口规范,也是一种同步串行通信协议,主要应用于单片机系统中。

典型应用包含SD卡、液晶显示器、RFID读卡模块MFRC-522。 SPI设备之间使用全双工模式通信,包含一个主机和一个或多个从机。主机产生待读或待写的帧数据,多个从机通过一个片选线路 决定哪个来响应主机的请求。 有时SPI接口被称作四线程接口,SPI准确来讲称为同步串行接口,但是与同步串行接口协议(SSI)不同,SSI是一个四线程 同步通信协议,但是使用差分信号输入同时仅提供一个单工通信信道。

SPI总线规定了4个保留逻辑信号接口: - SCLK(Serial Clock):串列时脉,由主机发出 - MOSI(Master Output,Slave Input):主机输出从机输入信号,由主机发出 - MISO(Master Input,Slave Output):主机输入从机输出信号,由从机发出 - SS(Slave Selected):选择信号,由主机发出,一般是低电位有效

尽管上面的引脚名称是最常用的,但在过去,有时会使用其他引脚命名约定,因此旧IC产品的SPI端口引脚名称可能有所不同。

SPI总线:单一主机对单一从机
SPI总线:单一主机对复合从机

I²C

Inter-Integrated Circuit,字面上的意思是集成电路之间,是I²C Bus简称。也称集成电路总线,它是一种同步串行通信协议,使用多主从架构总线。

I2C bus

UART

Universally Asynchronous Receiver/Transmitter,通用异步接收/传输器,是指以某个固定的速率(1200bps、9600bps、115200bps等)进行数据传输,且一次只能传输一个bit(所以叫做串行传输)的异步串行通信协议 。 有时候UART会与TTL(Transistor-Transistor Logic)Serial混为一谈,这是因为TTL虽然可以采用其他串行通信协议(如I2C和SPI),但很多PC硬件上支持服务复杂,所以一般用UART协议导致的。 常见的微控制器中,都有内置UART协议接口。

RS232

RS232或者RS485,相较于UART是通信协议的标准,RS232或RS485d规定的是电路的物理层协议(电平标准)。 因为它规定了电气特性和各个引脚的功能定义,如 用-3V— -15V之间的任意电平表示逻辑“1” ;用+3V — +15V电平表示逻辑“0”,这里采用的是负逻辑。

TTL

Transistor-transistor Logic, 晶体管-晶体管逻辑集成电路,这种串行通信对应的物理电平始终是在0V和Vcc之间,其中常见的Vcc是5V或3.3V。 TTL指的是电路的 物理层协议 (电平标准)。电压>=2.4V时代表高电平1,电压<=0.5V时代表低电平0(对于5V或3.3V电源电压),这里是正逻辑。TTL接口在Minnow板子上如图: pic3

在TTL与RS232的互相转换中,使用的芯片是MAX3232(3.3V)或者MAX232(5V),里面就只涉及到电压转换的问题了,没有数据的改变和封装,因为他们在数据层的协议是一样的。 比如,对于同样传输0b01010101来说,RS232和TTL的时序对比如下图所示。 pic4 当然,RS232和TTL之间的转换,不仅仅是简单的电平转换,还要考虑到其他一些因素,比如调节和矫正一些电平(提高或降低对应的电平),确保可能的有害的RS232电压不会破坏微控制器的串口针脚。

如何分辨究竟是TTL还是RS232呢? - 一般来说,由SOC芯片引脚直接引出的一般是TTL,其高低电平不需要任何转换,可以由芯片之间驱动,节省费用;而中间接有转换芯片的可能就是RS232了,可以根据电路图的芯片型号google即可。 - 另一个原则是RS232通常出现在传统的PC和服务器领域,TTL通常用于嵌入式设备。

COM接口

Cluster Communication Port,串行通讯端口,简称串口。微机上的串口通常是9针(如下图示),也有25针的接口,最大速率115200bps。 pic1 PC计算机背板的COM口通常采用RS232标准,其高电平定义为-12V,低电平定义为+12V。 在嵌入式设备上的4针杜邦线接口也算COM接口,采用的是TTL标准或RS232标准。但如果谈论到COM接口,一般是指RS232标准的PC背板的9pin的COM口。 pic2

转换方式 芯片型号
TTL-RS232 MAX3232 或者 ST3232
USB-TTL PL2303HX 或者 CP2102

如果要转换USB-RS232的话,则要使用USB-TTL和TTL-RS232两种芯片。

其他

USB

Universal Serial Bus,通用串行总线。是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范。 USB使用NRZI编码方式:当数据为0时,电平翻转;数据为1时,电平不翻转。为了防止出现过长时间电平不变化现象,在发送数据时采用位填充处理。具体过程如下: - 当遇见连续6个高电平时,就强制插入一个0。 - 经过位填充后的数据由串行接口引擎(SIE)将数据串行化和NRZI编码后,发送到USB的差分数据线上。 - 接收端完成的过程和发送端刚好相反。

SATA

Serial Advanced Technology Attachment,串行高级技术附件。 是一种计算机总线,负责主板和大容量存储设备(如硬盘及光盘驱动器)之间的数据传输,主要用于个人计算机,用以取代PATA或称IDE接口。 串行ATA与串列SCSI(SAS: Serial Attached SCSI)的两者排线兼容,SATA硬盘可接上SAS接口。

参考资料

  1. Serial Peripheral Interface
  2. 同步串口和异步串口的区别及使用情况
  3. UART、RS232、TTL关系浅析
  4. UART、TTL、RS232等概念的区别与联系
  5. 串口、COM口、TTL、RS-232、RS-485区别详解
  6. 一文看懂sp3232与max3232区别
  7. USB