回板后,处理器不启动,怎么办?

回板后,处理器不启动,怎么办?电路板板回板后,如果串口能够正常打印,则我们很多调试手段都可以运用,能够运用串口打印,或者调试工具能够快速的进行问题定位。

欢迎大家来到IT世界,在知识的湖畔探索吧!

电路板板回板后,如果串口能够正常打印,则我们很多调试手段都可以运用,能够运用串口打印,或者调试工具能够快速的进行问题定位。


最痛苦的就是嵌入式系统,我们的知识体系比较单一,团队中缺少软硬兼修的人。如果回板的电路板虽然不冒烟,但是无法明确是软件问题,还是硬件问题的时候,就需要我们通过一系列操作进行问题定位,然后逐步歼灭问题,最终达到串口能够正常打印的地步。

回板后,处理器不启动,怎么办?

早期在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

4c
50 0000 0000 0000

5050 5050 0000 cccc 5840

0000 c


03c
2000

fe80 0000 0100 0000 0000 0000 0000 0000

0000 0000 00df 07fd a000 0000 0000 0000

0000 0000 0000 0000 0813 8040 ff30

41a
4

我们单板烧入的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加载的起始地址:


127M
= 127* 1024 *1024 = 0x

7F
00000。

0x

7F
00000 /2 =

3F
80000

最终的交付版本,是通过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、 问题定位,下一步的猜想,需要心思缜密,不是每个猜想都要去验证。为了更好的项目进度进展,需要经过逻辑判断,否定一些错误的猜测和假象。但是这需要严密的逻辑思维,否则适得其反。

新书推荐:

一些硬件调测的操作案例,收录在硬十的新书《开发流程篇》中

回板后,处理器不启动,怎么办?


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34182.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信