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.

[参考译文] AM3356:AM3356的存储器损坏问题

Guru**** 2330830 points
Other Parts Discussed in Thread: AM3356
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1520171/am3356-memory-corruption-issue-from-am3356

器件型号:AM3356

工具/软件:

你(们)好 我们与您的团队讨论了这个问题。 Ryan Taylor 想让我把信息放到这个论坛上。

第一封电子邮件:

我们使用贵公司的 AM3356处理器与 IAR 8.4编译器相结合。

 

我们遇到处理器问题。

 

我们将在最高优先级中断时对器件运行内存测试、存储器大小为128MB。

 

以下是我们在内存测试中所做的操作:     

 

  1. 复制16 * 4字节的数据以将其保存到临时缓冲区中。
  2. 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效
  3. 然后、器件将测试模式 A5A5A5A5写入 RAM。 我们一次测试4个字节。  此步骤将运行16次。
  4. 然后我们测试不同的模式。 器件将将测试模式:5A5A5A5A 写入 RAM。 我们一次测试4个字节。  此步骤将运行16次。
  5. 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效
  6. 存储步骤1中的数据并写回 RAM。
  7. 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效

 

一段时间(运行几周后)、我们会看到 RAM 存储器损坏、 在某些存储器位置留下的值为‘A5’。

您是否知道可能导致此类行为的任何勘误表或类似处理器相关问题?

第二封电子邮件:然后泰勒问了一些问题。 这就是回应。  

感谢您在此处进行 ping 操作—您能帮助我了解以下内容吗? :

看起来问题与外部 DRAM 有关—您使用什么 DRAM?  ISSI 的 IS46TR16640CL-125JBLA2-TR

为什么您认为存储器位置卡在该值会成为 AM3356中的问题、而不是 DRAM 芯片中的问题? 我认为这不是 AM3356或 DRAM 的硬件问题。 我相信我们滥用了处理器。

我们正在寻求 TI 的一些建议来解决该问题。   

 第三封电子邮件:

此测试是否与其他测试同时定期运行? 测试在中断时运行。 该测试每256ms 运行一次。  

 

什么是操作系统? TheadX 是我们的操作系统。       

您正在使用的 SW 缓存一致性管理命令—它们是否来自 IAR 编译器?

在测试中、我们使用以下命令:__mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1);这是为了清除缓存并使其失效。

您能附上代码吗?

我不确定是否允许我附加代码。 讨论结束后、我复制了一行代码来回答前一个问题、如果您仍然需要代码、我会询问是否允许这样做。

 

例如、您是否设置障碍以确保软件缓存管理操作完成? 除了我在上面发布的"清除和失效"命令之外、我们在此 RAM 测试中没有使用任何障碍。

 

几周内的成功测试意味着多少? 即、128MB 的测试频率是多少? RAM 测试继续以256ms 的速率运行。 每256ms、器件测试64个字节。 对于在几周内运行测试以损坏内存意味着内存损坏是随机发生的。   

最后一封电子邮件:

Ryan:

 

您有任何更新吗? 此外、如果我们使用_mcr (15、0、 reinterpret_cast ( Ext_Ram_Test_Address ), 7, 14, 1)为了清除和使数据缓存无效,我们是否应该在其周围添加屏障操作以防止数据和指令不同步?

 

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Greg:  

    有关上述 DRAM 部分的一些后续问题(请注意、您使用的是  ISSI 的 IS46TR16640CL-125JBLA2-TR):

    -这是一个新的硬件设计,还是一个新的软件功能最近正在推出?  

    • 如果是这样、您是否以更慢的速度运行 DDR /使用更保守的设置?  
    • 您是在加热室还是某些 EMI 环境中运行测试、但有些问题越来越普遍?  
    • 是否在 TI EVM 或 BeagleBone 开发板上运行了相同的测试、并且出现了问题?  

    -有多少板发生故障? 全部? 只是一些?  

    -您是否正在运行除上述以外的任何其他类型的内存压力测试? (memtester、stress-ng 等...)

    此致、

    -rt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ryan:

    正如我们讨论的、这是一个随机问题。 我们没有针对该问题设计任何新的硬件或软件。  

    我们加快了 RAM 测试、问题发生的频率更高、所有设备都有相同的问题。  

    我之所以怀疑这一点、是因为当器件 清理数据缓存并使其无效时、我们不会遇到障碍。

    我们还确保 RAM 按预期运行。 这不是 RAM 发出的硬件问题。

    谢谢

    GREG

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问候 Greg、

    这最终可能仍会导致 RAM 问题、但听起来可能像是潜在的订购/时序控制问题。 让我们来了解一下您正在执行的操作顺序(或者至少我是如何理解的):

    [quote userid="460279" url="~/support/processors-group/processors/f/processors-forum/1520171/am3356-memory-corruption-issue-from-am3356
    • 复制16 * 4字节的数据以将其保存到临时缓冲区中。
    • 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效
    • 然后、器件将测试模式 A5A5A5A5写入 RAM。 我们一次测试4个字节。  此步骤将运行16次。
    • 然后我们测试不同的模式。 器件将将测试模式:5A5A5A5A 写入 RAM。 我们一次测试4个字节。  此步骤将运行16次。
    • 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效
    • 存储步骤1中的数据并写回 RAM。
    • 发出_mcr (15、0、 reinterpret_cast (Ext_Ram_Test_Address)、7、14、1)以清除数据缓存并使其失效
    [/报价]
    1. 从 DRAM 地址范围加载数据、然后将数据存储到 临时缓冲区
    2. 清理并使所使用的 DRAM 地址范围的线缆失效
      1. 清洗会将该地址的高速缓存内容发送到存储器端点
      2. 失效将证书标记为无效、因此未来的存储器访问将从存储器终点加载
    3. 开始循环
      1. 存储 A5A5A5A5到 DRAM 地址范围
      2. 从 DRAM 地址范围加载数据、以查看 A5A5A5A5A5的内容是否被读回
      3. 重复 a+b 16次
    4. 开始循环
      1. 将5A5A5A5A 存储 到使用的 DRAM 地址范围
      2. 从 DRAM 地址范围加载数据、以查看 5A5A5A5A 是否被读回
      3. 重复 a+b 16次
    5. 清理并使所使用的 DRAM 地址范围的线缆失效
    6. 从临时缓冲区加载数据、然后存储到 DRAM 地址范围
    7. 清理并使所使用的 DRAM 地址范围的线缆失效  

    在这里、代码片段可能有助于确认。 我们只需要循环的片段、您可以从中读取/写入 DRAM 的数据、而不需要其他数据。

    立即想到的几个问题:

    1. 您正在使用的 DRAM 地址范围的 MMU 属性是什么? 不引用 AP 属性、但读取/写入会分配 MMU 配置的 writeback/writethrough 部分。  
    2. 您的测试使用多大的地址范围?  

    此致、

    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我们的代码是保密的。 我需要获得向您展示代码的许可、但我捕捉了我们在对话中所做的事情。  

    1)我们编程了所有要读写的内存区域。 其中一些是不可缓存的、其中大多数是可缓存的。  

    2)我们在最高优先级的中断上运行内存测试,内存大小为128MB。 我们跳过了所有堆栈区域。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="460279" url="~/support/processors-group/processors/f/processors-forum/1520171/am3356-memory-corruption-issue-from-am3356

    此外、如果我们使用_mcr (15、0、 reinterpret_cast ( Ext_Ram_Test_Address ), 7, 14, 1)为了清除和使数据缓存无效,我们是否应该在其周围添加屏障操作以防止数据和指令不同步?

    [/报价]

    是的、您需要设置适当的障碍。 缓存写回失效的一个示例是 https://github.com/TexasInstruments/mcupsdk-core/blob/a6a78f32b252923849a877403f5f3ab298bc3a46/source/kernel/nortos/dpl/r5/CacheP_armv7r_asm.S#L216 、此示例适用于 Armv7-r。

    Arm Material 还在 https://developer.arm.com/documentation/ddi0406/b/System-Level-Architecture/Common-Memory-System-Architecture-Features/Caches/Cache-maintenance-functionality?lang=en#:~:text=The%20set/way%2Dbased%20cache%20maintenance%20operations%20are:%20*,cache%20or%20unified%20cache%20line%20by%20set/way 上提供了 Armv7-A 示例。滚动到底部以查看代码示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是指向存储器屏障部分的链接、详细介绍了 DMB/DSB 指令:

    https://developer.arm.com/documentation/ddi0406/b/Application-Level-Architecture/Application-Level-Memory-Model/Memory-access-order/Memory-barriers?lang=en