一、单总线介绍
1-wire单总线是Maxim(美信公司)全资子公司Dallas(达拉斯)的一项专有技术与目前多数标准串行数据通信方式,如SPI 、I2C不同, 它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。
1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作;而当多个从机位于总线上时,则系统按照多节点系统操作
每一个符合1-Wire协议的从芯片都有一个唯一的地址, 包括48位的序列号、8位的家族代码和8位的CRC代码。主芯片对各个从芯片的寻址依据这64位的不同来进行。
单总线利用一根线实现双向通信。 因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。 基本的时序包括:复位、应答时序、写1位时序、读1位时序。在复位及应答时序中,主器件发出复位信号后,要求从器件在规定的时间内送回应答信号;在位读和位写时序中,主器件要在规定的时间内读出或写入数据。
二、DS18B20温度传感器
DS18B20采用达拉斯独家的1-Wire总线协议,使用一个控制信号实现总线通信。控制线需要一个弱上拉电阻,因为所有设备都通过三态或漏极端口(DS18B20中的DQ引脚)连接到总线。在这个总线系统中,微处理器(主设备)使用每个设备唯一的64位码来标识和寻址总线上的设备。因为每个设备都有一个唯一的码,所以可以在一个总线上寻址的设备数量实际上是无限的。
DS18B20的另一个特点是能够在没有外部电源的情况下运行。当总线为高电平时,电源通过DQ引脚通过1-Wire上拉电阻供电。高总线信号还为内部电容器(CPP)充电,然后在总线为低电平时为器件供电。这种从1-Wire总线获取电源的方法被称为“寄生电源”。作为替代方案,DS18B20也可以由VDD上的外部电源供电
三、MEASURING TEMPERATURE(温度测量)
DS18B20的核心功能是其直接数字温度传感器。温度传感器的分辨率可由用户配置为9、10、11或12位,分别对应0.5℃、0.25℃、0.125℃和0.0625℃的增量。上电时的默认分辨率为12位。DS18B20在低功耗空闲状态下上电;要启动温度测量和A到D转换,主机必须发出转换T[44h]命令。转换后,产生的热数据存储在暂存器中的2字节温度寄存器中,DS18B20返回到空闲状态。
温度数据在温度寄存器中存储为16位符号扩展的二进制补码。符号位(S)指示温度是正的还是负的:对于正数S=0,对于负数S=1。如果DS18B20配置为12位分辨率,温度寄存器中的所有位都将包含有效数据。
四、DS18B20事务序列
Step 1. Initialization(初始化)
Step 2. ROM Command(ROM命令)
Step 3. DS18B20 Function Command(功能命令)
3.2.1 READ ROM [33h]
此命令只能在总线上有一个从站时使用。它允许总线主机读取从站的64位ROM码,而无需使用搜索ROM过程。如果在总线上有多个从站时使用此命令,当所有从站尝试同时响应时,将发生数据冲突。
每个DS18B20都包含一个存储在ROM中的唯一64位码。ROM码的最低有效8位包含DS18B20的1-Wire系列码:28h。接下来的48位包含一个唯一的序列号。最高有效8位包含一个循环冗余码检测(CRC)字节,该字节是从ROM码的前56位计算出来的。
3.2.2 SKIP ROM [CCh]
主机可以使用此命令同时寻址总线上的所有设备,而无需发送任何ROM代码信息。例如,主机可以通过发出SKIP ROM命令后跟转换T[44h]命令来使总线上的所有DS18B20同时执行温度转换。
3.3 FUNCTION COMMANDS
总线主站使用ROM命令寻址它希望与之通信的DS18B20后,主站可以发出DS18B20功能命令之一。
3.3.1 CONVERT T [44h]
此命令启动单次温度转换。转换后,生成的热数据存储在暂存器中的2字节温度寄存器中,DS18B20返回低功耗空闲状态。
3.3.2 READ SCRATCHPAD [BEh]
此命令允许主机读取暂存器的内容。数据传输从字节0的最低有效位开始,并继续通过暂存器,直到读取第9个字节(字节8-CRC)。如果只需要部分暂存器数据,主机可以随时发出重置以终止读取。
五、DS18B20操作时序
4.1 INITIALIZATION PROCEDURE: RESET AND PRESENCE PULSES
与DS18B20的所有通信都以初始化序列开始,该序列由主设备的复位脉冲和DS18B20的存在脉冲组成。当DS18B20响应复位发送存在脉冲时,它向主设备表明它在总线上并准备好操作
在初始化序列中,总线主控器通过将1-Wire总线拉低至少480us来发送复位脉冲。然后总线主控器释放总线并进入接收模式(RX)。当总线释放时,5k上拉电阻将1-Wire总线拉高。当DS18B20检测到这种上升沿时,它等待15us到60us,然后通过将1-Wire总线拉低60us到240us来发送存在脉冲。
4.2 WRITE TIME SLOTS
有两种类型的写入时间槽:“Write 1”时间槽和“Write 0”时间槽。总线主控器使用“Write 1”时间槽将逻辑1写入DS18B20,使用“Write0”时间槽将逻辑0写入DS18B20。所有写入时间槽的最小持续时间为60微秒,相邻写入槽之间的最小恢复时间为1微秒。两种类型的写入时间槽均由主控器将1-Wire总线拉低来启动。
要生成一个Write 1时间槽,在将1-Wire总线拉低之后,总线主控器必须在15微秒内释放1-Wire总线。当总线被释放时,5k的上拉电阻会将总线拉高。要生成一个Write 0时间槽,在将1-Wire总线拉低之后,总线主控器必须在整个时间槽内(至少60微秒)继续将总线保持在低电平状态
DS18B20在主机启动写入时间槽后的15us到60us的窗口中对1-Wire总线进行采样。如果在采样窗口中总线为高电平,则向DS18B20写入1。如果总线为低电平,则向DS18B20写入0。
4.3 READ TIME SLOTS
DS18B20只有在主控机发出读取时间槽时才能向主控机传输数据。因此,主控机必须在发出读取暂存器[BEh]或读取电源[B4h]命令后立即生成读取时间槽,以便DS18B20能够提供所请求的数据。此外,主控机可以在发出转换T[44h]或召回E2[B8h]命令后生成读取时间槽,以找出操作的状态,如DS18B20功能命令部分所述。
所有读取时间槽的持续时间必须至少为60us,时间槽之间的恢复时间至少为1us。读取时间槽由主设备将1-Wire总线拉低至少1us,然后释放总线启动。
当主机启动读取时间槽后,DS18B20将开始在总线上传输1或0。DS18B20通过将总线保持在高电平来传输1,并通过将总线拉低来传输0。当传输0时,DS18B20将在时间槽结束时释放总线,总线将被上拉电阻拉回其高空闲状态。DS18B20的输出数据在启动读取时间槽的下降沿后对15us有效。因此,主机必须释放总线,然后从时间槽开始在15us内对总线状态进行采样