您好,我当前使用am335x核心板搭载在自己制作的PCB底板上,启动方式设置为sysboot[15:0]:0b0100 0000 0000 0100,启动序列UART0:XIP:MMC0:NAND,但是上电后,UART0经由超级终端只打印'cccccc',开发板已经烧写有镜像并在其他相同启动模式的底板上上电运行正常,可进入u-boot,不知道会是什么原因导致的,请赐教。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
因为项目原因初学ARM,起初我很疑惑,觉得不是应该先在UART模式下烧写之后读取NAND启动Linux系统吗?后来查看手册发现它在不同的模式下是有不同的启动序列,这里使用的模式对应UART0:XIP:MMC0:NAND序列,上电后如果不通过串口烧写是应该会向后查找IO,最终会读取NAND使系统启动,不知道是否可以这样理解。
之前使用的是启扬的一款335x开发板,现在这块底板是为了添加FPGA做的,和之前那块在ARM这边差不多,我用万能表上电测了D15-D0这16位在核心板插排上的引脚,都与之前的启动状态相同,也就是sysboot[15:0]:0b0100 0000 0000 0100,也在这个启动模式下插入SD尝试启动过也仍然只是打印‘ccccc',通过串口重新烧写boot也失败,显示无法进行远程连接,但是同一个核心板在之前的开发板上可以正常烧写并启动,所以不清楚还会有什么原因造成这种现象,谢谢您的关注!
上电后是会按照你设置的4种启动模式,从第一周进行尝试,失败了然后尝试第二种,直至最后一种,然后当第4种启动模式失败的时候,再会尝试第一种。
如果你要使用串口烧录,就必须要在第一中启动时方式UART0打印的8个C里面通过xmode烧录进u-boot-spl.bin文件。如果你要使用SD卡启动,需要保证你的SD卡中内容正确,并且SD卡的硬件接线没有问题。可以对照TRM手册,26章initialization来确认启动的问题。
我感觉,应该是你的NAND里面有东西,并且程序是挂在了NAND里面,所以才导致了,现在只有8个c,之后就一直挂死着。能否把nand清空了后再试一次?
鉴于你只换了底板。我想确认一下,335, DDR,NAND,SD, UART哪些是在底板上的,哪些是在核心板上的。还有底板的插入,还要考虑是否有可能由于上下拉的关系改变了boot的序列。
335,ddr,nand都在核心板上,SD和UART做在底板上,这样的话由于核心板可以在EVM上启动,是否可以排除是NAND读取的问题?并且nand也擦除重写过都是在EVM上进行的;
还有一个现象,在最早使用这块自制板的时候,在usb,nand,xip,nandi2c模式下是可以正常启动的,后来焊死为当前uart,xip,mmc,nand模式,就出现只打印一遍八个c的情况;
如果是上下拉的原因造成boot序列改变,使序列中没有nand,那么uart是否应该会循环打印‘c’呢?可是现在却卡在这里,实在是有些迷惑。。。
有没有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。
建议排查一下底板上是怎么处理LCD_DATA0~DATA15的,这些pin脚的状态就决定了SYSBOOT0-15的值。
另外,这个值得锁定,是在刚上电的时候PWRONRSTN拉高的时候进行采样的,也就是说这个时刻采样时多少,以后就是多少了。除非冷启动,就是重新上电,PWRONRSTn有低到高的过程,否则他不会改变。
啥叫boot内部的启动方式和选择的启动方式不同?
启动方式的选择就是由外界电路设计决定的。内部没有什么default的上下拉来决定初值。
一般考虑的问题是,如果核心板上配置了一些上拉或者下拉的时候,一定不要在底板上配置相反的下拉或者上拉。
举个例子,比如LCD_DATA0管教在核心板用100K上拉了,这个时候,你是想把他设置为高的。结果,你接入的地板上,有个下拉设计,或者是个器件,本身有强下拉属性的。比如说10K到地,其实这个下拉不用多强,只要比你上拉大或者等同上拉就可以了。这时候就会出现,这个管教的状态由于底板的接入,导致了他从高电平变成低电平了。于是在启动的时候,你本意设置为10001的,结果就变成了10000。于是你的启动模式就变了。
你好,之前的问题还是没有解决,还是这块自己画的板子,我通过uart方式发送镜像从而进入uboot命令行,之后烧写引导以及使用tftp烧写内核和文件系统正常,并在uboot下使用md 0x44e10040 1指令查到contril_status寄存器的值为00400304,对照手册后得知当前启动方式正是00100(这种方式包含nandflash启动方式),可每次却都无法从nandflash启动。如果是这样的话是否可以说明并不是启动方式的问题,而是底板设计出现问题,造成启动没有正常读写nandflash?