昨天在调433MHz的无线通信,点对点通信模式,上午测试过了发送端程序,下午测试接收端程序,由于板子上没有留一个IO供指示用,一个LED,蜂鸣器,液晶,或者串口都没有,调试的时候很不方便,只有靠 JTAG仿真断点测试,然后watch变量或者memory。按理说这也没有什么崩溃的,慢慢弄就好了,但是事情不是想象的那么简单,一个巨大的问题开始逼近我,让我感觉无奈。
点对点通过了,我就继续广播通信测试,其实我就用一台电脑,一个JTAG仿真器,两个MSP430F147+CC1101板子和一个 MSP430F2274+CC1101。我开启地址校验,发现我写的错误的地址他居然也可以收到数据,引发我的疑问,然后为了排疑,退了一步,不开启地址校验,不断修改程序,由于我就用一个电脑,一个仿真器,我的JTAG在发送端和接收端不停的拔来拔去,也没有什么找到原因,我越弄越烦,真想用两台电脑,两个仿真器,一个就负责发射端程序,一个就负责接收端程序,两者同时调,那样多舒服啊。
我用的通信模式是可变数据长度,没有地址校验,前导码+同步码+数据包长度+数据包+2字节CRC校验码,断点一下读了一下接收的数据,发现只有一个字节0xFF。现象是只要我的数据包长度不改变就是好的,比如一直固定0x14,也就是发送20字节的数据,但是当我每次都改变数据包长度,比如每次加一个字节,就接收不到正常的数据。为了查出是发送端问题还是接收端的问题,我也对2274那块板收到的无线数据进行读取,发现也是接收字长也是1,接收数据 0xFF,这个不会错,因为这个以前我用的程序,是好的板子。看来是发送端没有发送出去数据。然后我就想发送的函数有什么不同,我函数是用的指针传址调用,可以改变变量值,按理说不会有问题,我都是用的地址,没有用形参,排除,然后怀疑是不是地址传来传去,最后错,观察最后指针指向0x200地址,watch一下memory0x200地址,的确也是发送缓冲TX_Buf的RAM的首地址,我实在不明白,难到硬件问题???那为什么硬件问题我每次都是20字节就是可以的,不应该啊……软件问题,我实在不能理解,找不出原因,再说这程序我以前也用过,没太大区别,这是什么情况……就这样我不知道把 JTAG拔了多少次,在发送端接收端换来换去,换的我都快受不了,没办法,回去睡觉……
早上快八点起来,吃个饭,立马去整这个烂摊子,心想如果不给我两个JTAG我不调了,受不了这种,九点多又找了一个仿真器,用了另一台电脑,学长和我一块调。两台电脑两个人就是方便,很快发现一个变态的问题,发送端在JTAG在线仿真就是好的,一拔掉仿真器就不行了,就发送一个字节的数据。太奇怪了,不能不用仿真器,学长搜了一下有网上说可能复位问题,复位用了专门的芯片,比RC阻容电路好的多,感觉也不应该,难道电池问题,测试得到锂电池 3.8V,MCU引脚标准3.3V,不应该,为什么每次数据包长度不变就可以,难以理解,然后无意中发现距离太近,难道是距离问题,又测试发现也不是因为我放的太近了,排除,然后开启看门狗,还是不行。都12点了,还是找不到我们的原因,感觉还是硬件问题,我和学长都崩溃掉了。
下午弄了还是弄不出来,就看了协议栈,晚上灿哥过来,我就突然变得特别开心了,因为这个问题也逼到他了。演示了一下错误的现象,他试了几下居然可以了,发现放的位置不行,大概是同一平面高度不行,说距离太近,难道这个天线不是全方位的,但是发现还是不行,太多地方不行,CC1101不可能这样,太假,可能是电脑影响,关掉笔记本,还是不行。反正这次用的鞭状天线居然比弹簧天线效果还差,人家2274的弹簧就能收到数据,147鞭状的就收不到,真差,换了弹簧天线还是不行。我辩解,距离这种说上午也遇到,排除了这个原因,这个也不是什么原因,测试还是不每次改变数据包就行,可以排除。只是得到这个天线可能买假了。然后发现一个LDO的滤波电容虚焊了,说可能这个,焊好还是不行,哇咔咔……然后说测试电池,换锂电池还是不行。然后换程序的写法,还是不行,恼了,又拿了4块MSP430F147的板子,测试结果发现一堆就一个是正常的,一个只能到16,各种变态,各种难以理解,最后不行,每次发送数据前都把 CC1101复位一次,重新配置一次,还是不行,泪奔啊,把我们逼得很无奈,这什么现象啊,逼死了,我好开心的是他们也被逼的很无奈……