不好意思让大家久等了,接下来我就来说说我是怎么一步一步解决困扰我半年的MSP430的I2C总线问题的!{:soso_e130:}{:soso_e130:}
五个月前,初步规划方案阶段:
我做的体感项目发展到了第四代,为了尽可能的减少尺寸和功耗,将原来的64脚IPM封装的MSP430F149换成了更小,功耗更低的MSP430F2132。选择该型号有显然的好处:32QFN封装,硬件I2C,自带上拉电阻,16MHz的功耗更低。我们使用了原来所用的ADXL345加速计,MPU3050陀螺仪和HMC5883L的磁场计解决方案。在前一版的MSP430F149上是采用模拟I2C总线,而上述传感器挂在这条总线上跑起来都毫无问题,只要焊接无问题,就一定能保证正确结果。而事实证明,这种自信确实是最后的罪魁祸首。
四个月前,第一版制作失败:
换方案后,板子确实做得非常小,只有硬币那么厚,小拇指那样的细条。我们在设计上花费了很多精力,保证尽可能小的体积和封装。PCB制版,焊接,上电,加速度计工作非常正常,而其他传感器返回都为错误。我们一看这个情况,I2C出来啦!单片机没问题!推断只能是传感器焊接问题。重新焊接,不行?那可能是布线和焊接问题。之所以考虑是焊接,是因为那种芯片非常难焊,所有管脚都在芯片屁股下面。如果技巧不够,很容易出现焊接不良的情况,以前的多数问题都是焊接问题。
解决了一些小的布局问题以后,准备做第二次板。
两个月前:第二版制作失败:
第二版做出来之后,出现了更严重的问题,每次上电调试,第一次程序还能写进去,第二次就不行了。再用万用表测,电源短路。上面的所有传感器都烧掉了!后来才知道,用的助焊剂非常好用,但导电!如果不洗干净,就会出现短路的问题! 后来我们都把板子直接泡到酒精里。
新的问题又出现了,单片机工作很不稳定。经常出现调试写入不正常,程序跑飞的情况,板子也会变得特别烫。用示波器一看,电源纹波相当大,在电源芯片旁边的电容烫的不能用手碰。仔细分析,原来是我们使用的电容值没有达到正常标准。这句话就在电源芯片PDF中的某一个非常不起眼的地方...更换以后,这部分没问题了。
可是,I2C还是出不来!加速度计的0X00寄存器返回0XEF值,原本以为是对的,但实际上应该是0xE5;加上驱动程序一跑,发现加速度计根本没正常工作!其他寄存器有的值读出来是错误的,比如写入0x3E,读出来却是0X5F.有些根本就不能读!但磁场计却能出来~陀螺仪永远出不来! 这是为什么呢?既然磁场计能正确读值,说明单片机和I2C总线软硬件都没问题,难道加速度计和陀螺仪芯片是假的??
我们骂了一遍那些“万恶的”淘宝卖家,重新买了一批传感器回来。因为硬件制作确实严格按照要求做了。我们高兴的以为,这不是我们的问题,开心的等待着顺丰把芯片送回来。同时,继续改进电路,完成了第三版。