在此收集整理嵌入式通信中常见的接口协议,它们具有一定的通用性,在今后的开发中会反复遇到。
包括但不限于以下类别(逐步完善中…):
- GPIO
- UART
- SPI
- I2C
- USB
- Ethernet
- NAND Flash类
- SDRAM类(ram-like)
- LCD
- MIPI
GPIO
1. 基本介绍
GPIO,全称General-Purpose Input/Output,即通用输入/输出接口,是嵌入式系统中一种常见的接口类型。它允许微控制器(MCU)或微处理器(MPU)与外部设备进行数字信号的交互。GPIO端口通常由一系列可配置的引脚组成,每个引脚都可以独立设置为输入或输出模式,并且可以根据需要进行编程。
- 可配置性:
GPIO引脚的功能可以通过软件配置,既可以作为输入接收外部信号,也可以作为输出发送信号。输出模式下,可以设定为推挽输出或开漏输出,以适应不同的负载类型。输入模式下,可以配置为上拉、下拉或浮空状态。 - 工作模式:
STM32等微控制器的GPIO具有多种工作模式,包括但不限于输入浮空、输入上拉、输入下拉、推挽输出、开漏输出、模拟输入等。
某些GPIO还可以配置为复用功能,例如作为时钟信号、中断信号或与其他外设(如USART、SPI、I²C等)共享的信号线。 - 寄存器控制:
GPIO的操作通过一组寄存器进行,包括数据方向寄存器(设置引脚的方向)、数据输出寄存器(设置输出引脚的值)、数据输入寄存器(读取输入引脚的值)等。还可能有中断使能寄存器、配置寄存器等,用于控制中断和引脚的其他特性。 - 应用:
控制LED、继电器、按键等简单外设。读取传感器的状态,如光敏电阻、温度传感器等。用于设备间的基本通信,如通过GPIO实现简单的串行通信或同步脉冲信号。实现复杂的系统级功能,如通过GPIO配置产生PWM波形控制电机速度。 - 优点:
GPIO提供了灵活的接口,使得开发者能够根据项目需求调整硬件配置。小封装,占用空间小,易于集成。成本效益高,因为GPIO端口通常内置于微控制器中,不需要额外的外设。 - 注意事项:
在使用GPIO时,需要注意驱动能力,确保所连接的外设不会超过GPIO的最大电流限制。对于输入引脚,应考虑噪声抑制和保护措施,避免外部干扰导致错误的信号读取。
2. 硬件连接
- 单端IO引脚,上拉或者下拉
3. 软件协议
需要了解GPIO的寄存器布局和地址。通过对特定寄存器的读写配置,即可完成对GPIO引脚的配置以及数据的输入输出。
4. 参考资料
GPIO
UART
1. 基本介绍
UART,全称Universal Asynchronous Receiver/Transmitter,是一种用于串行通信的标准协议,通常用于微控制器和其他设备之间的数据传输。UART的主要功能是将并行数据转换为串行数据,以便通过单一通信线路(加上一个地线)进行传输,然后在接收端再将串行数据转换回并行数据。
- 异步通信:UART采用异步方式工作,这意味着发送方和接收方不需要共享时钟信号。数据的传输速率(波特率)在通信开始前由双方预先设定好,从而保证数据的正确接收。
- 数据格式:UART数据传输的格式通常包含一个起始位(start bit)、5至8位的数据位(data bits)、一个或多个停止位(stop bits)以及可选的奇偶校验位(parity bit)。起始位用于表示一个字符的开始,停止位用于表示一个字符的结束。
- 波特率:波特率定义了数据传输的速度,单位是位每秒(bps)。常见的波特率有9600bps、19200bps、115200bps等。
- 硬件接口:UART通信通常使用两条线路,分别是TX(发送)和RX(接收),在某些情况下,可能还会有一条用于硬件流控制的线路,如RTS(请求发送)和CTS(清除发送)。
- 设备间通信:通常使用串口转USB连接微控制器与个人电脑,进行程序下载、调试或数据采集。在嵌入式系统中,UART可以用于连接不同类型的设备,如传感器、执行器、显示器等。
2. 硬件连接
-
示意图1
-
示意图2
-
RX
-
TX
3. 软件协议
UART通信双方需要约定通信COM端口、波特率、数据位、检验位、停止位数等。只能人为事先约定好。
比如:波特率115200bps、数据位8bit、无校验、停止位1bit
4. 参考资料
UART通信协议及其工作原理
I2C
1. 基本介绍
I2C,全称Inter-Integrated Circuit,是一种两线式串行总线协议,由NXP半导体公司(前身为飞利浦半导体)开发,用于连接低速的微控制器和各种外围设备,如EEPROM、A/D转换器、D/A转换器、I/O扩展卡、实时时钟、传感器等。
- 两线制:I2C总线使用两条信号线:SDA(Serial Data Line,串行数据线)和SCL(Serial Clock Line,串行时钟线)。
- 半双工通信:数据在SDA线上是单向的,但方向可以改变,因此被称为半双工。这意味着设备要么发送数据,要么接收数据,不能同时进行。
- 主从架构:I2C总线允许多个设备共享同一总线,但在任何时候只能有一个主设备。主设备负责初始化数据传输并提供时钟信号。从设备响应主设备的请求。
- 寻址机制:每个I2C设备都有一个唯一的7位或10位地址,这使得主设备能够选择特定的从设备进行通信。7位地址允许最多128个不同的设备,而10位地址可以支持更多的设备。
- 仲裁机制:当多个主设备试图同时控制总线时,I2C总线具有内置的仲裁机制,以避免数据冲突。如果两个或更多的主设备同时启动总线,那么具有较低地址的主设备将获得总线控制权。
- 可扩展性:理论上,I2C总线可以连接无限数量的设备,但实际中受到总线电容和电流限制的约束。
- 低功耗:I2C总线的低信号电平和简单的布线要求使其成为低功耗应用的理想选择。
- 标准速度:I2C总线有几种速度模式,包括标准模式(最高100 kbps)、快速模式(最高400 kbps)、高速模式(最高3.4 Mbps)和超快速模式(高于3.4 Mbps,具体取决于设备)。
- 简单性:I2C总线的简单性和低成本使其成为许多嵌入式系统和微控制器应用中常见的通信标准。
2. 硬件连接
- SDA:Serial Data Line,串行数据线
- SCL:Serial Clock Line,串行时钟线
3. 软件协议
4. 参考资料
基础通信协议之 IIC (I2C) 详细讲解
SPI
1. 基本介绍
SPI,全称为Serial Peripheral Interface(串行外设接口),是一种高速、全双工、同步的串行通信总线,主要用于短距离的芯片间通信。SPI最初由Motorola(摩托罗拉)在20世纪80年代中期定义,现在已经被广泛采用,特别是在嵌入式系统中。
- 全双工通信:SPI能够在两个方向上同时传输数据,即发送和接收可以同时进行,这使得数据交换更高效。
- 同步串行:SPI通信是同步的,意味着数据的传输受一个共同的时钟信号控制,这个时钟信号通常由主设备提供。
- 四线接口:SPI接口通常使用四根线,包括:
MISO(Master In Slave Out,主设备接收数据)
MOSI(Master Out Slave In,主设备发送数据)
SCK(Serial Clock,串行时钟)
SS/CS(Slave Select/Chip Select,从设备选择信号) - 主从架构:SPI通信总是有一个主设备和一个或多个从设备。主设备控制通信的开始和结束,以及时钟信号的生成,而从设备则响应主设备的指令。
- 可配置的数据帧大小:SPI支持可变长度的数据帧,从8位到16位甚至更多,这取决于具体的应用需求和设备的能力。
- 简单易用:SPI接口的简单性使得它在需要短距离、高速数据传输的应用中非常受欢迎,例如在微控制器与外围设备如ADC(模数转换器)、DAC(数模转换器)、EEPROM(电可擦除可编程只读存储器)、闪存、传感器和其他IC芯片之间的通信。
- 扩展性:虽然SPI是基于点对点的通信,但是通过使用多个CS/SS信号,可以实现一个主设备与多个从设备之间的通信。
2. 硬件连接
-
示意图1
-
示意图2
-
SCK:时钟信号,主设备发出
-
MOSI:主出从入
-
MISO:主入从出
-
SS_n:片选,使能
3. 软件协议
通过CPOL、CPHA来设置SPI工作模式
CPOL:0,SCK空闲时为低电平;1,SCK空闲时为高电平
CPHA:0,第一个跳变沿开始采样;1,第二个跳变沿开始采样
4. 参考资料
SPI原理超详细讲解
SPI接口通信协议详解