SHT3X管脚模拟IIC接口获取温湿度数据开发过程记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、准备
  • 二、实际使用中遇到的问题
    • 1.复位命令不能够成功
    • 2.获取到的数据为全FF
  • 总结


前言

  • 项目中需要用到SHT3x-DIS的温湿度传感器,由于MCU管脚分配,只能够用软件来模拟IIC接口。此文章记录下在调试过程中的主要问题。一定不能粗心,不能粗心,不能粗心!!!为啥说三遍?因为过程中遇到的问题都是粗心导致的。

一、准备

  1. 管脚只需要用到了SDA和SCL两个IIC标准的管脚,这部分不过多说明,只是有一个地方需要注意,由于SDA脚需要输入和输出不断切换,因此需要观察SDA管脚的硬件电路外部有没有上拉,如果没有的话,MCU内部的上拉需要使能。然后在驱动里面SDA的高电平采用设置为输入管脚来实现,这样可以把SDA上的电平交给从机设备端(也就是SHT3x)来置位高低。
    其余没有什么需要特别注意的地方,IIC部分只是用到start信号,stop信号,发送ACK,发送NACK。这部分没什么好说的,一般能查到的IIC代码都注意了这部分。发送数据和获取数据部分注意顺序,这部分也是网上的代码都有注意。

二、实际使用中遇到的问题

1.复位命令不能够成功

  1. 代码编写完成后急于调试,上来获取到的数据为全FF,所以就通过逻辑分析仪查看IIC的数据是否正确,发现在第一步上电初始化的时候,给从机芯片发送复位命令,从机只回了两个ack,最后一个命令字节却回了个NACK。命令就是手册上的软件复位命令,如下图。
    SHT3X管脚模拟IIC接口获取温湿度数据开发过程记录_第1张图片
  • 通过反复查看时序确认时序是正确的,实在想不到原因为什么最后一个字节回复了NACK。于是看了下手册看到了有一个通用的复位命令,即0x0006,于是改为该复位命令后芯片能够正常复位。

2.获取到的数据为全FF

  • 这一步花了点时间,获取到的数据一直为全FF,除了上面因为复位的问题(可能是急于调试,IIC总线上数据乱了,导致前民正常获取数据的时候也获取不到,总是发了两个字节的数据后,第三个字节从机就不回复ACK了,正常复位后解决了),对了好多遍时序,都没看出来时序哪里有问题。最后终于仔细又看了下时序图,弄明白了中间我少发了个start信号。就是下图中的S部分。
    SHT3X管脚模拟IIC接口获取温湿度数据开发过程记录_第2张图片

    终于在时序上加上这步后顺利获取到实际数据。还是太粗心了,所以一定要细心观察。

总结

  • 代码不用贴了,本身没什么难度,都是细节地方没有注意到。其他还有一些需要注意的地方,比如时钟抓取,单次采样还是连续采样、CRC等。手册上写的很详细了,不再赘述。

你可能感兴趣的:(开发,单片机,嵌入式硬件)