有没有JTAG借口,如果有的话,仿真器接入进去直接读取0x44e00040的寄存器值,就知道最终确认的boot序列是什么样的了。
对于是否会循环打印c问题,要理解的是,即使你看到的是循环打印,实际上,他还是走了boot 1, 2,3,4,1,2,3,4,1,2……这么个流程。我假设boot 1就是UART,那么在刚上电的时候你就应该看得到打印了8个c,如果你选的启动序列中后面三种启动模式的timeout时间都是比较短的,比如SD,XIP之类的。那么他们很快的就会过掉自己的timeout的时间,进行下一个启动模式的尝试。这就出现了你看到循环的打印ccc的场景。
回到这个现象本身只打印了8个ccc,有两种情况,一种是进入了某种启动模式,然后死在了里面,例如boot1是uart,boot2是nand,你nand里面有image,但是image是坏的或者不完全的,于是,你就只能看到8个c,然后他就停止了,因为停在了nand启动的image中。另外一种,就是选取的启动模式time out时间特别长,比如说网口EMAC0、比如说PG2.1版本的USB0,印象中都是要等待2,3分钟才会timeout,所以如果你的启动模式被错误的识别成了这种带有EMAC0启动的模式了,虽然前面UART启动会打印8个c,但是后面会长时间的进入到EMAC0的等待时间中。就造成了一种假象,打印了8个c,就没了。实际上,这种情况下,你再等个3,5分钟,他就又会再一次打印8个c。