最痛楚的便是嵌入式系统,我们的知识体系比较单一,团队中短缺软硬兼修的人。如果回板的电路板虽然不冒烟,但是无法明确是软件问题,还是硬件问题的时候,就须要我们通过一系列操作进行问题定位,然后逐步歼灭问题,终极达到串口能够正常打印的地步。
早期在X86系统中,为了帮助定位问题,会选择这样的80卡,用一个PCI外设来显示故障部件的位置,缩短调试的韶光和过程。

但是最痛楚的事情是,80卡也不亮。

以是我们须要逐步打消硬件问题,捋清楚硬件启动的过程:
1、时钟问题。
一样平常表现在时钟配置非常,晶振的选型频率范围有问题,超出芯片主频事情范围。
还有晶体不起振,我们碰过有同事归一化电容,把晶振的负载电容容量选型选的容值过于大了。
也碰过晶振的走线太长,导致处理器吸收真个旗子暗记质量不好,导致无法正常启动。
2、电源问题。
电源完全性的质量差,纹波过大,尤其开关电源供电时;或者供电输出不稳定;或者系统供电能力不敷而引起电源颠簸等。例如有一些设计缺点,电压缺点、电流能力不敷、电源之间的相互滋扰等等。我们须要仔细排查电源本身的问题。
3、上电时序的问题
电源之间的先后关系,我们设计电路板的时候,须要捋清楚每个电源上电的先后时序哀求,很多芯片都会有干系的哀求:处理器、FPGA、DSP等等一样平常都会有时序哀求。
随意马虎忽略的一个点是:不只是电源时序有哀求,有些芯片的时钟稳定、电源稳定、复位旗子暗记之间有先后关系,或者还有韶光间隔的哀求。
我们须要全方位排查时钟、电源、复位旗子暗记之间的时序哀求。特殊是一些共用电源的芯片,很可能由于时序哀求,我们要分别供电,或者须要通过MOSFET掌握上电机遇。
4、BOOT脚配置问题。
对付ARM芯片每每都有些BOOT配置脚。常常碰着有人由于BOOT脚的焊接或打仗不良导致各种奇怪问题。这种情形多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片非常。
我们不管是ARM也好、X86也好、DSP也好,以及MIPS、现在RISC-V都存在启动路径的问题。有TF启动、U盘启动、硬盘启动、光盘启动等等。
我们须要知道要么像X86那样,有BIOS来配置启动路径,或者像有的ARM通过高下拉电阻来配置启动路径。
最近在玩英伟达的Jetson,最不爽的一件事便是:不同的启动路径,利用的系统镜像不同。如果我们忽略,会导致系统无法启动。
5、启动文件问题。
常常由于选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就弗成。这点在做不同系列芯片间移植时最随意马虎碰到。
有些处理器的启动配置文件很繁芜,没问题的时候随意马虎被大家忽略,一些处理器的根本配置在配置文件里面。如果配置文件缺点,会导致处理器启动非常。
6、地址空间缺点
我们从软件的视角,有时候很随意马虎忽略启动地址。地址空间有时常常会把软件人绕晕。硬件的人想搞清楚,也费尽。
对付X86系统的地址空间更繁芜,内存空间分四个模式,还有IO地址空间。
案例:某一个多核PowerPC的处理器串口没有打印
1、征象、问题描述
单板回板后,单板启动失落败,串口没有打印。这是一个范例的单板调试过程。故记录作为回板调试参考。
2、关键过程、根本缘故原由剖析
单板回板后,串口没有打印。处理器为多核PPC,小系统通过CPLD对Local Bus进行解复位。下图为P4080小系统框图, P4080小系统P4080, DDR3 SDRAM,CPLD,Flash构成。P4080通过SRIO接口实现对DSP的加载和掌握,通过SGMII接口和FPGA交互媒体掌握报文。
问题一:单板启动到什么程度。
剖析一:配置字没读完,刚读32bit,处理器就挂住了,没有连续读取RCW(配置字)。
结论一:在读取RCW的阶段就挂去世了。
方法一:查看和核对RCW。
问题二:RCW有什么缺点,它的缺点为什么会导致处理器挂去世。
剖析二:单板的RCW与DEMO板的RCW,除了内容不同(硬件环境,设计需求不同),同时RCW的长度也不同。
Demo板的RCW
aa55 aa55 010e 0100
5050 5050 0000 cccc 5840
fe80 0000 0100 0000 0000 0000 0000 0000
0000 0000 00df 07fd a000 0000 0000 0000
0000 0000 0000 0000 0813 8040 ff30
我们单板烧入的RCW没有赤色的字。
结论二:RCW不单单是根据硬件设计,对各个数据进行填写,同时,CPU有校验功能,在RCW的头和尾都有校验数据。这些配置字的天生,供应商供应了一个工具,按照处理器的的设计,直接进行选择,然后可以直接天生完全的RCW。而我们之前的RCW校验失落败,以是启动失落败。
我们的设计方法直接借鉴公司大规模利用的单核PowerPC 8321的设计方法:1、阅读器件资料,理解配置字的含义;2、列出配置字的内容;3、整理成16进制发给软件工程师。
由于多核PPC的RCW变得繁芜,且有校验码,以是P4080等多核PowerPC的RCW可以通过工具天生,工具如下:
方法二:利用工具天生RCW,烧入Flash。
问题三:RCW的数据精确了之后,仍旧没有打印。
剖析三:配置字已经跑过了,又挂在Bootrom。
看了一下波形,配置字跑完,又跑了40字节。
先疑惑配置字问题,我以为没有问题,依据是原来跑步起来,现在跑起来了。
我跟陈陆安又核对了一次配置字。并且创造,处理器版本选择V1.0、V2.0对付我们的单板来说,天生的配置字是一样的。
BOOTROM的启动挂去世的比较前端,估计该当没有读到BOOTROM。查看Flash烧片文件,第一条指令与RCW之间预留了多少位,个中填0,软件多填了一行0.
创造软件的起始地址不对。
下图为我们须要的数据存储在Flash的位置,RCW的存放位置为MPI Flash能够读取的最低地址。而BOOTROM的启动地址是FFFF,FFFC。配置字的启动地址:CS0的最低地址。
如下图所示:
但是实际上我们是下面这样弄的:
结论三:由于BootRom和RCW没有存储到CPU默认读取的地址,以是导致Bootrom没有被读到,以是启动失落败。
方法四:于是我们考虑在Flash里面加载现有代码两个地方,
通过设置JTAG的起始地址,实现加载。
JTAG加载起始地址:127Mbytes,但是Flash的位宽为16bit,以是JTAG加载的起始地址:
0x
终极的交付版本,是通过CPLD地址重定向实现的RCW和BootRom存储在连续地址。
问题四:串口可以打印,但是BOOTROM下的打印正常,但是进入VxWorks之后,打印乱码。
剖析四:虽然打印了一堆乱码,但是键盘可以输入。根据判断,单板已经正常事情了,但是当时疑惑是内请安题导致的数据缺点,导致打印乱码。
剖析四:通过仿真器,对内存进行批量读写操作,解释内存的数据是精确的,打消了内存的问题。
底软的开拓职员疑惑的VxWorks下的中断缺点,导致串口乱码。当时给出三条否定见地的依据:
中断做事程序很大不可能插入到前4k中,以是无法实现
为什么Demo可用,而我们单板不可用?
中断问题,只会造成发送速率慢,而不会造成乱码
通过查代码创造:
Demo板通过CS3读取了数据,用于配置处理器的大量寄存器。
Demo板的所有CS都是连接到FPGA的
Demo板子上面,FPGA的CS3犹如我们CPLD寄存器。
里面有大量单板硬件信息。例如:
FLASH的映射办法
单板CPU主频。
后续,我们重点关注了这个:“单板CPU主频。”
启动时,BootRom是直接操作UART的,对UART初始化一次。进入Vxworks之后,又对UART初始化一次。以是有可能把UART寄存器改了。
通过CS3读出的处理器主频,直接写定。SYStemCLK是从CS3中读取的,波特率是通过SYSTEMCLK分频得出的。
1、 示波器测试UART的波特率:上电时为115200,后来乱码之后为8k旁边。
修正了SYSTEMCLK之后(由于我们的单板没有CS3,以是原来从CS读取SYSTEMCLK,导致了缺点),涌现VxWorks界面。串口打印正常。
结论四:通过固定处理器的SYSTEMCLK,实现VxWorks下的正常打印。
3、结论、办理方案及效果
单板在回板后,有大量的问题:
配置字校验数据缺失落;
BootRom的存储地址问题;
VxWorks加载过程中修正了处理器主频,导致串口乱码。
4、履历总结、预防方法和规范建议
这不是一个什么高等的案例,但是每个利用新处理器的单板返还,都会有一段弯曲的路走。
单板在返还后,如何不走这段弯路?
a、 每一个操作,都须要有依据,例如BootRom的存储位置等,这些不明确的话,肯定会引入问题。
b、 不要直接套用已有的履历,例如RCW在单核PowerPC和多核PowerPC的开拓模式发生了变革,须要与供应商充分沟通。
c、 硬件,软件不要划分界线,要相互渗透,在串口还没有打印前的问题,须要所有开拓职员都非常清楚,而不是相互推诿,相互依赖。
d、 问题定位,下一步的猜想,须要心思严密,不是每个猜想都要去验证。为了更好的项目进度进展,须要经由逻辑判断,否定一些缺点的预测和假象。但是这须要严密的逻辑思维,否则揠苗助长。
新书推举:
一些硬件调测的操作案例,收录在硬十的新书《开拓流程篇》中









