嵌入式设备最终要和硬件交互。UART、I2C、SPI、GPIO 是最常见的外设入口。入门时不必先写驱动,可以先从用户态工具和 sysfs/dev 节点理解通信方式。
一、UART
常见设备:
1 | /dev/ttyS0 |
查看:
1 | ls -l /dev/tty* |
配置波特率:
1 | stty -F /dev/ttyS1 115200 cs8 -cstopb -parenb |
测试:
1 | cat /dev/ttyS1 |
UART 问题常见原因:
- TX/RX 接反。
- 波特率不一致。
- 电平不匹配。
- 流控配置错误。
- 设备树没启用。
二、I2C
查看总线:
1 | ls /dev/i2c-* |
扫描:
1 | i2cdetect -y 1 |
读取:
1 | i2cget -y 1 0x48 0x00 |
常见问题:
- 地址是 7 位还是 8 位。
- 上拉电阻缺失。
- 设备没供电。
- 复位脚没释放。
- 总线速率过高。
三、SPI
常见节点:
1 | /dev/spidev0.0 |
如果没有 spidev,要检查:
- 内核配置。
- 设备树节点。
- chip select。
- pinctrl。
SPI 比 I2C 更依赖时序配置:
- mode。
- bits per word。
- max speed。
- CS 极性。
四、GPIO
新内核更推荐 libgpiod:
1 | gpiodetect |
老系统可能使用 sysfs:
1 | echo 23 > /sys/class/gpio/export |
GPIO 问题要看 pinctrl 和复用功能。
五、排查顺序
外设不通时:
- 看原理图。
- 看供电。
- 看设备树。
- 看 dmesg。
- 用用户态工具验证。
- 再看驱动和应用。
不要直接怀疑业务代码。很多外设问题根因在硬件连接或设备树。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_18_Peripheral_Bus/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。