ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

一根线也能通信?深入 1-Wire 单总线的奇妙世界

一根线也能通信?深入 1-Wire 单总线的奇妙世界 一、什么是 1-Wire 总线1-Wire单总线是由Dallas Semiconductor现 Maxim Integrated / Analog Devices开发的一种单线双向串行通信协议。它仅使用一根数据线外加地线即可实现主机与一个或多个从机之间的数据传输同时还可通过该数据线为从机提供寄生供电因此得名“1-Wire”。1-Wire 的设计目标是在最少的引脚和布线成本下实现低速、多节点的数据采集与控制特别适合传感器网络、身份识别和存储器等应用。最著名的 1-Wire 器件是DS18B20 数字温度传感器。二、电气特性与接线1-Wire 总线由一条数据线DQ和地线GND组成。数据线通过一个上拉电阻连接到电源通常为 3.3V 或 5V空闲时被拉高。逻辑电平高电平由上拉电阻维持表示逻辑 1 或总线空闲。低电平由主机或从机将 DQ 拉低表示逻辑 0 或起始信号。驱动方式总线采用开漏open-drain或三态输出所有设备共享数据线谁都可以拉低但只有上拉电阻能拉高。这实现了“线与”逻辑任何一个设备拉低总线即为低电平。上拉电阻典型值为4.7 kΩ。在长距离或大电容负载下可能需要更小的阻值如 1 kΩ以加速上升沿在低功耗应用中可适当增大阻值。总线长度标准模式下可达100 米以上取决于电缆电容、上拉电阻和时序裕量。使用屏蔽双绞线可提高抗干扰能力。三、供电方式1-Wire 的独特之处在于允许寄生供电即从数据线本身获取能量无需独立的电源线。1. 外部供电模式每个从机都有独立的 VDD 引脚连接到外部电源3.3V 或 5V。此时数据线只负责通信供电稳定适合需要较大工作电流的器件如 EEPROM 编程、温度转换。2. 寄生供电模式从机没有外部电源而是利用数据线高电平期间通过内部二极管向储能电容充电当数据线为低电平时由电容供电维持工作。优点节省一根电源线布线更简单。缺点在需要较大电流的操作如 DS18B20 的温度转换期间主机必须在数据线上提供强上拉用 MOSFET 将数据线直接拉到电源以满足电流需求否则可能因供电不足导致转换失败。四、通信协议与时序1-Wire 的通信以时隙time slot为基本单位每一位数据都在一个时隙内传输。通信总是由主机发起从机只能在主机请求时才能发送数据。1. 复位与存在脉冲初始化序列每次通信前主机必须发送复位脉冲并检测从机的存在脉冲。主机将 DQ 拉低至少480 µs然后释放。总线由上拉电阻拉高主机等待15~60 µs后开始检测。如果有从机存在它会在检测到上升沿后拉低 DQ60~240 µs作为应答存在脉冲。主机检测到这个低电平脉冲后即可开始发送命令。时序图简化主机: |_______| |‾‾‾‾‾‾‾‾‾‾| DQ: ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 从机: |___| ← 480 µs → ← 15~60 µs → ← 60~240 µs →2. 写时隙主机通过写时隙向从机发送一位数据。写 0主机拉低 DQ 至少60 µs典型 60~120 µs然后释放。写 1主机拉低 DQ1~15 µs后立即释放之后由上拉电阻拉高并维持至少 60 µs。从机在主机拉低后的15~60 µs窗口内采样数据线电平。关键写 0 和写 1 的区别在于主机拉低的时间长短。短拉低表示 1长拉低表示 0。3. 读时隙主机通过读时隙从从机读取一位数据。主机拉低 DQ至少 1 µs然后释放启动读时隙。如果从机要发送 0它会在主机释放后继续将 DQ 拉低如果发送 1则释放总线由上拉电阻拉高。主机必须在拉低后15 µs 以内采样 DQ 电平典型在 10~15 µs 处。整个读时隙必须持续至少 60 µs然后主机释放总线。4. 数据字节传输1-Wire 数据传输以LSB最低位在前的顺序进行。一个字节由 8 个时隙组成每个时隙传输一位。所有命令和数据都按字节组织。典型速率标准速度约16.3 kbps每个时隙约 61 µs。过驱动速度约142 kbps更短的时隙需要器件支持。五、设备寻址与命令1-Wire 总线支持多个从机并联在同一数据线上。为了区分不同设备每个 1-Wire 器件在出厂时都有一个全球唯一的 64 位 ROM 地址。1. 64 位 ROM 地址结构字段位数说明家族码Family Code8 位标识器件类型如 DS18B20 的家族码为 0x28序列号Serial Number48 位全球唯一由制造商保证CRC 校验码8 位对前 56 位进行 CRC-8 校验用于验证地址完整性2. ROM 命令ROM Commands主机在复位并检测到存在脉冲后首先发送一个 ROM 命令用于选择或管理总线上的设备。常用命令如下命令名代码功能Search ROM0xF0搜索总线上的所有设备地址枚举Read ROM0x33读取单个设备的 64 位地址仅当总线上只有一个设备Match ROM0x55指定一个 64 位地址只有匹配的设备响应后续命令Skip ROM0xCC跳过地址选择直接对总线上所有设备广播命令Alarm Search0xEC搜索处于报警状态的设备如温度超限3. 功能命令Function CommandsROM 命令之后主机会发送特定器件的功能命令用于执行具体操作。以 DS18B20 为例Convert T0x44启动温度转换转换期间器件拉低总线表示忙。Read Scratchpad0xBE读取暂存寄存器的 9 字节数据含温度值。Write Scratchpad0x4E写入报警阈值。Copy Scratchpad0x48将暂存器内容复制到 EEPROM。Recall EEPROM0xB8从 EEPROM 恢复数据。六、典型 1-Wire 器件器件型号功能接口特点DS18B20数字温度传感器12 位分辨率1-Wire寄生供电支持DS18S20数字温度传感器9 位分辨率1-WireDS24311Kb EEPROM1-Wire可编程DS24088 通道可寻址开关1-WireDS1990A序列号 iButton1-Wire常用于身份识别DS28E171-Wire 转 I2C 桥接器1-Wire I2C其中DS18B20是最普及的 1-Wire 器件支持 -55℃ 至 125℃ 测温分辨率 9~12 位可调精度 ±0.5℃-10℃~85℃ 范围。七、1-Wire 总线的优缺点优点单线通信仅需一根数据线和地线布线极简节省引脚和 PCB 面积。多设备组网支持多个设备并联通过唯一 64 位地址寻址可枚举总线上的所有设备。寄生供电数据线同时传输能量某些应用可省去电源线。长距离传输低速和开漏结构使其适合较远距离100 米以上。成本低廉协议简单可用 GPIO 模拟无需专用外设。缺点速率低标准模式下仅约 16 kbps不适合高速数据采集。时序严格微秒级时序必须精确控制软件实现时易受中断影响。抗干扰能力有限虽然单线差分可抗共模干扰但不如差分总线如 RS-485强。供电能力弱寄生供电模式下电流有限需要强上拉配合。协议复杂搜索和枚举算法相对复杂软件实现工作量较大。八、应用场景温度监测多点温度采集如粮仓、冷链、机房、农业大棚。身份识别iButton 序列号用于门禁、资产追踪。存储配置小容量 EEPROM 保存设备参数、校准数据。传感器网络多个 1-Wire 传感器挂接在总线上形成分布式采集网络。消费电子电池包温度检测、打印机墨盒识别等。九、单片机实现要点1. 硬件连接将单片机的 GPIO 配置为开漏输出或推挽输出但需要软件切换为输入模式以释放总线。在 DQ 线上接 4.7 kΩ 上拉电阻到 VCC。若使用寄生供电还需在温度转换等大电流操作时用另一个 GPIO 控制 MOSFET 将 DQ 强上拉到 VCC。2. 软件实现使用精确延时函数控制微秒级时序。需关闭中断或使用硬件定时器以确保时序不被破坏。基本操作函数复位、写字节、读字节。在此基础上封装发送命令、读取数据等。多设备操作需实现Search ROM 算法通过逐位读写检测冲突逐步确定每个设备的 64 位地址。算法核心是“读两个互补位判断冲突方向”。常见做法先发送Skip ROM (0xCC)进行广播操作仅适用于单设备或广播命令多设备时使用Match ROM (0x55)或Search ROM (0xF0)。3. 代码示例伪代码// 复位并检测存在脉冲 uint8_t OneWire_Reset(void) { uint8_t presence; DQ_LOW(); delay_us(480); DQ_HIGH(); // 释放总线 delay_us(60); // 等待从机拉低 presence READ_DQ(); // 读取存在脉冲 delay_us(420); // 完成复位时序 return presence; // 返回 0 表示有设备存在 } // 写一个字节 void OneWire_WriteByte(uint8_t data) { for (int i 0; i 8; i) { if (data 0x01) { // 写 1 DQ_LOW(); delay_us(2); DQ_HIGH(); delay_us(60); } else { // 写 0 DQ_LOW(); delay_us(60); DQ_HIGH(); delay_us(2); } data 1; } } // 读一个字节 uint8_t OneWire_ReadByte(void) { uint8_t data 0; for (int i 0; i 8; i) { DQ_LOW(); delay_us(2); DQ_HIGH(); // 释放等待从机输出 delay_us(10); // 等待从机稳定数据 if (READ_DQ()) { data | (1 i); } delay_us(50); } return data; }4. 注意事项时序精确性在软件模拟时务必保证延时的准确性。使用硬件定时器或 NOP 循环并实测校准。中断处理1-Wire 时序对时间敏感操作期间应关闭全局中断或使用临界区保护。总线电容长线或挂多个设备会增加电容导致上升沿变缓。可减小上拉电阻如 1 kΩ或使用有源上拉加速。CRC 校验读取设备的 64 位地址或数据时应验证 CRC 以提高可靠性。十、与 I2C/SPI 的对比特性1-WireI2CSPI线数1 数据 地可寄生供电2SCL, SDA 地至少 4SCLK, MOSI, MISO, CS速率~16 kbps标准100/400/1000 kbps可达数十 Mbps多设备支持通过唯一 64 位地址支持7/10 位地址需片选线设备多时引脚多供电方式可寄生供电需独立电源需独立电源抗干扰一般一般一般差分版本更优复杂度时序严格软件枚举复杂中等硬件支持多简单但引脚多典型应用传感器网络、身份识别板上传感器、EEPROM高速 ADC/DAC、存储器总结1-Wire 总线通过单根数据线实现了低速、多节点、可寄生供电的串行通信在资源受限和布线困难的场合具有独特优势。其协议基于精确的微秒级时序和“线与”机制通过复位/存在脉冲、写/读时隙完成双向数据传输。每个设备拥有全球唯一的 64 位地址支持多设备总线枚举。虽然速度较慢且时序要求严格但在温度传感器网络、身份识别和小容量存储等应用中1-Wire 依然是简单可靠的选择。掌握 1-Wire 的关键在于理解其电气特性、时序参数、寻址机制以及软件实现中的时序控制。如果你能熟练操作 DS18B20 并实现多设备搜索那么对 1-Wire 的理解就已经达到了较高水平。
返回列表