跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
薄膜电阻捷比信 · 专业器件主题站

为什么UART驱动器1-Wire器件总是有问题?

麦叔叔是一家嵌入式公司。最近,他告诉我,使用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;当逻辑0通过1-WIRE器件的反相器时,总线将显示为逻辑1。当MCU发送逻辑0时,在反相器之后,总线出现逻辑1,逻辑1经过1-WIRE器件的反相器后将接收逻辑0。当1WIRE器件发送逻辑1时,Tx处的NMOS将导通,并且总线将显示逻辑0,并通过MCURx处的反相器,MCU将接收逻辑1。当1WIRE设备发送逻辑0时,NMOS被切断,总线显示逻辑1,MCU将接收逻辑0。主机(BUSMASTER)主要是MCU,因为MCU的TXD不是开漏的,所以通常需要一个外部的开漏缓冲电路,该电路可以由分立元件组成。使用两个NMOS晶体管2N7002,原理非常简单:当TXD输出高电平时,左侧的2N7002打开,右侧的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,加上第一个StartBit和最后一个StopBit,因此完整数据为: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)返回到0X90(00001001)表示从机响应。写入0 /写入1时隙主写入0为0X00,也可以添加回读,回读值为写入值。在时隙中写入0,而写入1为0XFF,回读值为写入值。写入1时隙示意图读取0 /读取1时隙关于读取时隙,当主机读取1时,主机首先拉低总线。通常,UART的起始位占1/115200 = 8.7us脉冲宽度。 (大于1us),因此从Data0开始,以下数据均为1,即读取的数据为11111111(0XFF),表示读取为1。在时隙图中读取0非常简单。如果读取的数据不是0XFF,则为0。读取时隙图0总结实际代码中的判断,可以简单地处理,复位/响应:发送F0,返回不是F0,这意味着奴隶回应;读0 /读1时隙:主机读0XFF,表示1,读非0XFF为0;简单可靠,麦叔叔还没有。今天的文章在这里,希望对您有所帮助