基于youyeetoo K1 的 SPI 控制完整教程,包含 BME280 温湿度/大气压强传感器模块控制示例
一、硬件接口说明:
主板上JSPI接口,插座线序说明:


| 序号 | 说明 | 备注 |
|---|---|---|
| 1 | 3.3V | 电源 |
| 2 | SPICLK | SPI时钟 |
| 3 | SPIMISO | |
| 4 | SPIMOSI | |
| 5 | SPICS | 片选 |
| 6 | GND | 地 |


模块引脚说明:
| 模块引脚 | 说明 |
|---|---|
| 5V | 电源正 |
| GND | 地 |
| SCL | I2C/SPI 串行时钟线 |
| SDA | I2C 串行数据线 |
| 3 线 SPI 串行数据输入/输出端口 | |
| 4 线 SPI 串行数据输入 | |
| CSB | 片选引脚,接高电平(默认)为 IIC 通信接口 |
| 低电平为 SPI 通信接口 | |
| SDO | I2C地址选择位 4线 SPI 串行输出端口 |
示例接线方案:
BME280 模块 youyeetoo K1 开发板
1.25间距 6P端子
VCC ────────→ 3.3V
GND ────────→ GND
SCL ────────→ SPI_SCLK
SDA ────────→ SPI_MOSI
SDO ────────→ SPI_MISO
CSB ────────→ SPI_CS

本教程使用的是 BME280 模块(工作电压支持 3.3 V),是一款APSM工艺的小封装低功耗数字复合传感器,它可以测量环境温湿度和大气压强。湿敏元件具有快速唤醒与响应时间、精度高和宽温度工作范围;
气压敏感元件是一个压阻式低噪高精度高分辨率绝对大气压力感应元件;温度感测元件具有低噪高分辨率特性,温度值可以对湿度和气压进行温度补偿自校正。
湿度感测元件和气压敏感元件可独立的启用/禁用通过配置采样率寄存器,可以设置敏感元件的采样率,非常适合空间有限的移动设备,如智能手机、平板电脑、智能手表和可穿戴设备、天气预报、垂直速度指示、费控设备、室内室外导航、智能家居装置。
温度检测范围:0℃~+65℃
温度测量误差:±0.5℃ MAX ±1℃;分辨率0.1℃
相对湿度测量范围:0~100%,湿度响应时间:大于1s
相对湿度测量误差:±2%; 湿度迟滞:±1%;分辨率0.8%
气压测量范围:300~1100hPa
气压测量误差:±1hPa 分辨率0.18Pa
数字接口类型:IIC(从模式3.4MHz)或SPI(3线或4线制从模式10MHz)

本教程测试环境:
权限要求:
注:其他 Linux 发行版理论上也可用,但未经测试
注意:需要联网下载安装
安装必要的编译工具:
# 更新软件包列表(需要联网)
sudo apt update
# 安装编译工具链(包含 gcc, g++, make 等)
sudo apt install build-essential
验证安装:
# 检查 gcc 版本
gcc --version
# 检查 make 版本
make --version
# 解压压缩包
test@test-K1-SBC:~$ unzip K1-SPI-Package.zip
Archive: K1-SPI-Package.zip
inflating: Makefile
inflating: mkspi.sh
inflating: Installation.txt
inflating: bme280_spi_fhl.c
inflating: fhl-api_1.0.0_amd64.deb
#添加执行权限给脚本
test@test-K1-SBC:~$ chmod +x mkspi.sh
#执行添加 SPI 节点脚本
test@test-K1-SBC:~$ sudo ./mkspi.sh
spidev
spi-SPI1001:00
/dev/spidev0.0 ready
#检查 SPI 设备节点
test@test-K1-SBC:~$ ls -l /dev/spidev*
crw-rw-rw- 1 root root 153, 0 10月 13 10:30 /dev/spidev0.0
# 安装 FHLAPI 支持包
sudo dpkg -i fhl-api_1.0.0_amd64.deb
# 编译可执行程序
test@test-K1-SBC:~$ make
Building available versions...
make[1]: Entering directory '/home/test'
gcc -Wall -O2 -I. -I/usr/include/fhl_api -o bme280_spi_fhl bme280_spi_fhl.c -lfhl_api -lm
[FHL] Build successful: ./bme280_spi_fhl
=========================================
Recommended: ./bme280_spi_fhl
=========================================
make[1]: Leaving directory '/home/test'
Build complete!
编译成功后会生成:
bme280_spi_fhl - SPI 控制BME280 linux程序test@test-K1-SBC:~$ sudo ./bme280_spi_fhl /dev/spidev0.0
========================================
BME280 SPI Sensor (FHL API)
========================================
[1] Initializing FHL library...
[2026-10-13 11:15:06.720] [INFO] [Thread: 139686505408320] Extracted parent path (excluding file name): /usr/lib/x86_64-linux-gnu
[2026-10-13 11:15:06.720] [INFO] [Thread: 139686505408320] myLibPath is OK: /usr/lib/x86_64-linux-gnu
[2026-10-13 11:15:06.720] [INFO] [Thread: 139686505408320] Set board type: K1 SBC
[2026-10-13 11:15:06.721] [INFO] [Thread: 139686505408320] boardInfo: K1 BSP info., boardName=K1, boardVer=V1
[2026-10-13 11:15:06.721] [INFO] [Thread: 139686505408320] device node /dev/spidev0.0 exists
[2026-10-13 11:15:06.721] [INFO] [Thread: 139686505408320] FhlAPI Version is: 0x10000
[2026-10-13 11:15:06.721] [INFO] [Thread: 139686505408320] FhlAPI Build_Info is: FhlAPI v1.0.0 b20260930
[2026-10-13 11:15:06.721] [INFO] [Thread: 139686505408320] FhlAPI_Init OK==========> end time=UTC:2026-12-01 23:59:59
OK
[2] Opening SPI device: /dev/spidev0.0
OK: SPI handle = -1
Mode: 0, Bits: 8, Speed: 1000000 Hz
[3] Reading Chip ID...
Chip ID: 0x60 (BME280 detected)
[4] Loading calibration data...
OK: Calibration loaded
[5] Configuring sensor...
OK: Sensor configured
[6] Reading data (Press Ctrl+C to exit):
========================================
[11:15:06] Reading #1
Temperature: 26.70 °C | 80.06 °F
Pressure: 1015.82 hPa | 101581.62 Pa
Humidity: 41.66 %
Calculated:
Altitude: -21.34 m (ref: 1013.25 hPa)
Dew Point: 12.58 °C | 54.65 °F
[11:15:07] Reading #2
Temperature: 26.70 °C | 80.06 °F
Pressure: 1015.85 hPa | 101585.28 Pa
Humidity: 41.66 %
Calculated:
Altitude: -21.65 m (ref: 1013.25 hPa)
Dew Point: 12.58 °C | 54.65 °F
[11:15:09] Reading #3
Temperature: 26.69 °C | 80.04 °F
Pressure: 1015.84 hPa | 101583.66 Pa
Humidity: 41.68 %
Calculated:
Altitude: -21.51 m (ref: 1013.25 hPa)
Dew Point: 12.58 °C | 54.65 °F
[11:15:10] Reading #4
Temperature: 26.69 °C | 80.04 °F
Pressure: 1015.81 hPa | 101580.81 Pa
Humidity: 41.67 %
Calculated:
Altitude: -21.28 m (ref: 1013.25 hPa)
Dew Point: 12.58 °C | 54.64 °F
[11:15:11] Reading #5
Temperature: 26.71 °C | 80.08 °F
Pressure: 1015.78 hPa | 101577.59 Pa
Humidity: 41.71 %
Calculated:
Altitude: -21.01 m (ref: 1013.25 hPa)
Dew Point: 12.61 °C | 54.70 °F
[11:15:12] Reading #6
Temperature: 26.71 °C | 80.08 °F
Pressure: 1015.80 hPa | 101580.44 Pa
Humidity: 41.71 %
Calculated:
Altitude: -21.24 m (ref: 1013.25 hPa)
Dew Point: 12.61 °C | 54.70 °F
[11:15:13] Reading #7
Temperature: 26.71 °C | 80.08 °F
Pressure: 1015.81 hPa | 101581.25 Pa
Humidity: 41.73 %
Calculated:
Altitude: -21.31 m (ref: 1013.25 hPa)
Dew Point: 12.62 °C | 54.71 °F
[11:15:14] Reading #8
Temperature: 26.71 °C | 80.08 °F
Pressure: 1015.87 hPa | 101586.92 Pa
Humidity: 41.74 %
Calculated:
Altitude: -21.78 m (ref: 1013.25 hPa)
Dew Point: 12.62 °C | 54.72 °F
[11:15:15] Reading #9
Temperature: 26.72 °C | 80.10 °F
Pressure: 1015.76 hPa | 101576.42 Pa
Humidity: 41.75 %
Calculated:
Altitude: -20.91 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.74 °F
[11:15:16] Reading #10
Temperature: 26.71 °C | 80.08 °F
Pressure: 1015.81 hPa | 101581.25 Pa
Humidity: 41.75 %
Calculated:
Altitude: -21.31 m (ref: 1013.25 hPa)
Dew Point: 12.63 °C | 54.73 °F
[11:15:17] Reading #11
Temperature: 26.72 °C | 80.10 °F
Pressure: 1015.77 hPa | 101577.25 Pa
Humidity: 41.74 %
Calculated:
Altitude: -20.98 m (ref: 1013.25 hPa)
Dew Point: 12.63 °C | 54.74 °F
[11:15:18] Reading #12
Temperature: 26.74 °C | 80.13 °F
Pressure: 1015.85 hPa | 101585.37 Pa
Humidity: 41.72 %
Calculated:
Altitude: -21.66 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.75 °F
[11:15:19] Reading #13
Temperature: 26.75 °C | 80.15 °F
Pressure: 1015.82 hPa | 101582.15 Pa
Humidity: 41.70 %
Calculated:
Altitude: -21.39 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.76 °F
[11:15:20] Reading #14
Temperature: 26.75 °C | 80.15 °F
Pressure: 1015.82 hPa | 101582.15 Pa
Humidity: 41.69 %
Calculated:
Altitude: -21.39 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.75 °F
[11:15:21] Reading #15
Temperature: 26.77 °C | 80.19 °F
Pressure: 1015.82 hPa | 101581.80 Pa
Humidity: 41.68 %
Calculated:
Altitude: -21.36 m (ref: 1013.25 hPa)
Dew Point: 12.65 °C | 54.78 °F
[11:15:22] Reading #16
Temperature: 26.77 °C | 80.19 °F
Pressure: 1015.79 hPa | 101578.96 Pa
Humidity: 41.65 %
Calculated:
Altitude: -21.12 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.76 °F
[11:15:23] Reading #17
Temperature: 26.77 °C | 80.19 °F
Pressure: 1015.80 hPa | 101579.78 Pa
Humidity: 41.63 %
Calculated:
Altitude: -21.19 m (ref: 1013.25 hPa)
Dew Point: 12.64 °C | 54.75 °F
#执行过程中可按 Ctrl + C 停止程序
^C
Shutting down...
[7] Cleaning up...
[2026-10-13 11:15:23.673] [INFO] [Thread: 139686505408320] FhlAPI_UnInit OK <============ end time=UTC:2026-12-01 23:59:59
FHL library uninitialized
Sensor closed. Goodbye!