硬件接口详解

一、总线

串口

UART

UART是异步串行通信,用TTL电平来表示,使用高低电平通讯,经典的RS-232与RS-485都由UART经过芯片转换来实现。

RS-232

硬件Pin针脚定义(*为核心针脚): RS-232为±9V以上的电压通讯,靠GND做参考

引脚编号 英文简称 中文名称 核心功能
1 DCD 载波检测 告知终端远程设备已连接(如调制解调器检测到载波)
2* RXD* 接收数据 接收来自外部设备的数据
3* TXD* 发送数据 向外部设备发送数据
4 DTR 数据终端就绪 通知外部设备自身已准备好通信
5* GND* 信号地 所有信号的参考地线,是通信必需的关键引脚
6 DSR 数据设备就绪 外部设备通知终端自身已准备就绪
7 RTS 请求发送 请求向外部设备发送数据,属于硬件流控信号
8 CTS 清除发送 响应 RTS 信号,告知终端可发送数据
9 RI 振铃指示 通知终端有来电振铃(常用于调制解调器)

接口属性:
RS-232 是单端电平的异步串口,用 ±3~±15V 表示逻辑,需 3 根核心线(TXD 发、RXD 收、GND 地)就能通信,支持全双工,传输距离≤15 米、速率≤20kbps,抗干扰一般,适合近距离点对点连接(如调试、老设备通信),需和对方波特率、数据格式一致才能用。

时序:
异步通信没有时钟线,全靠「约定好的时序参数」同步,单次传输的数据包格式如下(从左到右):
空闲状态 → 起始位 → 数据位 → 校验位(可选) → 停止位 → 空闲状态

用法:

接线类型 适用场景 所需引脚(DB9) 接线逻辑
最简通信(推荐) 短距离、低速率(如调试) TXD(3)、RXD(2)、GND(5) 设备 A TXD → 设备 B RXD;设备 A RXD → 设备 B TXD;GND 直接相连
硬件流控通信 高速 / 大数据量(如工业设备) 加 RTS (7)、CTS (8) 设备 A RTS → 设备 B CTS;设备 A CTS → 设备 B RTS(避免缓冲区溢出)
全功能通信 需状态检测(如 Modem 拨号) 加 DTR (4)、DSR (6)、DCD (1)、RI (9) 按引脚定义对应连接,用于设备就绪检测、载波检测等

RS-485

RS-285为差分信号A线与B线相差2V~6V,2条线为1组为半双工、全双工则由2组组成,GND是必须的

modubus-RTU

接口Pin:

引脚编号 英文简称 中文名称 核心功能
1 GND 信号地 参考地,增强抗干扰性(建议必接)
2 A/D+ 差分信号正端 与 B 端组成差分传输,高电平表示逻辑 1(部分手册标为 Data+)
3 B/D- 差分信号负端 与 A 端组成差分传输,低电平表示逻辑 0(部分手册标为 Data-)
4-9 预留 备用 / 扩展 可用于电源、硬件流控(实际极少用)

接口属性:

  1. 信号类型:差分传输(A/B 双端),抗干扰极强;
  2. 通信模式:半双工(需 DE/RE 引脚控制收发方向);
  3. 传输能力:9600bps 时最远 1200 米,支持最多 32 个节点组网;
  4. 核心参数:异步通信,波特率 / 数据格式与 RS-232 兼容(8N1 常用);
  5. 硬件要求:需 120Ω 终端电阻(远距离),推荐屏蔽双绞线;
  6. 协议特性:仅物理层规范,常用 Modbus RTU 上层协议,工业场景首选。

时序:
与RS-232一致,参考上面RS-232

用法:

接线类型 适用场景 所需引脚(DB9) 接线逻辑
最简组网(推荐) 短距离、少节点(≤10个)、低速率(如传感器组网) A(2)、B(3)、GND(1) 所有设备的 A 引脚互连、B 引脚互连、GND 引脚互连;总线两端设备的 A/B 间各接120Ω终端电阻
工业稳定组网 长距离(>10米)、多节点(≤32个)、高速(如Modbus RTU) A(2)、B(3)、GND(1)、DE(4)、RE(5) 1. A/B/GND 总线互连+两端120Ω终端电阻;2. 主/从设备 DE 与 RE 短接,通过GPIO控制(高电平发送、低电平接收)
全功能冗余组网 工业关键场景(需抗干扰+状态监测) A(2)、B(3)、GND(1)、DE(4)、RE(5)、备用(6-9) 1. 基础组网+终端电阻+DE/RE方向控制;2. 备用引脚可接电源(给从设备供电)或额外差分线(冗余备份)

modubus-TCP

基于网络的TCP协议,使用了RTU逻辑,可以理解为把把RTU封装进TCP

包括如下内容: 1、硬件接口的pin 定义。 2、接口属性。 3、时序,或者是协议。 4、用法。。

SPI

SPI

SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行通信协议(全双工)

传统SPI针脚定义 片选由主机产生,降低电压,触发从机工作,一个芯片可能有多个CS引脚,每个引脚对应一个从机。 时钟信号,由主机产生,同步数据传输时序。 时钟信号、MOSI、MISO可以复用

针脚名称 功能描述
SCLK(Serial Clock) 时钟信号,由主机产生,同步数据传输时序
MOSI(Master Out Slave In) 主机输出→从机输入(数据发送线)接SDI
MISO(Master In Slave Out) 从机输出→主机输入(数据接收线)接SDO
CS/SS(Chip Select) 片选信号,低电平有效(选中指定从机)

QSPI

QSPI(Quad SPI,四线串行外设接口)是SPI的扩展,使用4条数据线进行传输,提高数据传输速率。

针脚名称 功能描述
SCLK(Serial Clock) 时钟信号,由主机产生,同步数据传输时序
CS/SS(Chip Select) 片选信号,低电平有效(选中指定从机)
IO0/D0 双向数据线 0(兼容传统 SPI 的 MOSI) 双向
IO1/D1 双向数据线 1(兼容传统 SPI 的 MISO) 双向
IO2/D2 双向数据线 2(部分芯片复用为写保护功能 / WP#) 双向
IO3/D3 双向数据线 3(部分芯片复用为保持功能 / HOLD#) 双向

LPSPI

可以理解为低功耗的QSPI,主要用于一些电池设备,有对功耗的深度优化,支持休眠模式下工作

引脚名称 功能描述 方向
SCK 串行时钟信号(主模式输出,从模式输入) 主→从
PCS[0-3] 片选信号(低电平有效),选择目标从设备 主→从
SOUT/DATA[0] 串行数据输出(可配置为输入),四线模式下为数据位 0 双向
SIN/DATA[1] 串行数据输入(可配置为输出),四线模式下为数据位 1 双向
DATA[2] 四线模式下为数据位 2(部分芯片复用为其他功能) 双向
DATA[3] 四线模式下为数据位 3(部分芯片复用为其他功能) 双向

FlexSPI

性能最强的SPI

引脚名称 功能描述 方向
SCK 串行时钟(主模式输出,从模式输入) 主→从
CS[0-3] 片选信号(低电平有效),选择目标设备 主→从
IO[0-7] 双向数据线(模式不同,使用数量不同) 双向
DQS 数据选通(仅 DDR 模式需要,部分设备可省略) 双向

I2C

接线/硬件设计

i2C是总线,也是IIC,通用高速通讯接口 由飞利浦发明,解决串口一对多以及速度慢的问题而研发,原理是给接收端赋予编号,实现一对多通讯,并增加SCL时钟线,可以根据接收设备发送不同的时钟信号决定不同的传输速度,原来的串口线成为单根SDA线,以高低电压指示0跟1。 一主多从,7位地址可以连接111个设备,接收端元器件一般不接内置电阻 电路设计一般都是开漏模式

针脚 名称 功能描述
1 VCC/3V3/5V 电源正极(通常 3.3V 或 5V)
2 SCL 时钟线
3 SDA 数据线
4 GND 接地

速率/时钟

可变速,标准模式100kbps,快速模式400kbps,高速模式3.4Mbps

收发协议

起始位跟结束时在一个周期内进行突变来表示 SCL高电平为传输数据模式,从主机会接收SDA的电平 下面是示例图 每个周期最后一位表示是否继续传输数据,以进行下一轮数据的发送 怎么确定是读还是写,从第一组数据用来作为指针使用,包括是读模式还是写模式,以及设备编号(器件地址,根据芯片数据手册)

linux下怎么去访问i2C

1、查看系统总线

1
2
3
4
5
# 查看已注册的I2C总线
ls /dev/i2c*  
# 或通过内核日志/设备树信息确认
dmesg | grep -i i2c
ls -l /sys/bus/i2c/devices/

如果没有的话,还需要加载访问驱动

1
2
modprobe i2c-dev  # 加载用户空间I2C访问驱动
lsmod | grep i2c  # 确认驱动加载

2、安装i2c-tools

1
2
3
4
5
6
7
8
9
# Debian/Ubuntu
apt install i2c-tools

# CentOS/RHEL
yum install i2c-tools

# 源码编译(可选)
git clone https://github.com/groeck/i2c-tools.git
cd i2c-tools && make && make install

3、扫描总线上的设备地址

1
i2cdetect -y 1  # 扫描第1号I2C总线(-y 跳过交互确认)

输出示例(UU表示已被内核驱动占用,20/21等为可用设备地址):

1
2
3
4
5
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

4、读取设备寄存器数据

1
2
3
4
5
# `i2cdump`以十六进制形式 dump 设备所有寄存器:
i2cdump -y 1 0x20  # 总线1,地址0x20的设备

# `i2cget`读取指定寄存器的值:
i2cget -y 1 0x20 0x00  # 读取总线1、地址0x20、寄存器0x00的值

5、写入数据到寄存器

1
2
# `i2cset`写入数据到指定寄存器:
i2cset -y 1 0x20 0x01 0xFF  # 向总线1、地址0x20的寄存器0x01写入0xFF

GPIO

通用IO接口,可通过软件配置通用引脚功能的工作模式,工作模式有8种

序号 模式名称 大类归属 配置要点 & 核心特点
1 浮空输入(Input Floating) 输入模式 MODER=00(输入)+PUPDR=00(无上下拉);电平由外部电路决定,未接外部电路时电平漂移
2 上拉输入(Input Pull-Up) 输入模式 MODER=00+PUPDR=01(上拉);默认高电平,外部拉低时读低电平(如按键检测)
3 下拉输入(Input Pull-Down) 输入模式 MODER=00+PUPDR=10(下拉);默认低电平,外部拉高时读高电平
4 模拟输入(Analog Input) 模拟模式 MODER=11(模拟);GPIO 数字电路关闭,引脚直通 ADC/DAC,用于读取 / 输出模拟信号
5 推挽输出(Output Push-Pull) 输出模式 MODER=01(输出)+OTYPER=0(推挽);可主动输出高低电平,驱动能力强
6 开漏输出(Output Open-Drain) 输出模式 MODER=01+OTYPER=1(开漏);仅能拉低电平,需外部上拉才能输出高电平
7 复用推挽输出(AF Push-Pull) 复用功能模式 MODER=10(复用)+OTYPER=0;引脚作为外设(如 UART_TX)输出端,电平由外设控制
8 复用开漏输出(AF Open-Drain) 复用功能模式 MODER=10+OTYPER=1;引脚作为外设(如 I2C_SDA)输出端,开漏特性适配总线协议

CPU原生

CPU总线支持的GPIO

I2C扩展

通过IIC扩展的GPIO,可以满足CPU原生数量不足的问题,可通过I2C拓展芯片扩展GPIO接口 以 PCA9555(16 路 I2C 转 GPIO)为例“

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CPU/MCU PCA9555(I2C GPIO扩展芯片) 外设(LED/传感器/按键) 
┌───────────┐     ┌──────────────────────────┐    ┌─────────────┐ 
│ SDA(I2C) ├────┤ SDA(引脚15)              ├────┤ GPIO0~GPIO15│ 
│ SCL(I2C) ├────┤ SCL(引脚14)              ├────┤ (输入/输出)│ 
│ VCC(3.3V)├────┤ VDD(引脚1)               │    └─────────────┘ 
│ GND       ├────┤ GND(引脚8)               │ 
│ INT(可选)├────┤ INT(引脚9/10,中断输出)    │ 
└───────────┘    │ A0/A1/A2(引脚11~13)      │ 
                 │ (地址配置,默认000)        │ 
                 └───────────────────────────┘

linux怎么访问GPIO

  1. 安装 libgpiod
1
2
3
4
5
# Debian/Ubuntu
sudo apt install libgpiod-dev libgpiod2 gpiod-tools

# CentOS/RHEL
sudo yum install libgpiod-devel libgpiod-tools
  1. 查看系统 GPIO 控制器:
1
2
gpiodetect  # 列出所有gpiochip及引脚数
# 示例输出:gpiochip0 [pinctrl-bcm2711] (58 lines)
  1. 读取 GPIO 电平:
1
gpiodget gpiochip0 0  # 读取gpiochip0的第0引脚电平(0/1)
  1. 设置 GPIO 输出电平:
1
2
gpioset gpiochip0 0=1  # 设置gpiochip0的第0引脚为高电平
gpioset gpiochip0 0=0  # 设置为低电平
  1. 监听 GPIO 中断:
1
gpiomon gpiochip0 0  # 监听gpiochip0的第0引脚电平变化(边沿触发)

操作 I2C 转 GPIO(如 PCA9555) I2C 转 GPIO 芯片驱动加载后会被识别为gpiochipX,操作方式与原生 GPIO 完全一致:

1
2
gpiodetect  # 找到I2C扩展GPIO对应的gpiochip(如gpiochip1)
gpioset gpiochip1 0=1  # 设置扩展GPIO的第0引脚为高电平

GPIO中断

GPIO 中断(GPIO Interrupt)是指当 GPIO 引脚的电平状态发生预设变化时(如从低到高、从高到低或保持某电平),GPIO 控制器主动向 CPU 发送的硬件中断请求。它是嵌入式系统中实现 “事件驱动” 的核心机制,替代低效的 “轮询检测”(CPU 持续查询 GPIO 状态),大幅降低系统功耗、提升响应效率。

I2S

用来做什么

专门用于声音传输的硬件接口,传输的数据格式为PCM 输出:通过 I2S 把声音数据传给音箱的 “解码芯片”,音箱再出声 输入:麦克风把声音变成数字数据,通过 I2S 传给录音笔的存储芯片,保存成音频文件

针脚定义

针脚名称 常用别名 方向 功能
BCLK SCK (串行时钟)

位时钟
主设备输出

从设备输入
像 “节拍器” 一样,每滴答一次传 1 位数据
LRCLK WS (字选择)

FS (帧同步)
主设备输出

从设备输入
告诉接收方:

0 = 左声道数据

1 = 右声道数据
SD SDO (输出)

SDI (输入)
单向

(取决于角色)
传输实际的PCM 音频数据(0 和 1 的串)
MCLK(可选) 主时钟 / 系统时钟(可选) 主设备输出,从设备接收 通常是采样率的 256/384 倍,- 帮助多设备间精确同步,提高音质稳定性

PCIE

Gen几、x几

PCIE在arm设备上通常接什么设备或什么通讯

4G、5G模块 数据采集卡 FPGA、专用加速卡 WIFI模块、蓝牙模块

pcie跟sata复用关系(rkCPU上)

mipi

mipi是移动设备专用高速接口

CSI-2

mipi csi-2是摄像头数据接口

DSI

mipi dsi是屏幕数据接口

HSI

mipi hsi是射频数据高速接口,如5G射频

DSI转lvds

通过芯片转换,分离DSI特有的初始化跟亮度调节等控制信号 串行数据包转为 LVDS 所需的并行像素流 + 同步信号 从 MIPI 的 200mV 差分提升到 LVDS 的 350mV 标准 重新生成 LVDS 时钟和同步信号,匹配显示面板要求

DSI转HDMI

通过芯片转换,差分信后转TMDS信号

CAN

CAN2.0

标准帧

扩展帧

CANFD

标准帧

扩展帧

USB

ethernet

sata

HDMI

VGA

VGA

DP

eDP

LVDS

二、接口

m.2

mini pcie

PCIE

type-c

RJ45

type-A

micro USB

mini USB

三、上下板接口规范

SMARC

OSM

RTX(研华)

什么产品

RTXe(研华)

什么产品

COM(较为少用)

使用 Hugo 构建
主题 StackJimmy 设计