【协议篇】OneWire
引言
单总线(1-Wire)是美国 DALLAS 公司提出的外围串行扩展总线技术,与 SPI、I²C 等串行数据通信方式相比,其核心特点为采用单根信号线完成数据传输。本文基于 1-Wire 协议,结合 DS18B20 验证该总线的可行性。
一、单总线协议
1.1 初始化序列–复位脉冲和应答脉冲
任何通信都需要初始化序列开始,OneWrie的初始化序列,由主控制的复位脉冲和从设备的应答脉冲组成;如图1.1所示,为初始化序列时序。当从设备响应复位发送应答脉冲时,它向主控制器指示它在总线上并准备好接收指令和数据。

由图1.1可知,初始化序列期间,主控制器拉低总线并保持至少 480 u s 480us 480us以发送一个复位脉冲,然后主控制器释放总线,进入接收状态;释放总线时,单总线由 5 K Ω 5KΩ 5KΩ上拉电阻拉到高电平;当从设备探测到 I / O I/O I/O引脚上的上升沿后,等待 15 − 60 u s 15-60us 15−60us,然后通过拉低 60 − 240 u s 60-240us 60−240us单总线来发出一个应答脉冲。
1.2 读/写时序
主控制器在写时序期间将数据写入从设备,并在读时序期间从从设备读取数据;每个时序通过单总线传输一位数据。
1.2.1 写时序
写时序有两种类型: “写
1
1
1”时序和“写
0
0
0”时序。主控制器通过写
1
1
1时序实现写逻辑
1
1
1到从设备,通过写
0
0
0时序实现写逻辑
0
0
0到从设备。所有写时序必须最少持续
60
u
s
60us
60us,各个写周期之间至少有
1
u
s
1us
1us的恢复时间。当主控制器把数据线从逻辑高电平拉到低电平的时候,写时序开始,如图1.2.1所示,为写时时序图。

主控制器要发出一个写
1
1
1时序,在将单总线拉低后,主控制器必须在
15
μ
s
15μs
15μs内释放总线。当总线被释放后,
5
K
Ω
5KΩ
5KΩ的上拉电阻将总线拉高。主控制器要发出一个写
0
0
0时序,必须把数据线拉到低电平并持续保持——至少
60
u
s
60us
60us。
主控制器发出写时序后,从设备在一个持续
15
μ
s
15μs
15μs到
60
μ
s
60μs
60μs的窗口期间内对单总线采样。如果采样期间总线为高电平,则会向从设备写入
1
1
1;如果采样期间总线为低电平,则会向从设备写入
0
0
0。
1.2.2 读时序
主控制器发出读时序时, 从设备只能向主控制器发送数据。所有读时序的持续时间必须至少为
60
μ
s
60μs
60μs,两个读周期间至少有
1
u
s
1us
1us的恢复时间。主控制器发出一个读时序后,会将单总线拉低至少
1
u
s
1us
1us,然后释放总线,如图1.2.2所示,为读时时序图。

在主控制器发出读时序后, 从设备通过拉高或拉低总线来传输 1 1 1或 0 0 0。当传输逻辑 0 0 0结束后,总线将被释放,通过上拉电阻回到上升沿状态。从设备输出的数据在读时隙的下降沿出现后 15 u s 15us 15us内有效。因此,主控制器必须释放总线,并在读时序开始后 15 u s 15us 15us内采样总线状态。
二、DS18B20
2.1 实现步骤
DS18B20采用严格的单总线通信协议以确保数据的完整性。
读取温度步骤:
① 初始化单总线:完成单总线的初始化,为与DS18B20传感器通信做好准备。
② 发送跳过ROM指令:发送
0
x
C
C
0xCC
0xCC指令,在单传感器连接场景下,跳过对传感器唯一ROM代码的匹配过程。
③ 发送读取暂存器指令:发送
0
x
B
E
0xBE
0xBE指令,通知传感器准备好暂存器中的数据以供读取。
④ 接收温度数据:分别获取温度数据的低字节和高字节。
⑤ 合并温度数据:将高低字节组合成
16
16
16位整数
T
e
m
p
Temp
Temp,整合原始温度信息。
⑥计算实际温度:通过将
16
16
16位原始数据转换为浮点型温度值
T
T
T,最终返回该温度值。
总结
本文围绕单总线协议与DS18B20温度传感器的应用展开分析。首先阐述了单总线的核心通信机制,包括由主控制器复位脉冲和从设备应答脉冲构成的初始化序列,以及需满足时序要求的写时序(区分写1与写0)和读时序。随后结合具体应用,梳理了DS18B20的温度读取流程:通过初始化单总线建立通信,发送0xCC跳过ROM匹配、0xBE读取暂存器指令,接收温度高低字节后合并为16位数据,最终转换为浮点型实际温度值。整体内容清晰呈现了单总线协议的原理与DS18B20的实际通信逻辑,为单总线传感器的应用提供了直观参考。
参考资料
更多推荐



所有评论(0)