Heng30的博客
搜索 分类 关于 订阅

Linux用户态如何使用One-Wire?

2025-03-24

One-Wire是由Dallas Semiconductor(现为Maxim Integrated)开发的一种通信协议,允许主设备(如微控制器或嵌入式Linux 系统)通过单根线与一个或多个从设备进行低速数据交换。它通常用于嵌入式系统中连接传感器、存储设备和其他外设。

关键特性:

  • 单线通信:仅使用一根数据线(和一根地线)进行通信,减少了布线复杂性。

  • 低功耗:设备通常可以直接从数据线获取电源(寄生供电)。

  • 唯一地址:每个One-Wire设备都有一个唯一的 64 位地址,允许多个设备共享同一总线。

  • 简单协议:协议相对简单,易于在软件或硬件中实现。

实验环境

raspberry pi3b

Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

测试

  • 编译程序:make

  • 启用one-wire设备树配置:sudo dtoverlay w1-gpio gpiopin=26 pullup=0

[78850.997099] Driver for 1-wire Dallas network protocol.
[78851.023600] gpio-26 (onewire@1a): enforced open drain please flag it properly in DT/ACPI DSDT/board file
[78853.012698] w1_master_driver w1_bus_master1: w1_search: max_slave_count 64 reached, will continue next search.
[78901.013952] w1_master_driver w1_bus_master1: Attaching one wire slave 00.800000000000 crc 8c
...
  • 查看one-wire驱动信息:ls /sys/bus/w1/
devices  drivers  drivers_autoprobe  drivers_probe  uevent
  • 查看信息:cat /sys/bus/w1/devices/28-8000002ac2bc/temperature