7.
\ $ \ begingroup \ $

我正在努力使用Atmel AT91SAM9G20板调试启动问题。对于前700毫秒或所以,一切都很棒。重置后大约700毫秒,处理器冻结。好奇的是,在释放重置按钮后,CPU驱动复位线。

这是一个显示正在发生的事情的镜头。黄色的轨迹是复位线。第一次下降是我按下重启键的时候。我认为第二个下降是由CPU产生的。

蓝色跟踪是CPU的串行数据。前两个突发来自初始引导程序。第三个突发是U-Boot启动。CPU在第三个蓝爆结束时停止发送掉字符。

如果我正确地解释了这些轨迹,这意味着在处理器从NAND闪存加载U-boot时,重置线几乎恰好是低的。

两个示波器的痕迹

我有几个问题:

  • 这种cpu控制的复位是正常的吗?
  • 对如何调试有什么建议吗?

还有一些细节:我应该补充一下,我应该看看电源铁轨,他们看起来很干净。以下行为是可重复的。我可以在几秒钟内改变初始重置倾向(以黄色)的长度,并且其余的行为就是相同的方式。如果我插入JTAG电缆,行为发生变化 - 有时它是靴子,有时它没有,但在几秒钟后,JTAG接管,处理器停止。

在JTAG下,可以成功启动。下面是一个成功的jtag控制引导的样子:

另一个范围屏幕截图,但具有更多的串行数据明显

请注意,时间刻度是不同的,我并没有按下重置按钮——这是软件控制的。同样的复位下降发生。在这两种情况下,长度都在500毫秒左右。

更新(仍然困惑)

Taffey先生提示下面的建议,我已经更详细地调查了看门狗定时器和重置控制器。看门狗定时器实际上由第一个引导加载程序禁用;我很确定正在执行代码,因为它发生在文本之前发出调试串行端口,我可以成功阅读文本。

在阅读关于复位控制器的细节时,我了解到处理器是应该抓住复位销的控制并将其拉低短时间。这是为了确保电路板上的其他硬件侦听相同线接收足够长的重置。通过U-Boot挖掘,我发现使用erstl字段设置重置的持续时间为0x0d:

AT91_SYS_WRITE(AT91_RSTC_MR,AT91_RSTC_KEY |(AT91_RSTC_ERSTL&(0x0d << 8))| AT91_RSTC_URSTEN);

数据表解释了持续时间设置为2^(ERSTL + 1)慢时钟周期。

重置持续时间长时间为500毫秒,慢时钟晶体为32768 Hz,谷歌告诉我,日志(0.500 * 32768)/ log(2)= 14,0x0d + 1 = 14,所以这一切都是有道理的。

我认为真正的问题可能是U-boot崩溃;它发生在重置之后的事实可能与此无关。让人困惑的是为什么U-boot只会在JTAG崩溃的时候崩溃不是连接。

第二次更新

我仍然不知道是什么Awry或者为什么JTAG让它表现不同,但我想我已经弄清了一个解决方法(有点)。它看起来像U-Boot Crash正在以某种方式由NAND闪存在电路板上。偶然,刚刚到最近到达的董事会的下一次修订,使用MicroSD卡而不是NAND Flash用于散装非易失性存储(嗯,在MicroSD卡片内有NAND闪存,但您看到了该点)。

我的“解决方案”就是开始使用下一个版本的板子。U-boot也会因此崩溃,但原因是众所周知的——它被配置为寻找NAND闪存,但它找不到。因此,它死于火中。

所以,问题解决了。”(接下来的问题是“如何让AT91Bootstrap从串行flash加载U-boot ?”或“如何让U-boot与microSD卡一起工作?”或“为什么我要这样做?”)

我猜绿色的复选标记是乔比注意到重置线可以由微驱动,即使它被证明是不相关的长期。谢谢你们所有人的帮助。我很感激。

第三次更新(大约一周)

我最近一直在努力解决其他事情,但我确实弄清楚了最终问题的原因。我上面的最后一个神秘是:

让人困惑的是为什么U-boot只会在JTAG没有连接的情况下崩溃。

事实上,事实证明我误解了U-Boot,无法向U-Boot崩溃发送调试串行端口。我仍然不了解细节,但我发现它不是JTAG使U-Boot工作 - 我的电路与我的电脑的USB主机之间是一个共同点,因为它通过了USB端口。事实上,U-Boot在整个时间都工作得很好,但是每当JTAG断开连接时,我有RS-232到USB电平移位器我才会停止工作,串口会失败,我会假设U-Boot是死的。实际上,我发现我可以仍然可以依赖于ping命令,并且即使我的字符在终端上没有回声,也可以看到生成的ICMP报文。

我不知道到底是哪里出了问题,但我真的不在乎——我可以很容易地找到另一种方式来读取串口,而且在短期内,我可以只用一根电线连接到USB接地。

谢谢你的帮助,所有。

\ \ endgroup \美元
5.
  • \ $ \ begingroup \ $ “有趣”......这就是我要说的一切。 \ \ endgroup \美元 11月17日10分2点44分
  • 1
    \ $ \ begingroup \ $ 可能是一个愚蠢的问题,但你的重置电路(按钮)确实有一个拉动电阻正确?我的意思是当按下按钮时,重置引脚不会浮动。此外,您还可以在RESET按钮上尝试取消抖帽,以便由于重置线的弹跳而排除奇数行为。 \ \ endgroup \美元 11月17日17日5:25
  • \ $ \ begingroup \ $ (不是一个愚蠢的问题 - 这是我检查的第一件事之一。)是的,按钮上有一个上拉。没有戴上的帽子,但我仔细地看着上升沿,它没有可检测到的。释放按钮后,错误发生在1秒钟之后,所以我想我可以统治它。 \ \ endgroup \美元 11月17日15:09
  • 2
    \ $ \ begingroup \ $ 我可能会开始从u-boot中取出代码,找出它崩溃的地方……也许你的JTAG适配器做了一个重置,然后暂停CPU一段时间-给板上的其他东西,以适当的powerup \ \ endgroup \美元 11月17日10点16分26分
  • 1
    \ $ \ begingroup \ $ JTAG会影响它,这只是告诉你你应该能够在uboot代码中找到一些相关的东西。 \ \ endgroup \美元 11月17日17日18:13

3个答案3.

6.
\ $ \ begingroup \ $

查看数据表:

14.3.4.5看门狗复位看门狗故障时,进入看门狗复位。这种状态持续3个慢时钟周期。

在Watchdog Reset中,复位信号的断言依赖于WDT_MR中的WDRPROC位:如果WDRPROC为0,则断言处理器复位和外设复位。NRST线也被断言,取决于编程的领域ERSTL。但是,NRST上的低电平不会导致User Reset状态。

看门狗是否正在射击并驱动重置线?

\ \ endgroup \美元
1
  • \ $ \ begingroup \ $ 我要去的下一件事就是看看看门狗定时器,他们会造成奇怪的问题,但我不确定JTAG是否会禁用看门狗并导致问题停止。 \ \ endgroup \美元 11月17日10点15分45分
4.
\ $ \ begingroup \ $

这可能是一个很长的镜头。在一个低端的微控制器上,一张照片,我帮助奇怪的人随着被启用的低电压编程引脚而重置多次。

当一个程序员连接它保持类似的线路在一个设定的电压,当程序员断开时,他们可以很容易浮动。在一个项目中,当设备穿过金属时,它会重置。当我要求他们检查LVP的时候,他们没有检查,他们工作了2周,然后禁用了它,问题就解决了。

\ \ endgroup \美元
1
  • \ $ \ begingroup \ $ 我不认为这是一个渺茫的机会。它可能不是LVP或类似的引脚,而是任何输入浮点数。我们曾经有一个PowerPC在通用I/O输入浮动时宕机,只是因为在代码的早期会检查输入的级别。 \ \ endgroup \美元 11月17日17:26
2
\ $ \ begingroup \ $

JTAG线是否与任何设备连接到它们不应该连接的东西?

喜欢,说地址总线?

(这一次调试花了几个月的时间。)

\ \ endgroup \美元
3.
  • \ $ \ begingroup \ $ 好主意。我刚检查过原理图和PCB布局。我没有看到任何意外地址线路过境或误解。我确实注意到JTAG连接器直接在RAM下方,但它们被两个电源平面分隔,电路板在JTAG控制下正确地靴子。它是当JTAG不活动时出现问题。 \ \ endgroup \美元 11月17日17日在4:02
  • \ $ \ begingroup \ $ 你正在把jtag TCLK和TRST拉到安全状态? \ \ endgroup \美元 11月17日17日在4:30
  • \ $ \ begingroup \ $ 是的,所有JTAG输入都被拉到3.3 V,因此除非JTAG连接并驱动它们,否则它们的状态不应更改。 \ \ endgroup \美元 11月17日17:54

你的答案

点击“发布答案”,您同意我们的同意服务条款隐私政策Cookie政策

不是您要找的答案?浏览其他标记的问题问你自己的问题