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

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

    关注

    446

    文章

    47746

    浏览量

    409031
  • 电路
    +关注

    关注

    170

    文章

    5480

    浏览量

    169473
  • 单片机
    +关注

    关注

    5999

    文章

    43966

    浏览量

    620718
收藏 人收藏

    评论

    相关推荐

    请问1-Wire网线如何连接USB适配器?

    ADI/Maxim的 DS1402 系列1-Wire网络电缆提供与任何USB、串行或并行端口1-Wire适配器的连接。经常有客户询问DS1402如何连接USB适配器。许多客户对规格书上的连接性矩阵表感到困惑。
    的头像 发表于 03-28 11:39 266次阅读
    请问<b class='flag-5'>1-Wire</b>网线如何连接USB适配器?

    详细分析机电1-Wire接触封装解决方案及其安装方法

    本文介绍已获专利的适用于机电接触应用的1-Wire接触封装解决方案,并对比传统的封装解决方案以展示1-Wire接触封装解决方案的优越性。本文还就如何将该解决方案安装到配件或耗材提供了建议,并作了机械
    的头像 发表于 12-18 18:25 432次阅读
    详细分析机电<b class='flag-5'>1-Wire</b>接触封装解决方案及其安装方法

    机电1-Wire接触封装解决方案及其安装方法介绍

    本文介绍已获专利的适用于机电接触应用的1-Wire接触封装解决方案,并对比传统的封装解决方案以展示1-Wire接触封装解决方案的优越性。
    的头像 发表于 12-18 18:23 856次阅读
    机电<b class='flag-5'>1-Wire</b>接触封装解决方案及其安装方法介绍

    双通道可编程I/O 1-Wire芯片GX2413产品概述

    GX2413是双通道可编程I / O 1-Wire芯片。 PIO输出配置为开漏,提供高达20mA的连续吸收能力和高达28V的关断状态工作电压。 使用专用的设备级命令协议来执行PIO PIN的控制
    的头像 发表于 12-07 09:40 343次阅读
    双通道可编程I/O <b class='flag-5'>1-Wire</b>芯片GX2413产品概述

    GXE00系列256位1-Wire EEPROM产品概述

    GXE00系列 256 位 1-Wire EEPROM 用于识别和保存产品的相关信息,识别码和这些相关信息可以通过最少的接口(例如,微控制器的一个端口)进行访问。GXE00 内部包含由工厂激光
    的头像 发表于 12-05 16:35 422次阅读
    GXE00系列256位<b class='flag-5'>1-Wire</b> EEPROM产品概述

    如何将1-Wire主机复用到多个通道?

    一个1-Wire设备。但是在某些情况下,我们可能需要将1-Wire主机复用到多个通道,这就需要一些特殊的技术来实现。 1. 多路复用器 使用多路复用器是实现1-Wire主机复用到多个通
    的头像 发表于 10-29 14:21 288次阅读

    如何将1-Wire主机复用到多个通道?

    1-Wire网络最初设计用于与单条1-Wire总线上的单个1-Wire主机和多个1-Wire节点进行通信。对于1-Wire网络,理想的拓扑是
    的头像 发表于 10-24 16:05 179次阅读
    如何将<b class='flag-5'>1-Wire</b>主机复用到多个通道?

    DS28E40: Deep Cover Automotive 1-Wire Authenticator Data Sheet DS28E40: Deep Cover Automotive 1-Wire Authenticator Data Sheet

    电子发烧友网为你提供ADI(ADI)DS28E40: Deep Cover Automotive 1-Wire Authenticator Data Sheet相关产品参数、数据手册,更有
    发表于 10-17 19:26
    DS28E40: Deep Cover Automotive <b class='flag-5'>1-Wire</b> Authenticator Data Sheet DS28E40: Deep Cover Automotive <b class='flag-5'>1-Wire</b> Authenticator Data Sheet

    DS28EL22: DeepCover Secure Authenticator with 1-Wire SHA-256 and 2Kb User EEPROM Data Sheet DS28EL22: DeepCover Secure Authenticator with 1-

    电子发烧友网为你提供ADI(ADI)DS28EL22: DeepCover Secure Authenticator with 1-Wire SHA-256 and 2Kb User EEPROM
    发表于 10-17 18:54
    DS28EL22: DeepCover Secure Authenticator with <b class='flag-5'>1-Wire</b> SHA-256 and 2Kb User EEPROM Data Sheet DS28EL22: DeepCover Secure Authenticator with 1-

    DS28E25: DeepCover Secure Authenticator with 1-Wire SHA-256 and 4Kb User EEPROM Data Sheet DS28E25: DeepCover Secure Authenticator with 1-Wi

    电子发烧友网为你提供ADI(ADI)DS28E25: DeepCover Secure Authenticator with 1-Wire SHA-256 and 4Kb User EEPROM
    发表于 10-16 18:55
    DS28E25: DeepCover Secure Authenticator with <b class='flag-5'>1-Wire</b> SHA-256 and 4Kb User EEPROM Data Sheet DS28E25: DeepCover Secure Authenticator with 1-Wi

    如何判断直线模组出现问题

    如何判断直线模组出现问题
    的头像 发表于 10-16 17:47 397次阅读
    如何判断直线模组<b class='flag-5'>出现问题</b>

    通过1-Wire技术简化TWS耳机解决方案

    本设计将ADI公司独有的1-Wire®技术首次运用到TWS耳机解决方案中,使用1-Wire双向桥接器DS2488,在满足能量传输和数据通信要求的基础上,具备低成本、低功耗、高精度、小尺寸、高效率等诸多优势,是TWS耳机的理想解决方案。
    的头像 发表于 06-14 15:45 832次阅读
    通过<b class='flag-5'>1-Wire</b>技术简化TWS耳机解决方案

    为嵌入式应用选择合适的1-Wire主机

    本文讨论的电路为1-Wire主机控制器,它们均与1-Wire从器件通信。 但是,这些1-Wire主机控制器不能作为单独的主体,需要一个主机(计算机)告诉它们在1-Wire侧如何工作。
    的头像 发表于 06-13 09:40 663次阅读
    为嵌入式应用选择合适的<b class='flag-5'>1-Wire</b>主机

    了解和使用Maxim 1-Wire和iButton产品的循环冗余校验

    节为1-Wire CRC字节。本应用笔记解释了如何计算这种8位1-Wire CRC。它还继续解释用于验证保存在设备内存中的记录的 16 位 CRC。1-Wire CRC和CRC-16均
    的头像 发表于 05-16 11:23 659次阅读
    了解和使用Maxim <b class='flag-5'>1-Wire</b>和iButton产品的循环冗余校验

    求分享使用1-wire DS1820测量温度示例

    得益于最新的 nodeMCU 固件,esp 现在能够使用 Dallas 1-wire DS18S20 和 DS18B20 测量温度。 原始的(和过时的 DS1820)没有测试,因为我不再有这样的芯片
    发表于 04-27 07:07