嵌入式C语言面试相关知识——常见的四种通信协议:I²C、SPI、USART、CAN;一种数据通信机制:DMA
嵌入式C语言面试相关知识——常见的四种通信协议:I²C、SPI、USART、CAN;一种数据通信机制:DMA
- 一、博客声明
- 二、I²C或IIC (Inter-Integrated Circuit)
- 1、概念
- 2、工作原理
- 3、通信过程
- 4、优缺点
- 5、典型应用
- 三、SPI (Serial Peripheral Interface)
- 1、概念
- 2、工作原理
- 3、通信过程
- 4、优缺点
- 5、典型应用
- 四 、UART(Universal Asynchronous Receiver/Transmitter)
- 1、概念
- 2、工作原理
- 3、通信电平
- 4、数据格式
- 5、优缺点
- 6、典型应用
- 五、 CAN网络(Controller Area Network)
- 1、概念
- 2、工作原理
- 3、通信数据格式
- 4、优缺点
- 5、典型应用
- 六、 I²C 、SPI 和UART对比
- 七、DMA(Direct Memory Access)是一种机制
- 1、概念
- 2、工作原理
- 3、优缺点
- 4、典型应用
一、博客声明
又是一年一度的秋招,怎么能只刷笔试题目呢,面试题目也得看,想当好厂的牛马其实也不容易呀O(∩_∩)O。注意:这篇博客大部分是来自网上的资源,通过自问或者他问,然后寻找答案,为了加深印象,总结或者抄一遍。
二、I²C或IIC (Inter-Integrated Circuit)
1、概念
又称为内部集成电路总线,是一种常用于嵌入式系统的两线串行总线协议,主要用于短距离设备间的低速通信。
2、工作原理
- 两线: 通过时钟同步传输数据。
- SCL(时钟线)
- SDA(数据线)
- 半双工: 同一时间只能进行单向数据传输。
- 主从模式: 一个主设备可以与多个从设备进行通信,每个从设备都有唯一的地址。主设备负责发出时钟信号并控制通信。
3、通信过程
- 起始条件: 主设备在总线上的SDA和SCL上产生一个起始条件,来通知总线上的从设备准备开始通信。开始的标志是,SCL高电平时,主设备将SDA从高电平拉低到低电平。
- 设备寻址: 主设备发送从设备的地址,通过这个地址来选择和哪个从设备进行通信。地址长度为 7位 或者是 10位 ,分别可以连接 128个从设备 或者 1024个从设备
7位地址: | 地址7位 | R/W 1位 | 10位地址:| 地址前5位 | 特定位 | 地址后8位 | R/W 1位 |
- 应答信号(ACK/NACK): 设备寻址完成后,从设备需要发回一个应答信号(ACK) 来确认已经收到地址和通信请求。这个应答信号时从设备的SDA进行发出,拉低代表确认应答(ACK),SDA维持高电平表示没有设备响应(NACK)。
- 数据传输: 主设备或从设备通过SDA线传输数据,每次传输1字节。在每个字节的传输完成后,接收方会发送ACK信号,表示数据传输成功。
- 停止条件: SCL高电平时,主设备将SDA从低电平拉高到高电平,表示通信结束。总线释放出来可以进行新的传输。
4、优缺点
- 优点: 只需要两条线,简化连接;支持多设备共享同一总线。
- 缺点: 速度慢,通常在100kHz ~ 400kHz之间,适合低速设备。不适合长距离通信,主要用于板内通信。
5、典型应用
温湿度传感器、LCD1206屏幕、RTC实时时钟等设备。
三、SPI (Serial Peripheral Interface)
1、概念
又称为串行外围接口,是一种串行通信协议,用于短距离高速数据传输。
2、工作原理
- 四线:
- SCLK(串行时钟)
- MOSI(主设备输出,从设备输入)
- MISO(主设备输入,从设备输出)
- SS/CS(从设备选择)
- 全双工: 可以同时进行双向数据传输。
- 主从模式: 主设备负责发出时钟信号并与多个从设备通信,通过选择不同的SS/CS,可以控制与哪个从设备通信。
3、通信过程
-
选择从设备: 使用片选信号引脚(SS/CS)选择从设备。
-
数据传输:
- 主设备将要发送的数据放入 MOSI(Master Out Slave In)线。
- 主设备产生时钟信号,SCK 线从低电平拉高,通知从设备数据的开始。
- 从设备在 SCK 的高电平期间读取 MOSI 线上的数据。
- 同时,从设备可以在 MISO(Master In Slave Out)线上发送数据回主设备。
- 当数据传输完成后,主设备可以拉高 CS 信号,结束通信。
-
时钟信号管理: SPI 协议允许主设备设置时钟极性(CPOL)和时钟相位(CPHA),这决定了数据在时钟的上升沿还是下降沿被读取。根据这两个参数,SPI 有四种工作模式(Mode 0 到 Mode 3):
- Mode 0: CPOL = 0, CPHA = 0
- Mode 1: CPOL = 0, CPHA = 1
- Mode 2: CPOL = 1, CPHA = 0
- Mode 3: CPOL = 1, CPHA = 1
4、优缺点
- 优点:
- 速度快,可以达到几Mkhz,适合高速通信。
- 全双工传输,速度更高效。
- 缺点:
- 引脚多,多个从设备时,每个设备都需要一个独立的CS引脚。
- 没有像 I²C 那样的设备地址,增加硬件的复杂性。
5、典型应用
通信模块、显示屏、存储器、音频解码芯片。
四 、UART(Universal Asynchronous Receiver/Transmitter)
1、概念
又称为通用异步收发器,是一种常见的异步串行通信协议,用于点对点的数据传输。
2、工作原理
- 两线:
- TX(发生数据)
- RX(接受数据)
- 全双工: 可以同时进行双向数据传输。
- 点对点通信: 一对一的全双工通信。
- 波特率: 没有时钟线,通信双方需要约定好波特率(即传输速率)。
3、通信电平
根据距离区别分为了以下三种。图片来源:DigiKey得捷
4、数据格式
一共包含了下面四个部分:
- 起始位: 用于标志数据传输的开始,通常为逻辑低电平。
- 数据位: 可以是5位到9位的实际数据,常见的是8位。
- 校验位: 用于检测传输过程中是否发生了数据错误。
- 停止位: 标志数据传输的结束,可以是1位或2位,通常是逻辑高电平。
5、优缺点
- 优点:
- 简单可靠、时候长距离通信。
- 全双工传输,速度更高效。
- 缺点:
- 没有时钟信号,需要准确配置波特率。
- 通信速度受限,通常几百Kbps到几Mbps之间。
6、典型应用
电脑串口通信、GPS模块、蓝牙模块,单片机串口。
五、 CAN网络(Controller Area Network)
1、概念
又称为控制器局域网,是一种多主(multi-master)、多节点的串行通信协议,允许多个设备之间通过一个共享的总线进行实时的数据交换。
2、工作原理
- 两线:
- CAN_H(高电平)
- CAN_L(低电平)
- 广播总线通信: 是一种广播总线通信,所有设备共享一根总线。每个设备都可以发送和接收数据,总线上的所有节点都能够接收到每一个数据帧,但是每个节点只会处理与自己相关的数据。
- 差分信号: 协议通过差分信号来传输数据、即通过CAN_H和CAN_L之间的电压差分来判断信号状态。
3、通信数据格式
-
帧结构:
- 数据帧:传输实际的数据信息。
- 远程帧:请求其他节点发送数据。
- 错误帧:检测到错误时发送。
- 过载帧:告诉发送方,接收节点忙,暂时不能接收数据。
-
数据帧的组成:
-
帧起始位:用于识别帧的开始。
-
标识符:用于标识数据的优先级和消息类型,11位或者是29位标识符。
-
控制字段:包含数据长度和远程请求信息。
-
数据字段:包含实际要传输的数据,数据长度可变,0~8字节。
-
CRC校验字段:用于数据的错误检测。
-
确认字段:接收方确认数据正确接收。
-
帧结束位:标识帧的结束。
| Start | Identifier | Control | Data | CRC | ACK | End |
-
4、优缺点
- 优点: 使用差分信号,抗干扰能力强,适合长距离通信,多节点,长距离传输。
- 缺点: 布线复杂,非安全性,数据帧长度有限制。
5、典型应用
汽车、工业自动化、医疗设备等。
六、 I²C 、SPI 和UART对比
特性 | I²C | SPI | UART | CAN |
---|---|---|---|---|
线速 | 2(CSL、SDA) | 4(SCLK、MOSI、MISO、CS) | 2(TX、RX) | 2(CAN_H、CAN_L) |
速度 | 慢,通常100kHz ~ 400kHz | 快,1MHz以上 | 中速,典型9600bps ~ 1Mbps | 中等,最高 1Mbps(标准),8Mbps(CAN FD) |
通信方式 | 半双工 | 全双工 | 全双工(异步) | 半双工(差分) |
多设备支持 | 支持,使用设备地址 | 支持,使用CS线 | 不支持 | 支持,使用 ID 仲裁 |
复杂性 | 相对简单 | 相对复杂 | 简单 | 中等,带仲裁和错误处理机制 |
应用场景 | 传感器、低速设备 | 高速设备、音频、视频数据 | 串行通信、GPS、蓝牙模块 | 汽车、工业自动化、医疗设备 |
七、DMA(Direct Memory Access)是一种机制
1、概念
又称为直接存储访问,它不是一种通信协议,而是一种通信机制,用于嵌入式系统中高效地进行数据传输。
2、工作原理
- 不依赖CPU: DMA控制器可以在不依赖CPU直接干预的情况下,在内设与外设、内存与内存之间传输数据。
- 大数据传输: 当需要进行大块数据传输时,CPU可以将任务交给DMA控制器,然后进行处理其他的任务,DMA负责完成数据传输并通知CPU。
- 常见操作: 数据从ADC传输到内存,或者从内存传输到DAC。
3、优缺点
- 优点:
- 提高了效率,减少了CPU在大数据任务中的负担。
- 加快数据传输速度,特别是大块数据传输中,极大提高系统性能。
- 缺点:
- 硬件和软件实现较为复杂。
- 不适合小块、频繁的数据传输。
4、典型应用
音频、视频数据流传输,网络数据包传输,图像处理。