0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么UART驱动1-Wire设备总是出现问题?

工程师 来源:记得诚 作者:记得诚 2020-10-23 17:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

麦叔是搞嵌入式的,最近项目delay,他和我说用UART驱动1-Wire设备总是出现问题,故写此文来拯救他。

作者之前写过UART(点我),也写过1-Wire(点我),本文介绍如何用主机的UART驱动1-Wire从机设备,建议先看看以上两篇文章,再阅读本文,效果更佳。

硬件电路

1-Wire结构简单,一根线就可以通信,常见的18B20用的就是1-Wire结构。单片机的串口UART(多是TTL电平),如何用单片机控制通用的1-Wire设备呢?如果MCU和从设备的电平不一致如何解决?软件协议又是如何控制的呢?本文主要解决这两个问题。

主机或从机将数据线拉低到GND表示数据0,将数据线释放为高表示数据1,高电平由上拉电阻(一般是4.7K)提供。

当MCU发送逻辑1时,经过反相器,总线呈现逻辑0,逻辑0经过1-WIRE器件的反相器,即会收到逻辑1;

当MCU发送逻辑0时,经过反向器,总线呈现逻辑1,逻辑1经过1-WIRE 器件的反相器,即会收到逻辑0;

当1WIRE 器件发送逻辑1时,Tx处有NMOS会导通,总线呈现逻辑0,经过MCU Rx 处的反相器,MCU会收到逻辑1;

当1WIRE器件发送逻辑0时,NMOS截止,总线呈现逻辑1,MCU会收到逻辑0;

主机端(BUS MASTER)多为MCU,因为MCU的TXD不是漏极开路,因此通常需要一个外部漏极开路缓冲电路,该电路可以由分立元件构成。

用两个NMOS管2N7002,原理很简单:

TXD输出高电平时,左边的2N7002导通,右边的截止,DQ被4.7K电阻上拉至Vpullup高电平;

TXD输出低电平时,左边的2N7002截止,右边的导通,DQ被拉低至低电平0;

用分立器件搭建的缓冲电路

也可以用集成芯片NC7WZ07,如下图所示,TXD输出高,DQ=Vpullup,TXD输出低,DQ=0;

用集成芯片搭建的缓冲电路

解决了硬件电路,我们再来看软件协议部分,1-Wire的协议可以分为复位/应答、写0/写1时隙、读0/读1时隙。

软件协议

复位/应答

如下图,上面部分是1-Wire的复位/应答时序,下面是UART的时序。

复位/应答信号时序

原理:

主机以9600的波特率发送数据0XF0,因为LSB在前,0XF0=00001111,加上最前面的Start Bit和最后面的Stop Bit,完整的数据为:0000011111,代表主机先发了5位的0,然后发了5位的1;9600波特率,一位传输时间是1/9600=104.2us,所以低电平持续时间为104.2*5=521us,满足480~960us复位总线的时序要求。

那主机收到什么数据代表从机应答呢?

首先主机如果发送F0后收到还是F0,说明从机没有应答,从机应答总线数据会改变,可以简单的判断收到的数据为非F0即代表从机应答。

根据1-Wire的时序波形,也可以进行推算,从上图看,Data0~Data3均为0,因为1-Wire时序是有一定时间范围,并不是固定的脉宽,如TPDH为15~60us,TPDL为60~240us,所以Data4~Data7是有一定的组合,返回0X10(00001000) to 0X90(00001001)都代表从机应答。

写0/写1时隙

主机写0就是0X00,也可以加入回读,回读值即为写的值。

写0时隙

写1就是0XFF,回读值即为写的值。

写1时隙图

读0/读1时隙

关于读时隙,可以先看主机读1时,主机先拉低总线,一般时间1us左右,UART的Start Bit会占1/115200=8.7us的脉宽(大于1us),所以从Data0开始,后面的数据都为1,即读到的数据为11111111(0XFF)代表读到的是1。

读1时隙图

那读0也就很简单,读到的数据不为0XFF即为0。

读0时隙图

小结一下

实际代码里面的判断,可以简单处理,复位/应答:发送F0,返回不为F0,即代表从机应答;读0/读1时隙:主机读到0XFF即为1,读到非0XFF即为0;简单又可靠,麦叔还不会。

今天的文章到这里就结束了,希望对你有帮助,我们下一期见。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    463

    文章

    54630

    浏览量

    470892
  • 电路
    +关注

    关注

    173

    文章

    6093

    浏览量

    179134
  • 单片机
    +关注

    关注

    6078

    文章

    45629

    浏览量

    675330
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    1-Wire SHA-1认证器DS28E10的技术解析与应用

    1-Wire SHA-1认证器DS28E10的技术解析与应用 在电子设计领域,安全认证和数据存储是至关重要的环节。今天我们要深入探讨的是Maxim公司的1-Wire SHA-1认证器D
    的头像 发表于 05-21 17:25 522次阅读

    探索DS28E18:1-Wire到I²C/SPI的桥梁

    探索DS28E18:1-Wire到I²C/SPI的桥梁 在当今的电子设计领域,高效、可靠的通信接口至关重要。DS28E18作为一款独特的通信桥接芯片,为远程SPI或I²C传感器的控制提供了创新
    的头像 发表于 05-12 15:45 100次阅读

    探索DS28E17:1-Wire到I²C控制器桥的技术解析

    探索DS28E17:1-Wire到I²C控制器桥的技术解析 在电子设计领域,接口转换与通信协议的适配一直是关键课题。DS28E17作为一款1-Wire到I²C的控制器桥设备,为复杂的I²C设备
    的头像 发表于 05-12 15:35 114次阅读

    深入解析DS2413:1-Wire双通道可寻址开关的卓越性能与应用

    深入解析DS2413:1-Wire双通道可寻址开关的卓越性能与应用 引言 在电子设计领域,对于高效、可靠的I/O控制芯片的需求日益增长。DS2413作为一款双通道可编程I/O的1-Wire芯片,凭借
    的头像 发表于 05-11 16:20 107次阅读

    深入剖析DS2408:1-Wire 8-Channel Addressable Switch全解析

    深入剖析DS2408:1-Wire 8-Channel Addressable Switch全解析 在电子工程领域,高效且稳定的开关控制芯片是实现复杂电路功能的关键。DS2408作为一款由Maxim
    的头像 发表于 05-11 16:20 106次阅读

    Adafruit 1-Wire Thermocouple Amplifier - MAX31850K:高效温度测量解决方案

    测量设备——Adafruit 1-Wire Thermocouple Amplifier - MAX31850K。 文件下载: 1727.pdf 产品概述 热电偶是一种非常敏感的温度测量元件,需要一个
    的头像 发表于 05-10 16:15 694次阅读

    Adafruit 1-Wire GPIO Breakout - DS2413 开发板使用指南

    Adafruit 1-Wire GPIO Breakout - DS2413 开发板使用指南 在微控制器的世界里,引脚资源常常十分宝贵。有时候,我们仅仅需要一两个额外的引脚,但又不想更换更大的开发板
    的头像 发表于 05-10 16:05 306次阅读

    MAX31850/MAX31851:冷端补偿1-Wire热电偶数字转换器的深度解析

    MAX31850/MAX31851:冷端补偿1-Wire热电偶数字转换器的深度解析 在电子工程师的日常工作中,温度测量是一个常见且关键的任务。而MAX31850/MAX31851冷端补偿1-Wire
    的头像 发表于 04-30 16:30 224次阅读

    深度剖析DS28E83:抗辐射1-Wire认证器的卓越性能与应用

    深度剖析DS28E83:抗辐射1-Wire认证器的卓越性能与应用 在电子设备的安全认证领域,抗辐射能力与高效的加密功能至关重要。DS28E83作为一款抗辐射的1-Wire认证器,凭借其先进的技术和丰
    的头像 发表于 04-01 16:20 207次阅读

    深度剖析DS28E40:汽车级1-Wire认证器的卓越性能与应用

    深度剖析DS28E40:汽车级1-Wire认证器的卓越性能与应用 在汽车电子和物联网安全领域,安全认证是保障系统稳定运行和数据安全的关键。DS28E40作为一款专为汽车应用设计的1-Wire认证器
    的头像 发表于 04-01 16:05 195次阅读

    DS28E16 1-Wire Secure SHA-3 Authenticator:安全认证的理想之选

    DS28E16 1-Wire Secure SHA-3 Authenticator:安全认证的理想之选 在当今数字化时代,设备的安全认证至关重要。Maxim Integrated推出的DS28E16
    的头像 发表于 04-01 15:55 216次阅读

    探索DS2413:1-Wire双通道可寻址开关的卓越性能与应用

    探索DS2413:1-Wire双通道可寻址开关的卓越性能与应用 在电子设计领域,高效、可靠的I/O控制芯片一直是工程师们追求的目标。DS2413这款1-Wire双通道可寻址开关芯片,凭借其独特
    的头像 发表于 04-01 15:40 320次阅读

    分享1-Wire接口数字温度传感器IC型号

    如今,随着测温应用环境的升级和拓展,精准的温度测量与控制已成为各种环境数据采集的关键,传统模拟温度传感器已经无法满足市场的要求,而1-Wire接口数字温度传感器IC的出现,极大地简化了系统设计。为此
    的头像 发表于 12-02 16:34 1086次阅读
    分享<b class='flag-5'>1-Wire</b>接口数字温度传感器IC型号

    怎么通过UART1对指纹识别模块的控制

    库里面的: 注意,uart1对应FPGA接口的GPIOB接口,对应的地址由IOF模式下IOF_UART_MASK配置。 此外,注意将uart1进行宏定义,否则会出现问题,这里将其宏定
    发表于 10-30 06:12

    使用设备驱动uart数据丢帧怎么解决?

    ,115200的波特率下并没有出现这个问题。之后我又将设备驱动接口几个函数中的代码注释,在rt_hw_usart_init手动初始化串口 rcu_periph_clock_enable(RCU_GPIOA
    发表于 09-26 07:20