首页/协议速查/1-Wire
1️⃣

1-Wire 单总线

板内总线
一根线供电+通信,DS18B20 温度传感器经典应用。
🧩 核心原理
📈 时序 / 工作过程图
1-Wire 复位/存在脉冲主机发复位 → 从机回应存在脉冲 → 才可继续 ROM 命令与读写时隙总线主机拉低480µs从机拉低60µs复位脉冲存在脉冲写0:拉低60-120µs · 写1:拉低1-15µs后释放 · 读:主机拉低1µs后释放,采样总线应用:DS18B20 温度传感器 · 每设备 64 位唯一 ROM 码,总线可挂多个(分时访问)
⚙️ 配置 / 使用要点
  1. 引脚开漏输出+上拉
  2. 严格时序:µs级延时(关中断或用定时器)
  3. 初始化→ROM命令→功能命令(转换/读暂存器)
  4. 转换需等待 750ms(12位)或配置9位缩短
🛠️ 项目示例
DS18B20 单总线测温流程
// 1. 复位
bus_low(480); bus_release(); wait_us(70);
if(!bus_read()){ /* 存在脉冲 */ }

// 2. 发跳过ROM(0xCC) + 启动转换(0x44)
write_byte(0xCC); write_byte(0x44);
delay_ms(750);                         // 转换完成

// 3. 再复位 + 跳过ROM + 读暂存器(0xBE)
bus_low(480); bus_release(); wait_us(70);
write_byte(0xCC); write_byte(0xBE);
int16_t raw = read_byte() | (read_byte() << 8);
float temp = raw * 0.0625f;            // 12位分辨率
❓ 面试高频
1-Wire比I2C省在哪?
1根线同时传数据和(寄生)供电,最省IO与连线;代价是速率低、时序苛刻
多设备怎么区分?
每设备64位唯一ROM码,主机用搜索ROM算法遍历总线上所有设备,再匹配ROM寻址
为什么时序要µs级精确?
协议靠拉低/释放的时间长度编码0/1,误差大会把0读成1,需关中断或定时器精确定时
✅ 自查清单 (点击勾选,本地保存)
0/0
会画复位/存在脉冲
知道读/写时隙
知道ROM搜索多设备
会写DS18B20流程
知道寄生供电