AM335x bootstrap探索

来源:互联网 发布:apache nginx 比较 编辑:程序博客网 时间:2024/06/07 05:05

背景知识

TI 的ARM处理器AM335x系列支持从不同的媒介或者接口启动, 具体包括串口,网口,USB,SD卡, eMMC,NAND flash, SPI flash等等。当系统复位的时候(具体时刻为reset信号的上升沿),通过某些特定管脚的状态,来决定从什么接口启动。

问题

本人在调试系统的硬件时,发现每次重起板子的时候,linux的系统时钟输出会有不一致的情况。

debug输出信息:

[ 0.000000] RCU kthread priority: 1.
[ 0.000000] NR_IRQS:16 nr_irqs:16 16
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 19200000 Hz
[ 0.000026] sched_clock: 32 bits at 19MHz, resolution 52ns, wraps every 111848106981ns
[ 0.000049] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 99544814920 ns

或者

[ 0.000000] RCU kthread priority: 1.
[ 0.000000] NR_IRQS:16 nr_irqs:16 16
[ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[ 0.000019] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.000037] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000045] OMAP clocksource: timer1 at 24000000 Hz
[ 0.000278] clocksource_probe: no matching clocksources found

系统的时钟存在两种状态: 19200000 Hz或者24000000 Hz。

原因

在硬件设计的过程中, 对数字19.2MHz有一些模糊印象, 仔细翻看原理图,发现在CPU的bootstrap部分有对其的说明.

这里写图片描述

为了表述问题的方便, 在此粘贴上bootstrap的原理图:

这里写图片描述

从原理图中可以看出, 当系统处于复位状态时, 信号Ethernet SW RST为低,buffer U601, U602的DIR(Pin1)为低, 其数据方向是B -> A, 当系统不在复位状态时, U601和U602使能控制(pin19)为高, buffer关闭,B端不会对A端产生影响.

考虑到CPU的信号PRU MII0除了bootstrap功能外, 他们还是正常的以太网信号,在设计中, 这些信号同时外接到了以太网PHY芯片, 特此也附上这部分的电路图.
这里写图片描述

重新考虑系统处于复位时,信号xxx的状态如下图决定:.
这里写图片描述
通过上图可以非常明确看到, 信号xxx其实是由两部分混合叠加构成的,
当reset为低,即系统复位时, buffer右端通过电阻上/下拉的信号叠加上以太网交换芯片的输出信号为最终处理器的bootstrap信号, 这就造成了其信号不稳定.

解决

通过上面的原因分析,我们找到了问题的根源,那么如何处理它?
其实很简单,需要在系统复位的时候,隔离以太网信号的干扰即可.
我们再添加一个buffer,形成如下的系统简图:
这里写图片描述
这样, bootstrap信号在复位时,PHY或者交换芯片的信号被隔离,CPU能够获得准确的boot configuration信号。
经过测试, 解决了系统的时钟问题.

延伸

除了上面列出的最常规方法, 还有其他一种方法可供选择.
添加一个三极管来控制PHY或者交换芯片的电源。
当reset时, 关闭PHY的电源,当reset释放时,打开其电源。
经过测试,该方法也是有效的.

参考资料

http://processors.wiki.ti.com/images/a/a2/TMDSSK3358_3H0009_REV1_2B_SCH.pdf