导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[zhongqian]嵌入式系统调试方法和注意事项



No.72383
作者:zhongqian
邮件:lw31317663@163.com
ID:115047
登陆:10次
文章数:57篇
最后登陆IP:222.209.25.56
最后登陆:2010/3/30 10:17:58
注册:2008/6/30 11:53:36
财富:307
发帖时间:2009/7/14 15:09:55
发贴者IP:222.209.238.186
标题:zhongqian:嵌入式系统调试方法和注意事项
摘要:No.72383嵌入式系统调试方法和注意事项 
嵌入式系统开发过程实际上就是一个调试诊断的过程,而且调试诊断将一直伴随着一个产品的终身,即使是最成熟的产品也偶尔会出现这样或那样的问题,这都需要开发人员去诊断、排查。
      嵌入式系统的调试包括硬件调试、软件调试以及综合调试。硬件调试一般是指系统刚开发出来时上电前后的检查,包括:
      1)上电前检查电源和地是否短路,目视检查是否有虚焊、漏焊;
      2)上电后检查时钟线上的频率和波形、幅度是否正常,各电源电压是否稳定正常,各芯片温度是否正常,各指示灯是否正常。
      软件调试一般是指保证硬件一切正常的情况下验证程序执行的时序是否正确,逻辑和结果是否与设计要求相符,能否满足功能和性能要求等。软件调试的方法有很多,包括:
      1)用指示灯跟踪调试;
      2)用串口打印调试;
      3)用简单的调试器进行汇编代码级调试;
      4)用比较高端的调试器进行源代码级调试;
      5)用仿真器进行硬件仿真。
      上述单纯的硬件调试或软件调试都是相对比较简单的,困难的是综合调试。下面我先举一些自己在工作中曾经碰到的疑难问题,然后再从中归纳出一些一般的调试方法和注意事项。
      例 1:我们自主设计制作的PPC860(Motorola)网络引擎平台的调试已接近尾声,同一批生产的4块板子都通过了全部软件测试,于是又去焊了第二批,可是在第二批板子中有1块板子的FEC不能正常工作,我们几个软件和硬件工程师使用了各种手段,重新看了多遍芯片手册,还是没找出原因,于是把板子发回工厂重新焊接BGA,可是回来问题还是照样存在,没办法最后打算将这块板子当作个样处理,把板子上的芯片都焊下来。按常理来说这种做法很符合逻辑,因为元器件都是一样的,板子也是一批的,那就可能是这块板子的某个地方焊接不好,但又不好查,反复重新焊接可能会把主板焊坏。后来有人从PPC860芯片上用放大镜都要睁大眼睛才能看清的字符上(据说我国第一代国产高端处理器芯片“寒心”就是某“科学家”将“摩托”同一类型芯片上的这些字母磨掉后刻上“寒心一号”摇身一变造出来的!!!)发现这块板子的CPU版本号是“D4”,而其他板子的CPU版本号是“D3”,可芯片手册上并没有这两个版本之间的比较说明,从网上找到PPC860的勘误手册,发现在PPC860TZP50D4版本中,ECNTRL寄存器增加了一个叫FEC_PIN_MUX的位(bit2)来控制FEC各管脚的复用功能,如果要使用FEC就必须将该位设置为1,所以要在FEC的相关程序中加上ECNTRL |= 0x00000004语句行。
      例2:当我调试业余自制的MC68VZ328板子时,电路板硬件检查没有问题,用Code warrior通过串口往flash中烧制编译好的uClinux程序也一切正常,但是重新上电,发现串口没有任何数据,用万用表检查(当时自己没有示波器等“先进设备”)也没查出结果,然后每天上下班把这块板子放在包里,没事就拿出来瞪大眼睛看看,看着也不免窝火,但有一天却发现一个标着电阻符号的地方却焊上了电容,回到家把电阻换上去再上电,串口一下就打印出uClinux的启动信息,呵,那滋味,比喝了蜂蜜都甜,当然当时也是因为没有太多经验,如果这问题放现在,估计一天内肯定解决掉。另外在初次调试自制的S3C4510开发板时,就是不能从串口输出字符,费了半天时间才发现把串口电平转换芯片 max3232cse的第6脚上的旦电容极性焊反了。--中嵌学院--
      例3:在调试SB1250嵌入式服务器主板时,由于使用的是DDR1代内存条,数据线和时钟线上串并联的去耦电容电阻相当多,第一批焊回来的板子几乎没有一块能够顺利进入CFE(BIOS)菜单界面的,检查时钟波形和电源与借用的 DEMO板相比都很好,我把主板上DDR DIM槽周围的那些去耦电阻电容都全部用烙铁重新过一遍锡,嘿嘿,还真管用,这种方法屡试不爽,而且在后面调试PCI和HT总线时使用这招也很有用,可能是因为SB1250系统是高频电路,对焊接要求比较高,稍微有一点漏焊或者虚焊都不行,我是这样认为的。
      例4:在一个使用实时时钟芯片 SD2000的应用系统中,经常会出现读出的时间被复位到 “2000年1月1日”的情况,我用自己编写的测试程序经过多次测试发现,按照SD2000芯片手册中的时序进行连续读写确实会经常出现复位现象,好像是芯片错把读写时序当成了复位操作时序,而且每次必出,所以我感觉到芯片本身应该有Bug,于是告诉同事可能是芯片本身有问题,让他跟厂家联系,但因为这个芯片在老产品中用了比较长的时间,所以同事不太认同我的看法,但还是与SD2000厂家取得了联系,厂家经过两天专门强化测试后通知我们“SD2000本身确实有Bug,可能因为干扰导致芯片复位到2000年1月1日”。--中嵌学院--
      例5:在用PNX1700(DSP)处理器设计成的音视频开发平台上,常会出现CVBS输出黑白图像(应该是彩色)或颜色不正常现象,于是先详细阅读CVBS输出芯片AVS3169的手册,然后用示波器测量3169芯片的时钟管脚,在测量的过程中经常会出现颜色恢复正常的现象,再做多次测试发现这种现象是由于将场同步VSYNC信号与相邻的数据线Data7短路造成的,再测试发现将VSYNC与其他数据线(Data[0:6])任一根短接一下都可以恢复正常,再用视频时钟信号CLK与数据线短接一下有时也能恢复正常,但有时也不能恢复,所以怀疑是视频场同步信号有问题。顺着这根线索查了一下AVS3169的VSYNC信号与PNX1700的连接方式,发现在用CVBS输出时,PNX1700上与AVS3169的VSYNC信号相连的引脚是输出QVCP_VSYNC信号,检查VO输出模式设置没有问题,再查QVCP的设置,看哪个寄存器能控制QVCP_SYNC信号,发现在QVCP_CONTROL(0x10e020)寄存器中有对HSYNC和VSYNC的控制,用命令在线修改了直接相关的该寄存器中4个位的值,但没有任何效果,再在整个PNX1700芯片手册中查找关键字VSYNC,发现在398页有对QVCP VSYNC设置要求的描述:该寄存器的bit1(Master)要 ......

>>返回讨论的主题


  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:5186毫秒 查询6次