第七章串行数据通信接口设计与应用
本章的核心是理解嵌入式系统如何与外部世界进行数据交换。无论系统多么强大,它都需要通过通信接口与其他芯片、模块或设备连接。本节将重点介绍串行通信的原理和主流协议。
7.1 接口的基础分类
在嵌入式系统中,接口就像是设备之间的“电话线”或“对话通道”,让飞腾派系统(基于FTC核心,ARMv8架构)与外部设备(如传感器、显示屏、键盘)交流信息。接口的设计决定了数据传输的方式和效率,是嵌入式开发的核心。本节将从基础开始,用通俗的比喻和飞腾派的实际案例,讲解接口的分类:数字接口与模拟接口和串行通信与并行通信。即使你没有电子或编程背景,也能轻松理解,逐步学会如何选择和使用接口,让飞腾派与外部世界“畅聊”!

7.1.1 数字接口与模拟接口
接口的第一个分类是基于信号形式:信号是连续变化的“曲线”还是离散的“0和1”。这决定了飞腾派如何处理数据。

1.1 模拟接口 (Analog Interface)
- 定义:模拟接口传输连续的电信号,值随时间平滑变化,像一条曲线。
- 特点:
- 信号值可以是任何值(如0.1V、2.7V、3.3V)。
- 常见于物理世界信号,如声音、温度、压力。
- 常见示例:
- 麦克风:人说话产生连续电压波动。
- 热敏电阻:温度变化引起电阻变化,输出连续电压。
- 光敏传感器:光强变化生成连续电压。
1.2 数字接口 (Digital Interface)
- 定义:数字接口传输离散的电信号,只有高电平(1,3.3V)和低电平(0,0V)两种状态,像开关的开/关。
- 特点:
- 信号是二进制(0/1),直接被CPU处理。
- 适合设备间通信或内部控制。
- 常见示例:
- 按键输入:按下输出0,松开输出1(参考5.4.2)。
- GPIO输出:控制LED亮(1)灭(0)。
- 总线数据:如I2C、SPI传输数据包。
注意:模拟接口需ADC转换,数字接口直接用。飞腾派多用数字接口,ADC处理模拟。
7.1.2. 串行通信与并行通信
接口的第二个分类基于数据传输方式:数据是一位位“串队”传输,还是多位“并排”传输。
| 特点 | 串行通信 (Serial) | 并行通信 (Parallel) |
|---|---|---|
| 传输方式 | 数据一位位顺序传(10110010)。 | 多位同时传(如8位)。 |
| 连线数 | 少(1-3根,如数据+时钟+地)。 | 多(N根数据+控制线)。 |
| 优势 | 线少、成本低、远距离抗干扰。 | 短距离速度快。 |
| 劣势 | 单次传1位,速度慢。 | 远距离难同步,成本高。 |
| 应用 | USB、SPI、I2C、RS-232、PCIe。 | 内存总线、早期打印机。 |
2.1 串行通信 (Serial Communication)

- 原理:数据像“单人队伍”,通过一根线按顺序发送(1位接1位)。
- 比喻:像单行道,车一辆辆过。
- 特点:
- 连线少:最少1根数据线+地(异步,如RS-232)或加时钟(同步,如SPI)。
- 抗干扰:线少,信号串扰小,适合远距离。
- 速度提升:高频(如USB 480Mbps)或差分信号(如PCIe)解决速度瓶颈。
- 例子:
- SPI:飞腾派用4线(MOSI、MISO、SCLK、CS)与点阵屏通信(参考5.4.4)。
- I2C:2线(SDA、SCL)与EEPROM通信。
2.2 并行通信 (Parallel Communication)

- 原理:数据像“多车道”,多位同时通过多根线传输。
- 比喻:像高速公路,8辆车(8位)并排跑。
- 特点:
- 连线多:8位需8根数据线+控制线。
- 速度快:单周期传多位,短距离高效。
- 同步难:远距离信号偏移(Skew),干扰大。
- 例子:
- 内存总线:飞腾派访问DDR内存,16/32位并行。
- LCD1602并行:4/8线传输字符(参考5.4.5)。
- 飞腾派实践:并行驱动LCD1602,4位模式省GPIO。代码(参考5.4.5)。
关键认识:
- 串行主流:现代高频串行(如PCIe)解决速度问题,线少、抗干扰,取代并行。
- 飞腾派趋势:FTC核心用串行(SPI/I2C/USB)为主,GPIO并行为辅(如LCD1602)。
接口是“对话通道”,分模拟(需ADC转数字)和数字(直接处理),以及串行(线少,主流)和并行(速快,线多)。
7.1.3 工作模式
串行通信制式描述了数据在两个设备之间流动时,通道(信道) 与时间上的利用方式。
| 制式名称 | 描述 | 通道利用 | 效率与复杂度 | 典型应用示例 |
|---|---|---|---|---|
| 1. 单工制式 (Simplex) | 数据只能沿着一个固定的方向从发送端(A)传送到接收端(B),B 无法回复 A。 | 单向专用通道 | 最简单,效率最低(但满足特定需求)。 | 广播、老式电视遥控器信号、环境传感器向记录仪发送数据。 |
| 2. 半双工制式 (Half-Duplex) | 数据可以双向传送,但不能同时进行。在某一瞬间,只能进行发送或接收,需要切换方向。 | 共享通道,分时利用 | 中等效率,需要额外的控制逻辑来管理方向切换。 | 对讲机(按下按钮说话,松开按钮听)、RS-485 总线。 |
| 3. 全双工制式 (Full-Duplex) | 数据可以同时、双向发送和接收。收发通道是相互独立的。 | 双向独立通道 | 效率最高,但硬件复杂度(连线数量)通常高于半双工。 | 电话通信、USB 接口、飞腾派上的 UART 和 SPI 接口。 |

1. 单工制式 (Simplex)
单工通信就像一条单行道。信息流是不可逆转的。
- 工作原理: 设备 A 专门发送数据,设备 B 专门接收数据。信号线只连接单向回路。
- 适用场景: 主要用于数据采集或广播系统,发送方只需要输出信息,不需要接收反馈。例如,一个温度传感器不断向飞腾派发送温度数据,传感器不需要飞腾派的回执。
2. 半双工制式 (Half-Duplex)
半双工通信像一条有红绿灯的单行道。两个方向都可以通行,但必须等待。
- 工作原理: 收发双方使用同一条信道。在发送数据前,设备必须先确认信道空闲,并获得发送权限。发送完毕后,信道切换方向,才能接收对方数据。
- 切换开销: 切换收发方向需要时间(被称为“换向时间”)。如果切换过于频繁,效率反而会下降。
- 嵌入式应用: 工业现场常用的 RS-485 总线就是典型的半双工通信,它只需要两根线(差分信号线)就可以连接多个设备,但同一时间只有一个设备能发送数据。
3. 全双工制式 (Full-Duplex)
全双工通信就像一条双向四车道高速公路。收发可以同时进行,互不影响。
- 工作原理: 实现全双工通常需要两条独立的通道(例如 UART 的 TXD 和 RXD 采用两条独立的数据线),一条用于发送,一条用于接收。
- 嵌入式应用:
- UART (异步串口): TXD 和 RXD 是独立通道,收发可同时进行。
- SPI 接口: MOSI(主发从收)和 MISO(主收从发)是独立通道,在同一时钟下可以实现完美的全双工数据交换,效率极高。
- 优势: 全双工制式在数据吞吐量和通信效率上具有绝对优势,是实现高性能、高实时性交互的首选。
实际应用中,尽管多数串行通信接口电路具有全双工功能,但仍以半双工为主(简单实用)。
7.1.4 同步通信和异步通信
同步通信和异步通信是串行数据通信的两种基本模式,它们的主要区别在于收发双方是否共享同一时钟信号来同步数据传输。
| 特性 | 同步通信 (Synchronous Communication) | 异步通信 (Asynchronous Communication) |
|---|---|---|
| 时钟机制 | 共用时钟线。 收发双方使用**同一根时钟线(如 SCK, SCL)**来同步数据。 | 无共用时钟线。 收发双方使用各自的本地时钟,依靠数据帧中的附加位实现同步。 |
| 同步方式 | 基于时钟信号。 接收方根据时钟信号的**边沿(上升沿或下降沿)**来精确采样数据线上的每一位。 | 基于起始位和约定速率。 接收方通过检测起始位来启动时钟并计时,然后按约定好的波特率来采样数据。 |
| 数据传输 | 连续传输。 一旦同步建立,可以连续发送大量的字节或数据块,效率高。 | 以帧为单位。 每次发送一个字节(数据帧),必须包含起始位和停止位,开销较大。 |
| 连线数量 | 通常需要额外的时钟线(如 SPI 的 SCK,I²C 的 SCL)。 | 无需额外的时钟线(只需要 TXD, RXD, GND)。 |
| 效率/开销 | 高效率。 传输有效数据的开销小,适合高速、大批量数据传输。 | 中低效率。 每个字节都要附加起始位和停止位,开销相对较大(通常 20% 左右)。 |
| 典型应用 | SPI、I²C、CAN、USB、Ethernet(高速总线多采用同步机制)。 | UART (RS-232, RS-485),常用于调试、简单设备连接。 |
异步通信详解
核心思想: 通过约定传输速率和增加控制位,让接收方能够跟上发送方的节奏。
- 事先约定: 收发双方必须事先约定好相同的波特率(每秒传输的位数,如 115200 bps)。
- 起始位同步: 发送方在发送数据前,先发送一个起始位(低电平),通知接收方数据传输开始。
- 开始计时: 接收方检测到起始位后,激活自己的时钟并开始计时,并按照约定的波特率定时对数据线进行采样。
- 停止位结束: 发送完所有数据位后,发送一个或多个停止位(高电平),标志数据帧结束。
优点: 连线简单、成本最低、布线容易。
缺点: 传输效率略低(有开销)、波特率必须精确匹配,速度上限不如同步通信。
同步通信详解
核心思想: 收发双方使用同一根时钟线驱动,确保数据位和时钟脉冲精确对齐。
- 时钟信号: 通常由主设备(Master) 提供时钟信号(如 SCK 或 SCL)。
- 精准采样: 接收方根据时钟信号的节拍(例如时钟的上升沿或下降沿)来读取数据线(SDA, MOSI)上的电平。当 SCK(时钟)变化时,数据线(MISO, MOSI)上的数据就准备好了。
- 连续性: 由于时钟始终存在,一旦通信开始,数据就可以连续不断地以高速度传输。
优点: 传输速率高、没有起始位/停止位等开销、收发双方始终保持同步,适用于高速应用。
缺点: 连线通常更复杂(多一根时钟线)、需要更复杂的硬件逻辑来管理时序。
同步通信与异步通信区别:
- 1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
- 2.同步通信效率高;异步通信效率较低。
- 3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
- 4.同步通信可用于点对多点;异步通信只适用于点对点。
7.2 异步串行接口:UART/RS-232
在嵌入式系统中,接口是设备之间“对话”的桥梁,而UART(通用异步收发器) 就像一对简单可靠的“对讲机”,让飞腾派系统与外部设备(如传感器、电脑、GPS模块)交换数据。UART是历史悠久、使用广泛的通信方式,简单易学,特别适合初学者。
1. 异步通信原理
UART(Universal Asynchronous Receiver/Transmitter) 负责把并行数据(多位同时处理,如8位字节)转成串行数据(一位位传输),或反过来把串行数据转回并行,供处理器使用。它的核心特点是异步通信。
- 无时钟线: 同步通信(如SPI)用时钟线“指挥”数据节奏,UART不依赖时钟线,只用三根线:发送(TXD)、接收(RXD)、地(GND)。 优点:布线简单,适合远距离(如几米到十几米)。
- 波特率(Baud Rate): 波特率是数据传输的“节奏”,单位是bps(每秒位数),如9600(每秒9600位)、115200(更快)。 收发双方必须设相同波特率,否则“听不懂”。
- 信号线:
- TXD(发送数据线):飞腾派发送数据到外部。
- RXD(接收数据线):飞腾派接收外部数据。
- GND(地线):确保电平一致,像“共同语言”。
注意:波特率要一致,GND必须接好。
2. 数据帧结构
UART没有时钟线,靠数据帧包装数据,确保接收方知道数据开始和结束。数据帧像一封“带信头信尾的信”,包含以下部分:
| 部分 | 名称 | 位数 | 作用 | 逻辑电平 |
|---|---|---|---|---|
| 起始位 | Start Bit | 1位 | 通知“数据来了”,开始采样 | 低电平(0) |
| 数据位 | Data Bits | 5-8位 | 实际数据(如字符’A’) | 不定(0/1) |
| 校验位 | Parity Bit | 0或1位 | 可选,检测错误(奇/偶校验) | 不定(0/1) |
| 停止位 | Stop Bit | 1或2位 | 标志数据结束,准备下帧 | 高电平(1) |

- 工作原理:
- 空闲:TXD保持高电平(1)。
- 发送:起始位(低)→数据位(低位到高位)→校验位(可选)→停止位(高)。
- 接收:检测到起始位后,按波特率采样数据位,重组字节。
每个UART 包含:波特率发生器、接收器、发送器和控制单元。波特率发生器以PCLK或UCLK为时钟源。发送器和接收器各包含1个64 字节的FIFO 寄存器和移位寄存器。 当发送数据的时候,数据先写到FIFO 然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。 被接收的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。

3. RS-232 接口标准
RS-232是UART的物理层标准,定义了信号电压、连接器和距离,增强远距离通信能力。


- 电平标准:
- UART内部用TTL/CMOS电平(0V=0,3.3V/5V=1)。
- RS-232用负逻辑高电压:
- 逻辑1:-3V到-15V。
- 逻辑0:+3V到+15V。
- 比喻:像把“低音”放大成“大嗓门”,传更远。
- 作用:高电压抗干扰,支持十几米传输(如PC到飞腾派)。
- 连接:需电平转换芯片(如MAX232)将TTL转RS-232。

如果要将UART连接成为RS-232接口,可以采用电平转换芯片实现。将其内部的逻辑1信号变成 -3V~-15V,将MPU中的逻辑0信号变成+3V~+15V电平进行通信。

尽管RS-232接口标准应用广泛,但由于出现较早,存在以下不足:
- (1)接口信号电平值较高,易损坏接口电路芯片,且与TTL电平不兼容,需使用电平转换电路才能与TTL电路连接。
- (2)采用单端驱动、单端接收的单端双极性电路标准,一条线路传输一种信号。 传输距离较长时会在传输电缆上产生较大压降损耗。
- (3)传输速率较低,在异步传输时,波特率最大为19200bps。
- (4)传输距离有限,最大传输距离只有30米左右。

7.3 同步串行总线:I²C 接口
I2C总线 (Inter-IC,内部集成电路总线)是飞利浦公司开发,它是一种常用于将微处理器连接到系统的一种二线双向二进制同步串行总线。
1. I²C 的基本结构与同步特性
I²C是一种同步串行通信协议,专为电路板上短距离、低速设备通信设计。它用最少的线(仅两根)连接多个设备,简单又强大。
- 同步特性:
- I²C是同步通信,靠**时钟线(SCL)**统一节奏,主设备发出时钟信号,控制数据传输,就像乐队指挥敲节拍。
- 两线制(Two-Wire Interface):2C总线只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。所有连接到I2C总线上的器件的数据线都连接到SDA上,各器件的时钟线也都连接到SCL。
- SCL(Serial Clock,串行时钟线):主设备(如飞腾派)发出时钟信号,控制传输速度。
- SDA(Serial Data,串行数据线):传输实际数据(如地址、命令、读写内容)。
- 多主多从(Multi-Master, Multi-Slave):I2C总线是一个多主机总线,总线上可以有一个或多个主机,由主机控制总线的操作。每一个接到总线上的设备都有一个唯一的识别码,且都可以作为一个接收器或发送器。
- 一条I²C总线可连多个主设备(控制者)和从设备(响应者)。
- 同一时刻只有一个主设备控制总线,其他主设备等待。
- 上拉电阻:
- SCL和SDA通过上拉电阻(如4.7kΩ)连到VCC(3.3V),空闲时保持高电平(1)。
- 设备通过“拉低”(输出0)发送数据。
I2C总线多应用消费电子、通信和工控领域,是一个串行的8位双向数据传送总线。

2. 地址寻址与通信流程
I²C总线连接多个设备,如何确保飞腾派只跟目标设备“对话”?靠地址寻址和严格的通信流程。
- 唯一地址:
- 每个从设备有7位或10位地址,像“门牌号”,出厂设定或可配置。
- 例子:BMP280传感器地址是0x76(7位,十六进制)。
- 通信流程:
- 起始信号 (START Condition):
- 主设备(飞腾派)在SDA高时,将SCL从高拉低,通知“通信开始”。
- 发送地址帧:
- 主设备发送7位从设备地址+1位读/写位(0=写,1=读)。
- 应答信号 (ACK/NACK):
- 匹配地址的从设备拉低SDA(ACK),表示“我在,准备好”。
- 无响应(NACK),主设备重试或停止。
- 数据传输:
- 主设备发/收数据(每8位后有ACK)。
- 停止信号 (STOP Condition):
- SDA低时,SCL从低到高,通信结束,总线空闲。
- 起始信号 (START Condition):
使用I2C总线接口有4种操作模式: 主传送模式、主接收模式、从传送模式、从接收模式。
- I2C总线的2.1版本使用的电源电压是2V,传输速率是0~3.4Mb/s。
- I2C使用3条线,其中串行数据线(SDL)用于数据传送;串行时钟线(SCL)用于指示什么时候数据线上是有效数据;还有一条公共地线。
- 主I2C设备发出时钟信号、地址信号和控制信号,选择通信的从I2C设备和控制收发。
系统要求:
- (1)各个节点设备必须具有I2C 接口功能;
- (2)各个节点设备必须共地;
- (3)两个信号线必须接上拉电阻。
正常情况下,I2C总线上的所有从执行设备被设置为高阻状态,而主执行设备保持高,表示空闲状态。网络中的各设备都可以作为发送器和接收器。 网络中的每一个I2C接口设备都使用开放集电极/开放漏极电路,并被连接到串行时钟信号SCL和串行数据SDA这两个专用线上。
写时序:

读时序:

7.4 同步串行总线:SPI 接口
SPI(Serial Peripheral Interface,串行外设接口)是同步串行数据传输标准, 允许 MCU 以全双工的同步串行方式 与各种外围设备进行高速数据通信。同步时钟信号只由主设备控制,从设备不能控制该信号。
1. 总线结构与信号线
SPI是一种同步串行通信协议,由主设备(飞腾派)控制,连接一个或多个从设备。它用四根线实现高速、全双工通信,结构简单但效率高。
在一个基于SPI的设备中,至少要有一个主控设备。普通的串行通讯一次连续传送至少8位数据。SPI还是一个数据交换协议,因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
- 主从式结构:
- 主设备(Master):飞腾派FTC核心,发起和控制通信。
- 从设备(Slave):如Flash存储、LCD屏,响应主设备指令。
-
四线制:
信号线 全称 主设备角色 从设备角色 作用 SCK Serial Clock 输出 输入 时钟线,主设备发出节奏信号,同步数据传输。 MOSI Master Out Slave In 输出 输入 主设备发送数据的线。 MISO Master In Slave Out 输入 输出 从设备发送数据的线。 CS/SS Chip Select/Slave Select 输出 输入 片选线,主设备拉低(0)选中特定从设备。
SPI具有数据发送、数据接收、时钟和片选4个接口信号,支持全双工和半双工传输方式。主要特点: 8位发送移位寄存器;8位接收移位寄存器;8位预分频器;具有查询、中断、DMA传输模式。

2. SPI 的通信机制与模式
2.1 全双工 (Full Duplex) 通信
- 原理:
- SPI的MOSI和MISO独立,允许主从设备在同一时钟周期同时收发数据,像双向电话。
- 比喻:像两人同时说话和听,不用等对方说完。
- 数据交换:
- 主设备发1字节到MOSI,从设备同时回1字节到MISO。
- 即使从设备无数据,也会返回“空字节”(如0x00)。
2.2 片选与多设备连接
- 选择机制:
- 每个从设备有独立CS线,主设备拉低CS(0)激活目标设备,其他设备静默。
- 多设备:
- 飞腾派用多个CS引脚(如CS0、CS1)接多个从设备(如Flash、LCD)。
- 所有设备共享SCK、MOSI、MISO,只用不同CS区分。
- 飞腾派实践:FTC核心支持多CS(如4个),接Flash和OLED屏,分别控制。
2.3 四种工作模式
SPI的灵活性来自时钟极性(CPOL)和时钟相位(CPHA),定义四种模式:
| 模式 | CPOL | CPHA | 描述 |
|---|---|---|---|
| Mode 0 | 0(空闲低) | 0(第一沿采样) | 最常见,上升沿采样。 |
| Mode 1 | 0(空闲低) | 1(第二沿采样) | 下降沿采样。 |
| Mode 2 | 1(空闲高) | 0(第一沿采样) | 下降沿采样。 |
| Mode 3 | 1(空闲高) | 1(第二沿采样) | 上升沿采样。 |
- CPOL:SCK空闲时是高(1)还是低(0)。
- CPHA:数据在SCK的第一个边沿(上升/下降)或第二个边沿采样。


模式0(CPOL=0,CPHA=0)

模式1(CPOL=0,CPHA=1)

模式2(CPOL=1,CPHA=0)

模式3(CPOL=1,CPHA=1)

飞腾派运行嵌入式Linux,SPI通过内核驱动抽象为设备文件(如/dev/spidev0.0),开发简单,适合高速外设。
- 典型应用:
- Flash存储:如SPI NOR Flash,存储固件,快速读写。
- AD/DA转换器:如MCP3208,采集高速传感器数据。
- LCD/OLED显示:如SSD1306 OLED,快速刷新图形(参考5.4.5)。
SPI是飞腾派的“高速通道”,用四线全双工通信,快速驱动外设。Linux抽象让开发像“写文件”。
7.5 通用串行总线(USB)
USB(Universal Serial Bus,通用串行总线) 就像一条“智能高速公路”,让飞腾派系统(基于FTC核心,ARMv8-A架构)与各种外设(如键盘、U盘、摄像头)轻松连接。USB以其即插即用、高速传输和供电能力,成为现代最常用的接口。 USB 传输协议的制定组织是 USB-IF,成员有苹果、微软、惠普、因特尔等。从 1996 年的第一代 USB 1.0 开始到现在最新的 USB4,中间经历了很多版本。
1. USB 的核心架构与特性
USB是一种功能强大的串行通信协议,设计目标是让设备连接简单、快速、灵活。它像一个“万能插座”,支持多种外设,广泛用于嵌入式和PC系统。
1.1 严格的主从架构
- 主机(Host):
- 只有一个主机,负责管理总线、控制数据传输和分配电源。
- 飞腾派通常作为USB Host,通过USB端口连接外设。
- 设备(Device):
- 外设,如键盘、鼠标、U盘、摄像头。
- 通过集线器(Hub) 扩展,主机可连多个设备(理论上127个)。
- 飞腾派实践:FTC核心内置USB控制器,支持Host模式,连接U盘读取文件。
1.2 三大核心优势
- 热插拔 (Hot-Plug):
- 含义:运行中插拔设备,无需重启。
- 实现:USB协议通过电气信号检测设备插入/拔出,自动处理。
- 比喻:像插拔充电器,随时用随时拔。
- 飞腾派实践:插U盘,Linux自动挂载,无需重启。
- 即插即用 (Plug and Play, PnP):
- 含义:设备插入后,系统自动识别类型、加载驱动、配置。
- 过程:设备通过枚举报告信息(厂商ID、产品ID、类别),主机完成设置。
- 比喻:像新手机连Wi-Fi,自动连上无需手动设置。
- 飞腾派实践:插USB鼠标,Linux加载驱动,立即可用。
- 供电能力:
- USB线(VBUS,5V)传输数据同时供电,低功耗设备(如U盘)无需外接电源。
- USB-PD:支持高功率(如100W),可给笔记本充电。
- 比喻:像带电源的网线,边通信边充电。
- 飞腾派实践:USB端口给摄像头供电,同时传输视频。
注意:按照USB协议,为设备设置一个唯一的地址。
2. USB 速度等级与发展
USB速度不断提升,满足不同需求,所有版本向前兼容(新主机支持旧设备)。
| 速度等级 | USB版本 | 最大速率 | 别名 | 典型应用 |
|---|---|---|---|---|
| 低速 (LS) | USB 1.1 | 1.5 Mbps | 键盘、鼠标 | |
| 全速 (FS) | USB 1.1 | 12 Mbps | 调制解调器、音频设备 | |
| 高速 (HS) | USB 2.0 | 480 Mbps | U盘、摄像头 | |
| 超速 (SS) | USB 3.0/3.1 | 5 Gbps / 10 Gbps | USB 3.0/3.1 Gen 1/2 | 固态硬盘、视频采集 |


- 差分信号:
- USB 2.0及以上用**D+/D-**差分线对,抗干扰,速度快。

目前USB趋向统一到USB Type-C接口

3. USB 信息传输方式
通用串行总线(USB)是一种主从式总线,所有数据传输都由主机(Host,如飞腾派) 发起。USB 协议通过定义四种不同的传输管道(Pipe),来满足各种外部设备(从低速鼠标到高速摄像头)对数据量、实时性和可靠性的不同要求。
1. 同步传输 (Isochronous Transfer)
同步传输主要用于对时间敏感、但允许数据丢失的场景。
- 核心特性:
- 实时保证: 数据流以固定的速率和固定的时间间隔发送,确保了连续性和实时性。
- 不保证正确性: USB 协议不会对同步传输的数据包进行错误校验或重传机制。如果数据包丢失或出错,就不会再发送。
- 高带宽: 占据预留的带宽。
- 适用场景:
- 多媒体应用: 声音、视频流传输(如 USB 摄像头、麦克风、音箱)。在这些应用中,一小部分数据丢失是可以容忍的(表现为轻微的卡顿或噪点),但延迟(Latency)是不可接受的。
2. 中断传输 (Interrupt Transfer)
中断传输是专为传输少量、分散且对实时性要求较高的控制或状态数据设计的。
- 核心特性:
- 实时响应: 尽管名称叫“中断”,但它实际上是主机周期性地轮询设备。主机承诺在一个固定的最大延迟内,会向设备查询是否有数据发送。
- 低延迟: 延迟时间最短可达 1 毫秒(ms)。
- 数据量小: 每次传输的数据包大小有限。
- 适用场景:
- 人机接口设备 (HID): 键盘、鼠标、游戏杆、触摸板。这些设备的数据量很小,但必须实时响应用户的操作,任何明显的延迟都会导致体验不佳。
3. 批量传输 (Bulk Transfer)
批量传输是 USB 中最常用的传输方式,专用于传输大量数据,并且必须确保数据完整性的场景。
- 核心特性:
- 保证正确性: 协议中包含错误校验和重传机制。如果数据传输失败,USB 会不断尝试重传,直到数据正确到达为止。
- 无实时性保证: 传输时机不确定,它会利用总线上所有未被其他类型传输占用的空闲带宽。如果有同步传输或中断传输发生,批量传输必须等待。
- 高吞吐量: 效率很高,能够传输非常大的数据块。
- 适用场景:
- 存储设备:U 盘、外部硬盘。 数据必须完整、准确地写入或读出。
- 输出设备:打印机、扫描仪。 打印文件不能出现丢失或错误。
- 飞腾派调试: 在飞腾派上,通过 **ADB(Android Debug Bridge)**或其他高速文件传输协议进行文件传输时,通常基于批量传输。
4. 控制传输 (Control Transfer)
控制传输用于系统级的配置和管理,是所有 USB 设备都必须支持的传输类型。
- 核心特性:
- 命令和状态: 用于发送命令、接收状态、配置参数等。
- 三阶段过程: 传输过程分为**设置阶段(Setup)、数据阶段(Data,可选)和状态阶段(Status)**三个阶段,确保操作的原子性和完整性。
- 数据量极小: 通常只传输少量的控制信息。
- 适用场景:
- 设备枚举(Enumeration): 当设备插入飞腾派时,主机读取设备的描述符(Descriptor)、分配地址等初始化操作。
- 设备配置: 主机设置设备的各项工作参数。
- 状态查询: 主机查询设备的工作状态或错误信息。
在飞腾派这类复杂的嵌入式系统中,一个 USB 设备通常会同时使用多种传输方式:例如,一个多功能打印机可能使用批量传输来发送文件数据,使用中断传输来报告墨盒状态,并使用控制传输来接收配置命令。
4. USB 集线器
关于 USB 集线器的层数,USB1.1 中最多 4 层,USB2.0 中最多 6 层。最多连接127个设备,但是Host会占据一个ID

7.6 现场总线:CAN 接口
CAN(Controller Area Network,控制器局域网)总线就像一条“抗干扰高速公路”,专为高可靠性、实时性场景设计。最初为汽车电子开发,CAN如今广泛用于工业控制、机器人和医疗设备。
1. CAN 总线的核心结构与特性
CAN总线是一种多主串行通信协议,用于实时应用的串行通信协议,它可以使用双绞线来传输信号。该协议由德国的Robert Bosch公司开发,用于汽车中各种不同电子元件之间的通信,以此取代配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括有高完整性的串行数据通信、提供实时支持、传输速率高达1Mbps、同时具有11位的寻址以及检错能力。CAN控制系统强调集成、规模化的工作方式,具有抗干扰能力强、实时性好、系统错误检测和隔离能力强的优点。
CAN总线属于现场总线之一,也是一种多主方式的串行通讯总线。总线使用串行数据传输方式,可以以1Mb/s的速率在40米双绞线上运行,也可以使用光缆链接,而且在这种总线上总线协议支持多主控器。

1.1 多主特性(Multi-Master)
- 地位平等:
- 所有节点(称为ECU,电子控制单元,如传感器、控制器)地位相同,无固定主从之分。
- 通信自由:
- 节点在总线空闲时广播报文(消息),其他节点根据报文ID决定是否接收。
1.2 差分信号与高可靠性
- 差分信号:
- CAN用两根线:CAN_H(高电平)和CAN_L(低电平),传输电压差(差分信号)。
- 抗干扰能力:
- 外部噪声(如电磁干扰)同时影响CAN_H和CAN_L,称为共模干扰。
- 接收器只关心电压差,忽略共模干扰,通信稳定。
2. 报文仲裁机制
CAN总线的独特之处在于非破坏性仲裁,确保多个节点同时发送时,高优先级报文优先传输,且无数据丢失。
- 仲裁需求:
- 多个节点同时发送报文,需决定谁优先。
- 仲裁过程:
- 优先级确定:
- 每个报文有ID标识符(11位或29位),ID越小优先级越高。
- 同步监听:
- 节点发送ID时,监听总线电平。
- CAN用线与逻辑(Wired-AND):显性(0,低电压差)覆盖隐性(1,高电压差)。
- 非破坏性:
- 发送隐性(1)但监听到显性(0)的节点停止发送,优先级高的报文继续。
- 仲裁结果:
- 高优先级报文无损传输,低优先级节点稍后重试。
- 优先级确定:
- 例子:
- 节点A(ID=001)与节点B(ID=000)同时发送。
- 第3位,A发1,B发0,总线显性(0),A停止,B继续。
3. CAN总线的标准数据帧结构

CAN 总线(Controller Area Network)的标准数据帧(Standard Data Frame, CAN 2.0A)是其最主要的报文类型,用于节点间传输数据。 CAN 标准数据帧由七个主要的位域组成,其结构旨在实现高可靠性、优先级仲裁和错误检测等关键功能。 CAN 标准数据帧结构使用 11 位标识符,这是其与扩展数据帧(29 位标识符)的主要区别。 下表列出了标准数据帧的各个位域及其功能:
| 位域 (Field) | 位数 | 描述 |
|---|---|---|
| 1. 帧起始 (SOF) | 1 | 始终是 显性电平(逻辑 0),用于同步总线上的所有节点。 |
| 2. 仲裁域 (Arbitration Field) | 12 | 决定报文的优先级,用于总线仲裁。 |
| - 标识符 (ID) | 11 | |
| - 远程发送请求 (RTR) | 1 | 显性电平(0)表示数据帧;隐性电平(1)表示远程帧(请求其他节点发送数据)。 |
| 3. 控制域 (Control Field) | 6 | 包含数据帧的控制信息。 |
| - 标识符扩展位 (IDE) | 1 | 显性电平(0)表示标准帧。 |
| - 保留位 (r0) | 1 | 保留位,通常设置为显性电平(0)。 |
| - 数据长度码 (DLC) | 4 | 表示数据域中有效字节的数量(0 到 8 字节)。 |
| 4. 数据域 (Data Field) | 0 - 64 (0 - 8 字节) | 实际传输的数据,长度由 DLC 决定。 |
| 5. CRC 域 (CRC Field) | 16 | 用于错误检测。 |
| - CRC 序列 | 15 | 循环冗余校验码,计算范围从 SOF 到数据域末尾。 |
| - CRC 界定符 | 1 | 隐性电平(逻辑 1),将 CRC 序列与 ACK 域隔开。 |
| 6. ACK 域 (ACK Field) | 2 | 用于确认报文是否正确接收。 |
| - ACK 位 | 1 | 发送方发送 隐性电平(1)。总线上的任何接收节点若正确接收报文,则将其覆盖为 显性电平(0)进行确认。 |
| - ACK 界定符 | 1 | 隐性电平(1),将 ACK 位与 EOF 隔开。 |
| 7. 帧结束 (EOF) | 7 | 连续 7 个 隐性电平(1),标志数据帧的结束。 |
| 总线间歇 (Intermission) | 3 | 帧结束后的最小总线空闲时间(3 个 隐性电平),用于错误恢复和总线准备。 |
小结
本章详细介绍了嵌入式系统与外部世界进行数据交换的串行数据通信接口设计与应用。首先,对接口进行了基础分类。随后,介绍了三种通信工作模式:单工(单向传输)、半双工(双向分时)和 全双工(双向同时)。最后聚焦于几种主流串行总线:UART、I²C 、 SPI 、USB和 CAN 总线,介绍各类接口特点和组成。