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

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

    关注

    459

    文章

    51901

    浏览量

    433397
  • 电路
    +关注

    关注

    173

    文章

    6009

    浏览量

    174109
  • 单片机
    +关注

    关注

    6058

    文章

    44813

    浏览量

    644406
收藏 人收藏

    评论

    相关推荐

    DS2432 1Kb、保护型1-Wire EEPROM,带有SHA-1引擎技术手册

    DS2432在单个芯片内集成了1024位EEPROM、64位密钥、8字节寄存器/控制页(其中包含5个用户读/写字节)、512位SHA-1引擎和一个全功能的1-Wire接口。每个DS2432具有自身
    的头像 发表于 02-27 16:24 265次阅读
    DS2432 <b class='flag-5'>1</b>Kb、保护型<b class='flag-5'>1-Wire</b> EEPROM,带有SHA-<b class='flag-5'>1</b>引擎技术手册

    DS2430A 256位1-Wire EEPROM技术手册

    DS2430A是一款256位1-Wire® EEPROM,用于识别和存储与产品相关的信息。这个标签或特殊产品信息可以通过最少的接口访问,例如微控制器的一个端口引脚。DS2430A带有一个由工厂刻度
    的头像 发表于 02-27 15:21 304次阅读
    DS2430A 256位<b class='flag-5'>1-Wire</b> EEPROM技术手册

    DS2433系列4K位1-Wire EEPROM技术手册

    DS2433是一款4K位1-Wire® EEPROM,用于识别和存储与产品相关的信息。这个标签或特殊产品信息可以通过最少的接口访问,例如微控制器的一个端口引脚。DS2433带有一个由工厂刻度的注册码
    的头像 发表于 02-27 10:03 331次阅读
    DS2433系列4K位<b class='flag-5'>1-Wire</b> EEPROM技术手册

    DS2408系列1-Wire、8通道、可编程 1-Wire IC技术手册

    DS2408是一款8通道、可编程I/O 1-Wire® IC。PIO输出可配置为开漏结构,具有100Ω的最大导通电阻。稳固的PIO通道访问通信协议确保PIO输出设置变化没有误差。数据有效选通输出,可用来锁存PIO的逻辑状态,供给外部电路,如D/A转换器(DAC)或微控制器的数据总线。
    的头像 发表于 02-26 16:12 349次阅读
    DS2408系列<b class='flag-5'>1-Wire</b>、8通道、可编程 <b class='flag-5'>1-Wire</b> IC技术手册

    DS2431 1024位1-Wire EEPROM技术手册

    DS2431是一款1024位1-Wire® EEPROM芯片,由四页存储区组成,每页256位。数据先被写入一个8字节暂存器中,经校验后复制到EEPROM存储器。该器件的特点是,四页存储区相互独立
    的头像 发表于 02-26 15:38 362次阅读
    DS2431 1024位<b class='flag-5'>1-Wire</b> EEPROM技术手册

    DS28E04-100 4096位、可寻址、1-Wire EEPROM,带有PIO技术手册

    DS28E04-100是具有7个地址输入的4096位,1-Wire® EEPROM芯片。地址输入直接映射到1-Wire 64位器件ID号上,使主机系统能够在多器件1-Wire网络环境中直接识别
    的头像 发表于 02-26 15:29 297次阅读
    DS28E04-100 4096位、可寻址、<b class='flag-5'>1-Wire</b> EEPROM,带有PIO技术手册

    DS2413系列双通道可编程1-Wire芯片技术手册

    DS2413是双通道可编程I/O 1-Wire®芯片。PIO输出配置为开漏极,提供最高20mA的吸电流能力,截止状态工作电压可达28V。通过专门的器件级命令协议实现PIO引脚的控制与检测。为了在最终
    的头像 发表于 02-26 15:12 282次阅读
    DS2413系列双通道可编程<b class='flag-5'>1-Wire</b>芯片技术手册

    DS28EC20 20Kb 1-Wire EEPROM技术手册

    DS28EC20是一款20480位、1-Wire® EEPROM,分为80个256位的存储器页。器件提供一个额外的页用于控制功能。数据被写入一个32字节暂存器,经过校验后,复制到EEPROM存储器
    的头像 发表于 02-26 14:33 370次阅读
    DS28EC20 20Kb <b class='flag-5'>1-Wire</b> EEPROM技术手册

    DS9490 USB至1-Wire/iButton适配器技术手册

    DS9490B是一个USB桥接器和支架,用于单个F5尺寸的iButton。iButton被安全地固定在带锁的门后。DS9490R是一个带有1-Wire RJ11接口的USB桥,可容纳1-Wire插座
    的头像 发表于 02-26 10:45 344次阅读
    DS9490 USB至<b class='flag-5'>1-Wire</b>/iButton适配器技术手册

    PGA308读写过程中的28ms延时复位1-wire接口是硬件实现的还是需要编程实现?

    请问,PGA308读写过程中的28ms延时复位1-wire接口是硬件实现的还是需要编程实现?
    发表于 09-24 07:17

    聚徽-平板工控机出现问题如何处理

    工控电脑是工业领域中广泛应用的一种显示设备,常见于工业平板电脑和工业显示器。与商业电脑相比,工控电脑具备更为稳定的性能,能够适应各种恶劣的工业环境。然而,触摸屏作为工控电脑的重要组件,也可能会出现故障。那么,平板工控机出现问题
    的头像 发表于 08-20 09:20 387次阅读

    TMP1820 1-Wire®、1.7V 至 5.5V 总线供电电源、±0.3°C 精确数字温度传感器数据表

    电子发烧友网站提供《TMP1820 1-Wire®、1.7V 至 5.5V 总线供电电源、±0.3°C 精确数字温度传感器数据表.pdf》资料免费下载
    发表于 08-12 10:27 0次下载
    TMP1820 <b class='flag-5'>1-Wire</b>®、1.7V 至 5.5V 总线供电电源、±0.3°C 精确数字温度传感器数据表

    TMP1827 具有 SHA-256-HMAC 认证引擎、2Kb EEPROM 的 1-Wire®、±0.2°C 精度温度传感器数据表

    电子发烧友网站提供《TMP1827 具有 SHA-256-HMAC 认证引擎、2Kb EEPROM 的 1-Wire®、±0.2°C 精度温度传感器数据表.pdf》资料免费下载
    发表于 08-12 10:20 0次下载
    TMP1827 具有 SHA-256-HMAC 认证引擎、2Kb EEPROM 的 <b class='flag-5'>1-Wire</b>®、±0.2°C 精度温度传感器数据表

    TMP1826 具有 2Kb EEPROM 的 1-Wire®、±0.2°C 精度温度传感器数据表

    电子发烧友网站提供《TMP1826 具有 2Kb EEPROM 的 1-Wire®、±0.2°C 精度温度传感器数据表.pdf》资料免费下载
    发表于 08-12 10:07 0次下载
    TMP1826 具有 2Kb EEPROM 的 <b class='flag-5'>1-Wire</b>®、±0.2°C 精度温度传感器数据表

    256位1-Wire EEPROM存储器GXE00产品概述

    GXE00是一款 256 位 1-Wire EEPROM的存储芯片, 用于识别和保存产品的相关信息,识别码和这些相关信息可以通过最少的接口(例如,微控制器的一个端口)进行访问。
    的头像 发表于 07-30 14:36 912次阅读