40-Pin扩展¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
Quectel Pi H1智能主控板配备了标准的40-pin GPIO扩展接口,支持GPIO、I2C、SPI、UART、PWM等多种外设接口。下面将介绍如何测试这些接口的功能。
引脚定义¶
接口配置说明¶
40-pin中部分低速接口(I2C9/SPI10/UART12_2W/I2C13/SPI14)的配置文件位于 /etc/qpi-config/qpi-config.ini。
配置步骤:
修改 qpi-config.ini 配置文件
应用配置
qpi-config 40pin set
重启系统使配置生效
GPIO测试¶
本节以测试40-pin接口的pin3为例,演示如何使用GPIO功能。pin3对应的 gpio_num 为36。
硬件连接¶
连接方法一:万用表测量电压
将pin3(GPIO_36)引脚连接至万用表的正极,pin6(GND)引脚连接至万用表的负极。通过万用表可以测量引脚输出的电压值,验证GPIO功能是否正常。
连接方法二:使用GPIO扩展板指示灯
你也可以通过接插 树莓派4B/3B GPIO扩展板 到40-pin扩展接口来测试GPIO高低电平。该扩展板将各GPIO引脚引出并配有对应的指示灯,你可将待测GPIO引脚配置为输出模式并接到扩展板上,当GPIO输出高电平时小灯点亮,输出低电平时小灯熄灭,这样就能直观观察GPIO的电平变化是否符合预期。
关于该扩展板的更多信息,可参考支持配件章节中的 GPIO terminal expansion board 条目(参见:支持配件)。
方法一:使用Shell命令控制¶
系统已默认启用lgpiod服务,依次执行如下命令:
Step1: 打开GPIO设备
rgs c 999 go 4
使用 go 命令打开文件 /dev/gpiochip4。
Step2: 设置GPIO模式
rgs c 999 gso 0 36
使用 gso 命令设置gpio 36为输出模式,这条命令里的 0 是上一条命令的返回内容,根据实际情况修改。
Step3: 设置低电平
rgs c 999 gw 0 36 0
设置gpio 36为低电平,此时测试引脚电压值为 0V。
Step4: 设置高电平
rgs c 999 gw 0 36 1
设置gpio 36为高电平,此时测试引脚电压值为 3.3V。
方法二:使用Python/C代码控制¶
如需使用编程语言进行GPIO控制,请参考以下文档:
Python GPIO开发-使用python-periphery库进行GPIO开发
C/C++ GPIO开发-使用lgpio库进行GPIO开发
这些文档提供了完整的代码示例、编译方法和测试步骤。
I2C测试¶
40-pin接口的pin3和pin5默认是I2C的data和clock引脚,对应设备节点 /dev/i2c9。
提示
若设备节点没有出现,可以先使用本章开头部分的 qpi-config 进行配置使能。
测试准备¶
本次测试使用微雪环境传感器扩展板(BME280),通过40-pin接口进行连接。
硬件连接示意图:
使用C代码控制¶
前置要求
如果系统中没有lgpio库,请参考 C/C++ GPIO开发 文档安装lgpio库。
Step1: 创建源文件
新建 envtest.c 文件,内容如下:
点击展开/折叠完整代码
Step2: 编译程序
gcc -o envtest envtest.c -llgpio
Step3: 运行测试
sudo ./envtest
注意
如果出现"Permission denied"错误,需要使用 sudo 运行程序。
运行成功后,输出内容包含采集的气压、温度和湿度信息:
pressure: 1013.25 hPa
temperature: 25.36 C
humidity: 45.67 %
SPI测试¶
40-pin接口中的SPI功能对应设备节点 /dev/spi10。
提示
若设备节点没有出现,可以先使用本章开头部分的 qpi-config 进行配置使能。
SPI回环测试¶
本测试通过Shell命令控制SPI接口,验证数据收发功能。
Step1: 打开SPI设备
rgs c 999 SPIO 10 0 10000000 0
使用 SPIO 命令打开 /dev/spidev10.0,波特率为10000000。命令返回文件句柄(通常为0)。
Step2: 进行SPI数据传输测试
短数据测试:
rgs c 999 SPIX 0 1 2 3 4
长数据测试:
rgs c 999 SPIX 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
使用 SPIX 命令进行SPI数据传输,其中 0 是上一条命令返回的文件句柄,后面的数字是要发送的数据。
测试结果:
MISO和MOSI短接时(回环模式),返回发送的数据:
4 1 2 3 4
第一个数字 4 表示接收到的数据字节数。
MISO和MOSI不短接时,返回全255(表示未接收到有效数据):
4 255 255 255 255
UART测试¶
40-pin接口 的 pin8 和 pin10 默认配置为 UART 功能,对应设备节点 /dev/ttyHS2,若设备节点没有出现,可以先使用本章开头部分的 qpi-config 进行配置使能。
查看串口设备
你可以使用以下命令查看系统中所有的串口设备:
ls /dev/tty*
UART回环测试¶
本测试通过将 pin8 和 pin10 短接,验证串口收发功能是否正常。
硬件连接: 将40-pin接口的pin8(TX)和pin10(RX)短接。
前置要求
需要安装 python3-serial 库:
apt-get update
apt-get install python3-serial
Step1: 创建测试脚本
新建 uart_loop.py 文件,内容如下:
点击展开/折叠完整代码
import serial
import time
def serial_loopback_test(port='/dev/ttyHS2', baudrate=115200, timeout=1):try:# 打开串口
ser = serial.Serial(
port=port,
baudrate=baudrate,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=timeout
)if not ser.is_open:print(f"无法打开串口 {port}")returnprint(f"串口 {port} 已打开,开始回环测试(按Ctrl+C退出)...")
test_data = b"Hello, Serial Loopback!" # 测试数据while True:# 发送数据
ser.write(test_data)print(f"发送: {test_data.decode('utf-8')}")# 读取回环数据
time.sleep(0.1) # 等待数据接收
received = ser.read(len(test_data))# 验证结果if received == test_data:print(f"接收: {received.decode('utf-8')} → 测试通过\n")else:print(f"接收异常: 发送[{len(test_data)}] vs 接收[{len(received)}] → 测试失败\n")
time.sleep(1) # 间隔1秒重复测试except serial.SerialException as e:print(f"串口错误: {e}")except KeyboardInterrupt:print("\n用户中断测试")finally:if 'ser' in locals() and ser.is_open:
ser.close()print(f"串口 {port} 已关闭")if __name__ == "__main__":# 可根据实际情况修改串口和波特率
serial_loopback_test(port='/dev/ttyHS2', baudrate=115200)
Step2: 运行测试
python3 uart_loop.py
测试结果:
当pin8和pin10正确短接时,程序会持续发送数据并验证接收的数据是否一致:
串口 /dev/ttyHS2 已打开,开始回环测试(按Ctrl+C退出)...
发送: Hello, Serial Loopback!
接收: Hello, Serial Loopback! → 测试通过
发送: Hello, Serial Loopback!
接收: Hello, Serial Loopback! → 测试通过
发送: Hello, Serial Loopback!
接收: Hello, Serial Loopback! → 测试通过
按 Ctrl+C 可退出测试程序。
PWM测试¶
40-pin接口 的 pin33 默认配置为 PWM 功能,这里选择微雪的 4pin PWM 协议的调速风扇作为测试设备。
硬件连接¶
PWM风扇接线定义:
Pin |
Function |
Wire colour |
40-Pin连接 |
|---|---|---|---|
1 |
+5V |
Red |
pin2或pin4 (5V) |
2 |
PWM |
Blue |
pin33 (GPIO_78) |
3 |
GND |
Black |
pin6/9/14/20/25/30/34/39 (任意GND) |
4 |
Tach |
Yellow |
pin32 (GPIO_76) |
连接示意图:
说明
Tach 引脚用于读取风扇转速,是可选连接
如果不需要读取转速信息,Tach引脚可以不连接
使用C代码控制¶
创建 pwm.c 文件,文件内容如下:
#include <stdio.h>#include <lgpio.h>int main(int argc, char **argv){int h;int gpio = 78;
float pwmFrequency = 1000;float pwmDutyCycle = 50;
h = lgGpiochipOpen(4); // 打开/dev/gpiochip4设备if (h < 0) {printf("ERROR: %s (%d)\n", lguErrorText(h), h);
return 1;}
int e = lgGpioClaimOutput(h, 0, gpio, 0);
if (e < 0) {printf("ERROR: %s (%d)\n", lguErrorText(e), e);
return 1;}
e = lgTxPwm(h, gpio, pwmFrequency, pwmDutyCycle, 0, 0);
if (e < 0) {printf("ERROR: %s (%d)\n", lguErrorText(e), e);
return 1;}
lguSleep(5);lgGpioFree(h, gpio);lgGpiochipClose(h);return 0;}
编译:
gcc pwm.c -o pwm -llgpio
执行:
sudo ./pwm
风扇会以中等转速运转,可以调整代码中的 pwmDutyCycle 值(范围0-100)来调整风扇转速。