一次恶心的AM2320温湿度传感器调试经历
前面画了一块MCU和FPGA的PCB板子,主要功能都已经测试通过了,还剩下一个温湿度传感器AM2320的功能没试,本以为网上买的这个模块无非就是引两个引脚出来就完事了,可最后却花了我近两天时间来调试,过程相当恶心。
我买的是网上十来块钱一个的做了一个小板,带了个电阻、电容的AM2320模块,用的是IIC时序来通讯。
问题在于,同样的例程,在开发板上就可以正常工作,而用在自己焊的板子上就不行。通过抓取逻辑波形,发现器件能够应答,但是一到读取数据时全是低电平。
最直观的判断是焊接或者设计出错了,用万用表仔细检查后发现引脚确实没错、也没有出现挨着引脚短路的情况。 然后查了背面stm32芯片的滤波电容是否虚焊导致不稳定,发现也没有。最后,硬件上我就又暂时归结到万恶我干扰上去,此点保留疑惑,主要是也不能做什么,然后开始检查软件上存在的一些隐患问题。
软件上检查的问题包括,时序调整、等待延时调整、休眠延时调整、系统任务中提高该任务的优先级、换其它调试命令、换其它器件地址、检查引脚的输入模式是否设置上拉、以及更换引脚等操作,未果,此时已经经历了一天半了,心累不已。
偶然间,发现波形总是不能响应高电平,应答的低电平是能够相应的,所以应该是硬件驱动能力的问题,用万用表测了一下开发板上 3.3V和sda之间引脚的电阻,在5K左右,测自己焊接的板子230K左右,又发现了一个问题!在iic的sda线上加了一个5.1k的上拉电阻,波形还是不对,测板子3.3与sda脚电阻,只有1.1k左右,再结合波形,有种电阻过小、上拉太强的直觉。最后换成10k电阻,测试成功。
总结,就是sda引脚的上拉电阻没加对引起的器件数据读取失败,有低电平应答无高电平数据写入。引起困惑的原因是,stm32的引脚内部的上拉电阻没起应有的作用,即使配置了上拉,还是不行。