提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档
文章目录
- 前言
- 一、准备
- 二、实际使用中遇到的问题
-
- 1.复位命令不能成功
- 2.获得的数据是完整的FF
- 总结
前言
- 需要在项目中使用SHT3x-DIS由于温湿度传感器,MCU管脚分配只能用软件模拟IIC界面。本文记录了调试过程中的主要问题。不能粗心,不能粗心,不能粗心!!!为什么要说三遍?因为这个过程中遇到的问题是由粗心引起的。
一、准备
- 只需使用管脚SDA和SCL两个IIC标准管脚,这部分说明不多,只有一个地方需要注意,因为SDA脚需要连续切换输入和输出,因此需要观察SDA如果没有,管脚硬件电路的外部是否上拉,MCU内部上拉需要能量。然后在驱动中SDA高电平设置为输入管脚,可以实现SDA上电平交给从机设备端(即SHT3x)位置高低。 没有其他地方需要特别注意,IIC部分只用start信号,stop信号,发送ACK,发送NACK。这部分没什么好说的,一般可以找到IIC所有代码都注意到了这一部分。注意发送数据和获取数据的顺序,也注意在线代码。
二、实际使用中遇到的问题
1.复位命令不能成功
- 代码编写完成后,急于调试,上来获得的数据全部FF,因此,通过逻辑分析仪检查IIC数据是否正确,发现在电源初始化的第一步,从机芯片发送复位命令,从机只有两个ack,最后一个命令字节回到了NACK。命令是手册上的软件复位命令,如下图所示。
- 通过反复查看时序来确认时序是正确的的想不出为什么最后一个字节回复了NACK。所以我看了手册,看到了一个通用的复位命令,即0x006,因此芯片可以在复位命令后正常复位。
2.获得的数据是完整的FF
-
这一步花了点时间,获取到的数据一直为全FF,除上述复位问题(可能是急于调试,IIC总线数据混乱,导致前民在正常获取数据时无法获取数据。总是发送两个字节数据后,第三个字节不会从机器上回复ACK了,正常复位后解决了),对了好多遍时序,都没看出来时序哪里有问题。最后,我仔细地看了看下一个序列图,发现我在中间少发了一个start信号。是下图中的S部分。
最后,添加此步骤后,顺利获取实际数据。还是太粗心了,一定要仔细观察。
总结
- 代码不需要粘贴,本身并不难,是细节没有注意到。还有其他地方需要注意,如时钟捕获、单次采样或连续采样CRC等等。手册非常详细,不再重复。