我们在产品中使用具有单个512MB Micron DDR3 RAM 芯片的 AM3352处理器几年了。 在制造过程中、少量电路板测试失败(大约为2000年的5个)、因为它们在热复位(由 Linux OS 的 reboot 命令引起)后不会引导。 在这种情况下、会加载 MLO、初始化 EMIF、然后在对 DDR3进行特定数量的访问后崩溃。 冷复位后、所有这些板在运行深度 RAM 测试时均稳定运行、不会产生错误。
引导加载程序(barebox 2022.08、但 u-boot 相同)始终以相同的方式初始化 EMIF (完全初始化)。 通过使用示波器研究信号 DDR_RESET 和 DDR_CKE、我可以看出、即使使用相同的初始化代码、硬件在两种复位情况下的行为也不同:
在冷复位时、DDR_RESET 的上升沿和 DDR_CKE 的上升沿之间存在适当的延迟(~500us)、热复位情况并非如此(上升沿之间仅存在~30us 的延迟)。
根据我在相关主题中阅读的内容(TI 员工 JJD 的评论)、如果发生热复位、则应使用不同的初始化序列。
什么是热复位的正确 EMIF 初始化序列(必须写入哪些寄存器)? 遗憾的是,参考手册中没有关于这一主题的指导,因此我恳请大家提供支持。