1. 什么是1-Wire单总线?
第一次接触1-Wire总线是在做一个温湿度监控项目时,当时需要连接多个DS18B20温度传感器。这种只需要一根数据线就能通信的技术让我印象深刻——它完美解决了传统I2C和SPI总线在多设备连接时的布线难题。
1-Wire是Dallas Semiconductor(现被Maxim Integrated收购)在1990年代开发的一种单线通信协议。与常见的I2C、SPI等多线制总线不同,1-Wire仅需一根信号线(加上地线)即可实现双向数据传输和供电,这根线被形象地称为"单总线"。
注意:虽然名为"单总线",但实际应用中仍需连接地线,严格来说是"单数据线+地线"的双线制。
2. 1-Wire的核心技术解析
2.1 电气特性与连接方式
1-Wire设备采用开漏输出结构,所有设备的数据线(DQ)都需要外接上拉电阻(通常4.7kΩ)。这种设计允许多个设备并联在同一条总线上,通过独特的ROM地址实现设备寻址。
典型连接方式:
code复制[主机MCU] ----[4.7kΩ上拉]---- DQ
|
[多个1-Wire设备并联]
|
GND
2.2 通信时序详解
1-Wire的通信基于严格的时间槽(time slot)控制,每个操作都由一系列特定的时序脉冲组成:
-
复位脉冲(480μs低电平+等待15-60μs+480μs高电平)
- 主机发出复位信号后,从机会返回存在脉冲(60-240μs低电平)
-
写时隙(至少60μs)
- 写1:主机拉低1-15μs后释放总线
- 写0:主机拉低60-120μs后释放
-
读时隙(至少60μs)
- 主机拉低1μs后释放,在15μs窗口期内采样数据
2.3 设备寻址机制
每个1-Wire设备都有全球唯一的64位ROM编码:
- 8位家族码(如DS18B20是0x28)
- 48位序列号
- 8位CRC校验码
通过"搜索ROM"命令(0xF0)可以枚举总线上的所有设备,这在多传感器组网时特别有用。
