OneWire简介
- OneWire是美信(Maxim)开发的一种单总线通信接口,一根双向数据线,还有一根共同电压参考地线。
- 低速(15kbps),串行半双工通信
- 可以支持100米长距离通信
- 单主多从总线结构,最多支持63个从机挂接在同一个总线上
- 总是由主机发起通信过程,从机是被动参与通信
- 每个字节数据传输时,位按照LSB顺序
- 每个OneWire从机都有一个出厂就设定好的,固化在ROM中的不可更改的64位器件唯一ID,其作用类似于I2C的从机ID
- 主机和从机的数据线驱动引脚都要配置为开漏输出模式。总线通过一个外部上拉电阻(典型值为4.7K)拉高,因此总线空闲时为高电平。总线使用“线与”逻辑,只要一个设备拉低了总线,总线将变为低电平

总线上的基本信号与时隙
- 主流发送reset信号,接收从机响应的presence信号
- 主机发送逻辑0和逻辑1到总线
- 主机从总线读取逻辑0和逻辑1
主机发送复位信号并接收存在信号
为了开启一次通信事物,主机必须先发送总线复位信号(reset signal),第一个目的是为了唤醒并通知所有从机,另一个目的是为了检查总线上是否有从机存在。当从机收到复位信号后,他们将同步进行响应一个存在信号(presence signal),主机收到存在信号才知道总线上有从机存在,可以开始选中某个从机进行通信。

主机写逻辑0时隙
写“0”时隙的起始信号是主机将总线拉低,且至少维持60us(这个时间是为了保证从设备能来得及采样总线上的信号)。然后主机释放总线,等待总线在上拉电阻作用下恢复高电平状态,然后才能进行下一个bit的传输。等待总线恢复高电平的时间用TREC表示,最低为1us,最长为无穷大。

主机写逻辑1时隙
写“1”时隙的起始信号是主机将总线拉低,且至少维持1us,然后主机释放总线,总线在上拉电阻作用下恢复高电平状态,从拉低到恢复高电平要在15us内完成。然后等待从设备采样,等待时间最低持续15us,最长持续45us。当然,如果主机愿意,它可以等待更长的时间。

主机读逻辑0和读逻辑1时隙
每个读时隙至少持续60us并附加一个至少1us的TREC时间。
起始信号同样是主机先将总线拉低至少1us,然后主机释放总线。接下来准备读取从设备发送到总线上的信号。从设备在检测到下降沿后,便开始将信号输出到总线上并维持15us的时间。因此主机从拉低总线然后读取数据要在15us内完成。如果主机读取到总线是低电平,则读取到了逻辑0;如果主机读取到总线是高电平,则读取到了逻辑1。
软件模拟OneWire存在的问题
使用GPIO软件模拟某种接口,英

本文详细介绍了如何使用STM32F103的USART2接口模拟OneWire协议,包括发送reset信号、数据传输时隙和DS18B20温度传感器的应用。通过串口实现的OneWire协议简化了软件编写,但牺牲了部分硬件资源。
最低0.47元/天 解锁文章
5082





