在此收集整理嵌入式通信中常见的接口协议,它们具有一定的通用性,在今后的开发中会反复遇到。
包括但不限于以下类别(逐步完善中…):
- 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. 软件协议
- 整体时序:
- 空闲状态:SDA、SCL均为高电平
- 开始信号:SDA首先跳变为低电平,表示有数据传输开始,SCL跟着开始跳变为低电平
- 结束信号:SDA首先跳变为高电平,表示有数据传输结束,SCL跟着开始跳变为高电平
- 主机写操作:START + 从机地址(7bit)+ R/W_n(1bit,“0”)+ ACK(1bit)+ Data(8bit)+ ACK(1bit)+ STOP,其中每个ACK由从机占据总线提供。
- 主机读操作:START + 从机地址(7bit)+ R/W_n(1bit,“1”)+ ACK(1bit)+ Data(8bit)+ ACK(1bit)+ STOP,其中第一个ACK由从机占据总线提供,之后的每个ACK由主机占据总线提供。
- 具体Data是什么含义,根据芯片手册而定
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接口通信协议详解
NAND Flash类
1. 基本介绍
2. 硬件连接
3. 软件协议
4. 参考资料
SDRAM类(ram-like)
1. 基本介绍
2. 硬件连接
3. 软件协议
4. 参考资料
LCD RGB888
1. 基本介绍
LCD,全称Liquid Crystal Display,的RGB888接口是一种用于传输图像数据到LCD面板的并行数字接口。RGB888接口之所以得名,是因为它使用了RGB(红、绿、蓝)三种颜色通道,每个通道使用8位来表示颜色强度,从而形成了24位颜色深度。
- 24位颜色深度:RGB888接口使用24位来表示每像素的颜色信息,这意味着每个像素的颜色可以由R、G、B三个8位的二进制数来确定。这种格式可以表示16,777,216种颜色(2^8 * 2^8 * 2^8),也就是通常所说的真彩色。
- 并行传输:与串行接口不同,RGB888接口使用并行的方式传输数据,这意味着红、绿、蓝三个颜色通道的数据是同时传输的。这种并行传输可以提供更高的数据吞吐量,适合高分辨率和高刷新率的LCD屏幕。
- 控制信号:除了RGB数据线之外,RGB888接口还包含一些必要的控制信号,如:
Hsync(水平同步):用于指示一行像素数据的开始和结束。
Vsync(垂直同步):用于指示一帧(屏幕刷新周期)的开始和结束。
Pixel Clock(像素时钟):用于同步数据传输速率,确保数据正确地与屏幕上的像素位置对应。
可能还包括其他信号,如数据使能(DE)等,用于进一步控制数据的有效性。 - 数据线:对于RGB888,通常会有至少24根数据线(8根红色、8根绿色和8根蓝色),再加上控制信号线,构成了整个接口。
2. 硬件连接
- 示意图1
- 示意图2
其中最核心的引脚有:
- R[7:0]:8bit,传输一个像素的红色分量数据
- G[7:0]:8bit,传输一个像素的绿色分量数据
- B[8:0]:8bit,传输一个像素的蓝色分量数据
- HSYNC:水平同步信号,行同步
- VSYNC:垂直同步信号,场同步
- CLK:时钟信号
3. 软件协议
- 整体时序图:
时序说明: - 像素时钟 (DCLK):
这是最重要的时钟信号,用于同步像素数据的传输。每个像素数据包(24位)会在这个时钟的上升沿或下降沿被采样。 - 水平同步信号 (HSYNC):
HSync是一个脉冲信号,用于标识一行像素数据的开始。当HSync有效时(通常是低电平),表示一行的开始,LCD控制器应准备好接收新一行的数据。 - 垂直同步信号 (VSYNC):
类似于HSync,但用于标识一帧的开始。当VSync有效时,表示新的一帧开始,LCD控制器应准备好接收新一帧的数据。 - 数据使能信号 (Data Enable, DE):
DE信号用于指示当前传输的像素数据是有效的。在DE有效期间,像素时钟下的数据将被LCD控制器接受并处理。 - 数据传输:
在DE信号有效期间,RGB数据在像素时钟的同步下按顺序传输。例如,对于RGB888,每一组24位数据代表一个像素的颜色值,其中8位用于红色(R),8位用于绿色(G),8位用于蓝色(B)。 - 前后沿空白期 (Front Porch 和 Back Porch):
在HSync和VSync信号之间,有前空白期和后空白期。前空白期是在HSync或VSync信号开始之前的一段时间,而后空白期是在HSync或VSync信号结束之后到下一行为或帧开始之前的一段时间。这些空白期用于信号的稳定和LCD控制器的准备。 - 行间隔 (Line Interval):
这是从一行的HSync信号结束到下一行的HSync信号开始的时间。它包括了有效像素数据传输时间加上前后空白期的时间。 - 帧间隔 (Frame Interval):
这是从一帧的VSync信号结束到下一帧的VSync信号开始的时间。它包括了有效行数据传输时间加上前后空白期的时间。
具体时间设置需要参看开发板处理器芯片手册以及LCD芯片手册的要求。
4. 参考资料
FPGA 25 RGB888(兼容RGB565) 屏幕驱动设计