Memory MCU在断点处停止时出现意外的DRAM行为

Memory MCU在断点处停止时出现意外的DRAM行为,memory,arm,embedded,cortex-a,Memory,Arm,Embedded,Cortex A,我目前正在开发飞思卡尔Vybrid(VF6xx)MCU,试图配置外部LPDDR2 DRAM芯片 我在DRAM(内存映射到0x8000_0000)中遇到了一些奇怪的行为:当在断点处停止时,每次我在调试器中读取DRAM时,DRAM似乎都会发生变化 有人知道这是什么原因吗 干杯 我最终找到了这个问题的答案 事实证明,DRAM设置定义了错误的地址pin。制造商为定义该位的寄存器提供了建议值,但结果证明是错误的 对于未来的谷歌用户:Vybrid参考手册第7版和第8版建议DDRMC_CR73[APREBI

我目前正在开发飞思卡尔Vybrid(VF6xx)MCU,试图配置外部LPDDR2 DRAM芯片

我在DRAM(内存映射到0x8000_0000)中遇到了一些奇怪的行为:当在断点处停止时,每次我在调试器中读取DRAM时,DRAM似乎都会发生变化

有人知道这是什么原因吗


干杯

我最终找到了这个问题的答案

事实证明,DRAM设置定义了错误的地址pin。制造商为定义该位的寄存器提供了建议值,但结果证明是错误的


对于未来的谷歌用户:Vybrid参考手册第7版和第8版建议DDRMC_CR73[APREBIT]=0xA用于DDR3和LPDDR2。这将指定DDR_A10/CA10作为地址pin。JEDEC标准指定DDR_A0/CA0作为地址引脚,因此正确的值应该是:DDRMC_CR73[APREBIT]=0x0

我相信6xx系列是Cortex-A5+Cortex-M4系列,因此您有两个完全独立的CPU,加上许多支持DMA的外围设备,在其中一个CPU停止时(即使两个CPU都停止),任何数量的事情都可能继续进行。如果它有某种MBIST例程,它甚至可能是DRAM控制器本身。如果没有更多的信息,我怀疑任何人都能肯定。我会检查IRAM,看看它是否是一样的。是否启用了缓存?看起来像是寻址错误。我看到这些值正在向内存不足的方向移动。Ie“w.zo”(ascii向右)在屏幕上向上移动。没有更多细节,没有人能回答这个问题。这可能是硬件问题或LPDDR2配置问题。请参阅飞思卡尔应用程序说明(在VF6xx DDR上)和@Notlikethat,辅助核心(M4)已禁用。除了与DRAM交互的主MCU之外,应该没有其他东西。我们假设问题在于如何配置内存控制器。因此,我们正在寻找可能导致我们所经历症状的常见问题。@artlessnoise IRAM没有表现出相同的行为,并且缓存被禁用。当MCU停止时,寻址错误不应导致DRAM改变,因为在同一地址重复读取时应返回相同的值。先写后读过程(当然使用易失性指针)不会返回写入的值。同一过程运行数千次(0x0、..、0xffff扫描和随机模式)表明,从DRAM读取的值不受正在写入的值的影响。签出和其他标记。如果地址行是片状的,您将始终读/写到某个未知位置。您的写入可能已成功到某个未知位置;也许你永远无法从那个地方阅读。为了诊断不同的问题,开发了不同的RAM测试。信号为“控制”、“数据”和“地址”;控制是最关键的,因为数据的时间也很紧。地址是最不重要的。当然,它们都可能是片状的。首先尝试最低时钟频率。