单总线协议深度解析:从物理层到 ROM 寻址,一文吃透核心逻辑
1.物理层
1.1 单总线通信的连接方式
1-Wire 总线仅使用一根线来发送信号和供电。通信是异步和半双工的,并且遵循严格的主/从方案。总线上可以同时连接一个或多个从设备。总线上只能连接一个主设备。

1.2 电平标准和开漏输出
单总线协议采用 CMOS/TTL 电平,低电平最大值为 0.8V,高电平最低值为 2.2V,在 2.8V 到 6V 的电源电压范围内进行通信。单总线主机或从机设备通过一个漏极开路或三态端口连接至该数据线,总线空闲时为高电平,高电平通过上拉电阻产生,上拉电阻一般为 4.7KΩ。

为了确保总线上的某些器件在工作时(如例如 DS18S20-PAR 温度传感器进行温度转换、E2PROM 写人数据时)有足够的电流供给,除了上拉电阻之外,还需要在总线上使用 MOSFET 提供强上拉供电,大多数的应用这个强上拉是不需要的。

1.3 单总线设备供电
1.3.1 独立供电
以 MY18E20 传感器为例(即 DS18B20 传感器的国产平替版本),我们可以通过 VDD 引脚通过外部电源供电,这种模式的优点是不需要 MOSFET 上拉,而且单总线在温度转换过程中可以任意进行其他操作。

1.3.2 寄生供电
以 DS18B20 传感器为例,我们可以使用 MOSFET 上拉连接方式为单总线器件供电:

寄生供电主要是利用二极管单向导电性来完成的:
- 单总线处于高电平时:通过二极管和上拉电阻,Vpu 向芯片供电和电容 Cpp 充电
- 单总线处于低电平时:二极管截止,电容 Cpp 向芯片供电

这里,使用寄生供电要求单总线能间断的提供高电平,一方面是向电容 Cpp 充电,一方面是总线保持低电平超过 480us 时单总线设备会产生复位。
2.协议层
2.1 单总线通信流程
在单总线通信中,主机和从机之间的通信可通过 3 个步骤完成:
- 初始化单总线:主机发出一个复位信号,重置总线使整个总线同步
- 主机搜索从机:主机发出 ROM 命令呼叫从机,从机应答后主机选择特定从机,其余设备将退出并忽略主机随后发出的数据,直到主机发出下一个复位信号再等待呼叫
- 主从机进行通信:主机可以向从机发送功能命令或读写数据

2.2 单总线通信信号
单总线协议规定了以下几种通信信号:
- 主机复位信号和从机应答信号:主机通过拉低单总线 480 ~ 960 us 产生复位信号,然后释放总线,进入接收模式。主机释放总线时,会产生低电平跳变为高电平的上升沿,单总线从机检测到上升沿之后,延时 15 ~ 60 us,单总线从机拉低总线 60 ~ 240 us 来产生应答信号。主机接收到从机的应答信号说明单总线器件就绪,初始化过程完成。

- 写数据 0 信号:当数据线拉低后,在 15 ~ 60 us 的时间窗口内对数据线进行采样。如果数据线为低电平,就是写 0,如果数据线为高电平,就是写 1。主机要产生一个写数据 0 信号,就必须把数据线拉低并保持 60us。

- 写数据 1 信号:当数据线拉低后,在 15 ~ 60 us 的时间窗口内对数据线进行采样。如果数据线为低电平,就是写 0,如果数据线为高电平,就是写 1。主机要产生一个写数据 1 信号,就需要把数据线拉低,在写数据 1 信号开始后的 15us 内将数据线拉高。

- 读数据信号:主机将数据总线拉低时,至少保持 1us 后释放总线,必须在 15us 内读取数据,到下一次主机读取信号时,至少应该将总线拉高 1us

2.3 ROM 命令
这里需要注意的是主机访问 1-wire 器件都必须严格遵循单总线命令序列,即初始化、ROM 命令、功能命令。如果出现序列混乱,1-wire 器件将不响应主机(搜索 ROM 命令,报警搜索命令除外)。单总线协议中规定了 ROM 命令,而功能命令则根据具体 1-wire 器件所支持的功能来确定。
常见 ROM 命令如下

2.4 寻址方式
每个 1-Wire 从机都在 ROM 中存储了一个唯一的 64 位序列号,用作其节点地址。主机通过 ROM ID 来识别挂在总线网络上的从机。ROM ID 不可更改,由激光刻度在单总线器件内部。
ROM ID 由八个字节组成,分为三个主要部分:从 LSB 开始,第一个字节存储标识器件类型的 8 位系列代码。
接下来的 6 个字节存储可定制的 48 位单独地址。最后一个字节是由前 56 位 ROM 码所计算出的 CRC 校验码。


1-Wire 总线仅使用一根线来发送信号和供电。通信是异步和半双工的,并且遵循严格的主/从方案。总线上可以同时连接一个或多个从设备。总线上只能连接一个主设备。
浙公网安备 33010602011771号