请教各位,最近在调一个单片机的小系统,遇到这样的一个问题:
板子上电之后有时候是正常的,有时候是异常死机状态的(感觉是程序跑飞回不来),按下单片机复位电路的复位开关之后板子肯定正常跑了~
在线调试下全速跑板子是正常的,没有出现异常死机状态~~每次上电正常的概率趋于50%左右,基本上是一次正常,一次不正常
搞了好多次了也解决不了这个问题,还请各位大侠帮忙出出主意,用的单片机是C8051F320,系统比较简单:总共就只有单片机最小系统,JTAG下载电路,加速度传感器(使用单片机I2C接口),扩展一个现成的24L01无线模块(发送速率2Mbps)
补充:
1、电源试过用2节干电池供电和1117-3.3V供电都试过,问题都存在
2、看门狗在程序中一开始就关掉了
3、几套板子都是有这样的问题的,应该不是芯片的问题吧,如果有问题是单片机?
4、单片机系统时钟使用内部晶振12m不分频
------解决方案--------------------
我看复位电路有问题的几率非常小,我估计楼主这个复位电路也是采用推荐的吧,如果是应该没有问题。
1、如果没有其他办法,建议用复位芯片给单片机复位,看看是不是能解决,死马当活马医吧
2、你的I2C程序中,是不是出现了死等语句呢,例如:while (SDA==1) ;
如果有这样的语句,那问题就出现在这里了,将其加个延时等待。
------解决方案--------------------
复位不好呗。既然手动按下复位能正常复位,那就是复位电路有问题咯
------解决方案--------------------
1、是在while中加入延时或者没有等到信号就跳到别处执行其它的程序
2、从可靠性方面来说,程序内出现死等语句就可能使程序死机,这是基本思想。
我分析可能跟单片硬件设计本身缺陷有关系,也就是说,当执行到while语句时,单片机执行取指指令
而在取指指令还没有完成时,被其它中断打断了,当再次回来执行当前语句时,当前标志的状态可能已
经改变了。
------解决方案--------------------
(1) 我以前用过这个片子 C8051F320没有你说的这个问题。 应该不是片子的问题
(2) 之前整过一个ARM 用I2C的读取传感器, I2C 挂住了这个现象,软件重启也不好用,必须掉电重启才行。
我个人感觉上可能是软件的问题大些,I2C这块。 可以考虑让主程序运行一会之后再运行I2C 这边
------解决方案--------------------
楼主其实应该一步步排除,你首先应该先确定硬件到底有没有问题,很简单,搞一个流水灯或者led闪烁的简单程序,你烧写进去,每次改一下闪烁频率,这个程序编译的时候你最好新建一个测试工程,如果你发现的系统跑这么简单的程序还会出现你的50%的概率问题,那估计你硬件问题的可能性比较大,要是没问题,我感觉硬件问题基本可以排除,剩下的就是你软件的问题了,软件的话,最好还是一步一步调试比较好。
你不是有jtag调试吗,应该支持在线调试吧,不过对于IIC来说,一般的在线调试其实并不能反映芯片内部的实际运行情况,所以建议楼主调好串口,利用串口和JTAG配合来调试。
------解决方案--------------------
仔细检查原理图
检查硬件焊接
测试电源是否稳定
晶振是否正常
LED是否正常
如果这个都正常那可能就是你软件的问题了
个人觉得是虚汗,或者某个引脚要上拉 或者下拉却被悬空了。。。。