admire
【 在 nlgdczm 的大作中提到: 】
: 标 题: 又一次修板子的历程
: 发信站: 水木社区 (Sat Nov 26 13:20:16 2022), 站内
:
: 最近比较闲,新冠版又被封禁不能阴阳怪气了,于是就再总结一次修板子的历程,以飨众青。
: 写之前,回看之前发的《第一次修板子的历程》
https://www.mysmth.net/nForum/#!article/Circuit/366249,明显不是第一次:第一次咋可能自己会干那么多、同时还会叫别人干事的。应该去掉“第”。
:
: 还是朗朗饿狗,本青还有一头乌黑亮丽头发的时候。某天,驱动同事扔过来一块板子,说这板子偶尔上电起不来,彻底起不来,连看门狗都拉不起来的那种。
:
: 先看灯。
: 正常启动的板子,CPU用软件写IO点灯,能读到boot就可以亮灭;CPLD用输入的时钟信号分频点灯,有时钟就能亮灭。这个板子起不来时,CPU灯不亮,CPLD灯常亮。
: 排查:CPLD的灯只跟输入的时钟有关,量输入时钟,没有。CPLD输入时钟的来源是CPU的输出时钟管脚,只要CPU上电,该管脚就默认将CPU外挂晶振的时钟分频后输出。
:
: 看CPU。
: CPU外挂有源晶振,量到有正常输出时钟给CPU,但CPU输出给CPLD时钟的管脚无输出。说明晶振正常而CPU不正常。
: 排查:量CPLD给CPU的复位信号,一直是低复位状态,CPLD输出复位信号把CPU拉死了。CPU拉死了,不输出时钟给CPLD,CPLD也停了。有点先有鸡还是先有蛋的感觉。。。
:
: 看CPLD。
: CPLD在这个板子上干的事有点类似于当代单片机里面APB总线干的事:把CPU的数据总线分发到FPGA、Flash和各种I2C、SPI接口的外设上,用于读写寄存器、控制IO之类。同时CPLD跟外部一个看门狗芯片合作了一个软件看门狗。另外,全板各个芯片的复位信号均从CPLD输出。问题到了:为啥
: CPLD会拉着CPU的复位信号不放?
:
: 看CPLD代码。
: CPLD代码对各个复位的处理,除了FPGA拉过来的远程复位是wire以外(这个以后还有坑),都是一样的output reg:CPU通过数据总线写CPLD的某地址某位为低,该位跟其它各个复位bit与后,送出低电平到CPLD外部的看门狗芯片的手动复位管脚,看门狗芯片再送回复位信号到CPLD,CPLD把
: 酶次恍藕潘偷礁鞲鲂酒⒅刂肅PLD的各个复位bit恢复为高。简单说,就是软件操作寄存器造一个下降沿,触发外部看门狗送回复位信号给CPLD,CPLD用该信号置的初始值造一个上升沿,完成一个低脉冲复位,复位各个芯片和CPLD自己。
:
: 修改CPLD代码。
: 屏蔽CPLD的各个复位bit,逐一尝试。发现:CPLD的0x0地址有1bit的复位控制,屏蔽掉该bit位以后,起不来的故障可以消失。
:
: 再看CPLD代码。
: 正常启动的单板,CPU往CPLD的0x0地址复位bit写0,是可以通过外部看门狗送回来的复位恢复为高的。是什么导致了故障单板的该bit位一直为低?再看CPLD代码,重置寄存器为默认值,其时序是先看输入的时钟和复位下降沿,再判断复位是不是低,再重置寄存器为默认值。要是没有CPU送
: 吹氖敝樱次挥忠恢笔堑停挥邢陆笛兀簿筒换岜换指次撸突嵋恢北3值偷缙健
: 最终问题就是:CPLD的该复位bit为何会被写0,且写了0以后为何没有被外部看门狗芯片送回的复位给重置回1?
:
: 量波形。
: 发现上电启动的时候,CPU的各个IO,包括数据、地址、片选、读写,有一定几率会在上电还未完成时,送出低电平出来,实际效果就是片选有效且往0地址写0。而此时,因为上电还未完成,看门狗芯片产生的上电复位还未释放,给CPLD的复位还是低。写CPLD操作只看片选、地址、数据,即
: 挂在CPU总线上的CPLD的0地址被写了0,拉低了给CPU的复位信号,没了给CPLD的时钟;同时外部看门狗芯片给CPLD的复位一直是低,产生不了下降沿以重置CPLD寄存器,这样该复位bit就一直是0,造成了一个跟手动长按复位键不放一样的效果。
:
: 解问题:
: 问CPU厂家:为何在上电复位还未完成时,CPU的IO为何会全部拉低?回:见勘误表的多少多少页,承认有这种情况,解决措施是:原来上电时序要求是核电压先上IO电压后上,改成IO电压先上核电压后上,即可解决。懵逼了:要一个已经发货的板子改上电时序?!古时候还没有PMIC这种高
: 抖鳎系缡毙蚨际强扛骷兜腜ower Good管脚来一级一级拉的。解不了问题就只能解bug了。
:
: 解bug:
: 问驱动:CPLD的0x0地址的复位信号是否有用到?驱动表示不知道还有这东西。升级CPLD版本,直接屏蔽掉该复位bit。
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 183.192.29.*]
--
FROM 120.230.66.*