I-Wire单总线通信
一、单总线介绍
1-Wire单总线是由Maxim公司的子公司Dallas开发的一种专有技术,与SPI、I2C等标准串行通信方式不同,它采用单根信号线同时传输时钟和数据,支持双向通信。该技术具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等优点。1-Wire总线适用于单个主机系统,能够控制一个或多个从机设备。每个符合I-Wire协议的从芯片都有一个唯一的64位地址,包括48位的序列号、8位的家族代码和8位的CRC代码,主芯片通过这64位地址对各个从芯片进行寻址。单总线协议对时序要求严格,包括复位、应答、写1位和读1位等时序。
二、DS18B20温度传感器
DS18B20是使用1-Wire总线协议的温度传感器,通过一个控制信号实现总线通信。控制线需要一个弱上拉电阻,所有设备通过三态或漏极端口连接到总线。微处理器(主设备)使用每个设备唯一的64位码来标识和寻址总线上的设备。DS18B20还可以在没有外部电源的情况下运行,通过1-Wire上拉电阻和内部电容器(CPP)实现寄生电源供电。温度传感器的分辨率可配置为9、10、11或12位,分别对应0.5℃、0.25℃、0.125℃和0.0625℃的增量,默认分辨率为12位。温度测量通过发出转换
T44h
命令启动,结果存储在2字节的温度寄存器中。
三、温度测量
温度数据在温度寄存器中存储为16位符号扩展的二进制补码。符号位(S)指示温度是正的还是负的:对于正数S=0,对于负数S=1。如果DS18B20配置为12位分辨率,温度寄存器中的所有位都将包含有效数据。
温度数据存储为16位符号扩展的二进制补码,符号位表示温度的正负。温度寄存器的上电复位值为+85℃。对于不同的分辨率,温度寄存器的部分位可能未定义。
四、DS18B20事务序列
·Step 1. Initialization(初始化)
·Step 2. ROM Command(ROM命令)
·Step 3. DS18B20 Function Command(功能命令)
·初始化:所有1-Wire总线事务从初始化序列开始,包括主设备发送复位脉冲和从设备发送存在脉冲。
·ROM命令:主设备检测到存在脉冲后,可以发出ROM命令,操作从设备的64位ROM码。
·功能命令:主设备使用ROM命令寻址特定的DS18B20后,可以发出功能命令,如启动温度转换、读取暂存器等。
五、DS18B20操作时序
1.初始化过程:主设备发送复位脉冲,从设备响应存在脉冲。
2.写入时间槽:包括Write1和Write0两种类型,分别用于写入逻辑1和逻辑0。
·要生成一个Write 1时间槽,在将1-Wire总线拉低之后,总线主控器必须在15微秒内释放1-Wire总线。当总线被释放时,5k的上拉电阻会将总线拉高。
·要生成一个Write 0时间槽,在将1-Wire总线拉低之后,总线主控器必须在整个时间槽内(至少60微秒)继续将总线保持在低电平状态
3.读取时间槽:主设备生成读取时间槽,DS18B20在总线上传输数据。
·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内对总线状态进行采样。
六、GPIO控制器相关操作函数接口
·管脚初始化:依赖于FUSE设置,当TAMPERPIN用作GPIO时,ALT5模式有效。
·管脚输入输出方向控制。
·管脚输出电平控制。
·读取管脚的输入电平。
七、DS18B20相关操作函数接口
·初始化探测DS18B20设备。
·向DS18B20写入一个位。
·从DS18B20读取一个位。
八、读取DS18B20的ID和采集的温度
·读取ID:通过在线CRC验证读取的ID是否正确。
·采集温度。