在RT10xx MCU上通过LPUART实现1-Wire单总线协议
1-Wire单总线是美国 DALLAS 公司推出的外围串行扩展总线技术。它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。1-Wire单总线协议通过一条线实现四种基本操作:复位、写1位、写0位和读位操作。 为了实现1-Wire协议,传统方式是采用一个GPIO脚配合软件延时的方式实现相关协议,1-Wire总线协议需要微秒级时间分辨率。但在运行RTOS嵌入实时操作系统环境下,软件模拟1-Wire可能存在延时不准确的问题。另一种方式是使用标准串口实现1-Wire协议的bit数据的读、写时隙,由串口内部的移位寄存器硬件去实现发送、接收过程。 标准串口1 btye数据包括1 bit起始位(低电平)、8个数据位、1停止位(高电平)。可以通过串口1 byte模拟出1-Wire的1 bit时隙。 1-Wire协议写信令,写操作需要60-120us,从设备在15-60us进行采样。如果将串口的波特率设置成波特率为115200 bps,即每1 bit的宽度为8.6 μs,串口1 btye有9位数据组合成t=8.6*9=78us,满足读写脉冲至少60 μs的协议要求。如果串口发送0x00数据,就是1-Wire写0信令,如果串口发送0xFF数据,就是1-Wire写1信令。串口发送0xFF,如果串口收到还是0xFF,那么就是读到1,反之就是读到0。
1-Wire协议复位信令,由于复位的时序要求比较长,115200的波特率无法满足,复位时需要先将波特率设置成9600bps,复位完成后改成115200bps。串口Tx发送复位字节0xF0,低电平时长为1000000/9600* 5 = 520us。如果串口Rx收到0xF0说明设备没有应答,其他说明设备应答成功。 在RT1050 MCUXpresso SDK的例程$(SDK)\boards\evkbimxrt1050\driver_examples\lpuart\polling基础上快速实现1-Wire测试代码。
上述介绍了如何在 NXP RT1052MCU上通过LPUART串口实现1-Wire单总线协议。使用LPUART硬件配合软件,满足 1-Wire通信协议和系统的实时性,可以运行在Bare metal或者RTOS实时操作系统环境。
相关的文档和测试源代码可以从下面百度网盘下载:
|