zoukankan      html  css  js  c++  java
  • 使用OpenJTAG来检查硬件焊接问题


    使用OpenJTAG来检查硬件焊接问题。
            今天有一个上门来的客户,他们公司使用S3C2440做了一个产品,碰到一些问题:

    1. 通过H-JTAG烧录程序到NOR Flash,有时可以烧,有时不可以烧;无法烧写时,H-JTAG出现“无法加载驱动”的错误提示。

    2. 碰运气烧写成功后,vivi有时候可以启动,有时候不行。

    3. vivi启动后,通过USB烧写Nand Flash,必导致串口没有任何反应。

            因为主要器件的原理图与我手上的一块开发板完全一样,并且我对它所用的supervivi非常熟悉,所以开始我认为是硬件设计得不稳定,导到有时候可以运行,有时候无法运行。

     
            于是,我修改一个u-boot,把CPU频率从400M降低到200M,SDRAM频率从100M降低到50M,在开发板上验证通过后,烧写到用户的板子上,仍是无法运行。
     

            上述实验都是使用并口JTAG进行烧写的,实验进行到这里,单是使用并口JTAG已经无法再进行下去了:同样的板子,同样的程序,在A板子上可以运行,在B板子上有时行有时不行,任谁都会想:肯定是板子不稳定!


            但我不想止步于此,于是使用OpenJTAG监测单板:连接OpenJTAG,当程序没反应时,执行halt命令停住CPU,查看寄存器。发现PC值总是4,这表示发生了“未定义指令异常”,就是说CPU执行时,所取得的指令是不对的。这些指令是一开始就不对,还是运行一段时间后才被破坏?还要继续查下去。


            我再使用OpenOCD的“load_image u-boot.bin 0x33f80000”命令把u-boot.bin下载到SDRAM 0x33f80000位置处;然后使用“verify_image u-boot.bin 0x33f80000”比较本地的u-boot.bin与单板SDRAM 0x33f80000中的数据,发现数据不一致!所以,可以说明:SDRAM的操作有问题。


            那么,SDRAM的问题,是不隐定导致的,还是硬件本身的缺陷(比如焊接)导致的?一般先确定是否焊接问题,因为它比较容易。我先使用“mww 0x33f80000 0xaaaaaaaa”往0x33f80000地址写入数据0xaaaaaaaa,再使用“mdw 0x33f80000”读出数据,发现所得数据为0xaaaaaeaa;再执行“mww 0x33f80000 0x55555555”、“mdw 0x33f80000”,得到数据0x55555555。


            先暂停一下,为何使用数据0xaaaaaaaa、0x55555555而不是其他?这是因为0xa的二进制是0b1010,0x5的二进制是0x0101。0xaaaaaaaa、0x55555555这两个数,可以让32根数据线的电平高低相间,这可以观察相邻数据线是否短路。

     
            现在分析上述结果:写0xaaaaaaaa得到0xaaaaaeaa,即bit[10]本来应该是0,现在变成了1;写0x55555555得0x55555555,bit[10]仍是1。从这两点可知:数据线DATA[10]是有问题的,但是它并没有与旁边的DATA[11]、DATA[9]短路。
     

            根据这个结果,再进行一些实验:“mww 0x33f80000 0”、“mdw 0x33f80000”得到数据0x00000400,这也表明了DATA[10]有问题。

            现在再来访问内部RAM,看看有无这个现象:“mww 0x40000000 0xaaaaaaaa”、“mdw 0x40000000”,发现得到的数据是0xaaaaaaaa。
     

            所以,结论是:外部SDRAM的DATA[10]被拉高了,原因可能是焊接时短路了。在我这里的试验到此结束,客户把板子回去找原因了。

    转载请注明出处,文章来源:http://www.threeway.cc/sitecn/InformationInfo.aspx?tid=1382&pid=2450

  • 相关阅读:
    圣杯+双飞翼 自适应布局
    drupal8 用户指南
    运维笔记:zabbix的运用(1)安装过程
    Nginx的初识
    PHP 获取LDAP服务器Schema数据
    Nginx(alias 和 root的区别)
    vue开发--生成token并保存到本地存储中
    PHP程序员必须知道的两种日志
    MVC 应用程序级别捕捉异常
    消息队列MQ
  • 原文地址:https://www.cnblogs.com/guiguxinwei/p/2353903.html
Copyright © 2011-2022 走看看