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.

[参考译文] AM62A7-Q1:启用内联 DDR ECC 后出现 ECC 错误

Guru**** 2951260 points

Other Parts Discussed in Thread: AM62A7-Q1

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1646738/am62a7-q1-ecc-error-after-enabling-inline-ddr-ecc

器件型号: AM62A7-Q1

您好、TI 专家

环境:  
SoC:AM62A7-Q1
SDK:mcu_plus_sdk_am62ax_10_01_00_33
DDR 配置:1865MHz DDR_cfg (am62a7_2GB_1865_MT)。zip 

问题:  
启用内联 DDR ECC 后、我们进行了应力测试并遇到 ECC 错误中断、
禁用内联 DDR ECC 后、使用 memtester 时没有异常。 我想问一下、保证金是否不足、或时间是否过于激进?
image.png


DDR 启用过程:  
1.在 SBL1 中设置 DDR ECC 配置
image.png
2.应用补丁

/cfs-file/__key/communityserver-discussions-components-files/791/ddr_5F00_11_5F00_1.patch

3.更新 u-boot-spl & u-boot & kernel 中的 dtb
20260518-171254.jpg
4、读取寄存器 0x0f300120 显示 ECC 已启用。
image.png


memtester 测试方法:
root@am62axx-evm:/userdata# devmem2 0x0f300120 w
/dev/mem opened.
Memory mapped at address 0xffff8dcbd000.
Read at address  0x0F300120 (0xffff8dcbd120): 0x00000117
root@am62axx-evm:/userdata# cat /proc/iomem 
000f4000-000f425b : pinctrl-single
00600000-006000ff : 600000.gpio gpio@600000
00601000-006010ff : 601000.gpio gpio@601000
00a40000-00a407ff : pinctrl-single
00b00000-00b003ff : b00000.temperature-sensor temperature-sensor@b00000
00b01000-00b013ff : b00000.temperature-sensor temperature-sensor@b00000
01800000-0180ffff : GICD
01880000-0193ffff : GICR
02400000-024003ff : 2400000.timer timer@2400000
02410000-024103ff : 2410000.timer timer@2410000
02430000-024303ff : 2430000.timer timer@2430000
02440000-024403ff : 2440000.timer timer@2440000
02450000-024503ff : 2450000.timer timer@2450000
02460000-024603ff : 2460000.timer timer@2460000
02470000-024703ff : 2470000.timer timer@2470000
02800000-0280001f : serial
04084000-04084087 : pinctrl-single
04201000-042010ff : 4201000.gpio gpio@4201000
08000000-081fffff : 8000000.ethernet cpsw_nuss
0e000000-0e0000ff : e000000.watchdog watchdog@e000000
0e010000-0e0100ff : e010000.watchdog watchdog@e010000
0e020000-0e0200ff : e020000.watchdog watchdog@e020000
0e030000-0e0300ff : e030000.watchdog watchdog@e030000
0f300000-0f3001ff : f300000.ddr-diag ddr-diag@f300000
0f900000-0f9007ff : f900000.dwc3-usb dwc3-usb@f900000
0f908000-0f9083ff : f900000.dwc3-usb dwc3-usb@f900000
0fa10000-0fa1025f : fa10000.mmc mmc@fa10000
0fa18000-0fa18133 : fa10000.mmc mmc@fa10000
0fd20000-0fd200ff : fd20000.jpeg-encoder core
0fd20200-0fd203ff : fd20000.jpeg-encoder mmu
20000000-200000ff : 20000000.i2c i2c@20000000
20020000-200200ff : 20020000.i2c i2c@20020000
20030000-200300ff : 20030000.i2c i2c@20030000
20701000-207011ff : 20701000.can m_can
29000000-290001ff : 29000000.mailbox mailbox@29000000
29010000-290101ff : 29010000.mailbox mailbox@29010000
29020000-290201ff : 29020000.mailbox mailbox@29020000
2a000000-2a000fff : 2a000000.spinlock spinlock@2a000000
2b1f0000-2b1f00ff : 2b1f0000.rtc rtc@2b1f0000
30101000-30101fff : 30101000.csi-bridge csi-bridge@30101000
30102000-30102fff : 30102000.ticsi2rx ticsi2rx@30102000
30110000-301110ff : 30110000.phy phy@30110000
30210000-3021ffff : 30210000.video-codec video-codec@30210000
30300000-30300fff : 30300000.crc crc@30300000
3100c100-3104ffff : 31000000.usb usb@31000000
40900000-409011ff : 40900000.crypto crypto@40900000
44043000-44043fdf : 44043000.system-controller debug_messages
48000000-480fffff : 48000000.interrupt-controller interrupt-controller@48000000
485c0000-485c00ff : 485c0000.dma-controller gcfg
485c0100-485c01ff : 485c0100.dma-controller gcfg
4a400000-4a47ffff : 4d000000.mailbox scfg
4a600000-4a67ffff : 4d000000.mailbox rt
4a800000-4a81ffff : 485c0000.dma-controller rchanrt
4a820000-4a83ffff : 485c0100.dma-controller rchanrt
4aa00000-4aa3ffff : 485c0000.dma-controller tchanrt
4aa40000-4aa5ffff : 485c0100.dma-controller tchanrt
4b800000-4bbfffff : 485c0000.dma-controller ringrt
4bc00000-4bcfffff : 485c0100.dma-controller ringrt
4c000000-4c01ffff : 485c0100.dma-controller bchanrt
4d000000-4d07ffff : 4d000000.mailbox target_data
4e0a0000-4e0a7fff : 4e0a0000.interrupt-controller interrupt-controller@4e0a0000
4e100000-4e10ffff : 4e230000.dma-controller ringrt
4e180000-4e187fff : 4e230000.dma-controller rchanrt
4e230000-4e2300ff : 4e230000.dma-controller gcfg
70000000-7000ffff : 70000000.sram sram@70000000
78000000-78007fff : 78000000.r5f
78100000-78107fff : 78000000.r5f
79000000-79007fff : 79000000.r5f
79020000-79027fff : 79000000.r5f
79100000-7917ffff : 79100000.sram sram@79100000
7e000000-7e0fffff : 7e000000.dsp
80000000-8007ffff : reserved
80080000-919fffff : System RAM
  82010000-8312ffff : Kernel code
  83130000-833affff : reserved
  833b0000-8359ffff : Kernel data
  87fff000-87ffffff : reserved
  88000000-88010fff : reserved
91a00000-9e6fffff : reserved
9e700000-9e7fffff : System RAM
9e800000-a33fffff : reserved
a3400000-bcbfffff : System RAM
  a3400000-bcbfffff : reserved
bcc00000-bcd00fff : reserved
bcd01000-f1c6ffff : System RAM
  ef600000-f17fffff : reserved
  f18b6000-f18b8fff : reserved
  f18b9000-f18b9fff : reserved
  f18ba000-f1909fff : reserved
  f190c000-f190cfff : reserved
  f190d000-f190ffff : reserved
  f1910000-f1920fff : reserved
  f1921000-f1c6ffff : reserved
root@am62axx-evm:/userdata# 
root@am62axx-evm:/userdata# free
               total        used        free      shared  buff/cache   available
Mem:         1107048      277960      706340       11488      204828      829088
Swap:              0           0           0
root@am62axx-evm:/userdata# 
root@am62axx-evm:/userdata# ./memtester 512M 999999
memtester version 4.5.1 (64-bit)
Copyright (C) 2001-2020 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 512MB (536870912 bytes)
got  512MB (536870912 bytes), trying mlock ...locked.
Loop 1/999999:


e2e.ti.com/.../memtester.log

此致!

Xue Fadong

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

    您使用的 AM62A 器件的完整器件型号是多少?  您需要检查处理器的速度等级、因为某些速度等级只有 DDR 的最大 1600MHz

    请参阅数据表中的以下部分:

    此致、

    James

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

    您好、James  



    我们使用速度等级 V、它理论上支持 1866MHz。




    此致!

    Xue Fadong

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

    好的、这确认您可以在高达 1866MHz 的频率下运行 DDR 接口。  

    请在不更改这些参数的情况下尝试:

    DDRSS.LPDDR4.CONFIG_DRAM_tREFIpb_ns = 488;
    DDRSS.LPDDR4.CONFIG_DRAM_tREFIab_ns = 3906;
    DDRSS.LPDDR4.CONFIG_DRAM_tRASmax_ns = 35154;

    这些参数会在选择工作温度范围时自动变化。  

    第二个实验中、请尝试在 1600MHz 下运行。

    当您说正在收到 ECC 中断时、您会收到可纠正的 ECC 错误还是不可纠正的错误?  

    此致、

    James

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

    您好、James  

    我们的参数配置如下:

       

    我们测试了是否在 1600MHz 处启用 DDR ECC、并遇到 ECC 错误。

    当发生 ECC 中断时、它可能是可纠正的 ECC 错误或不可纠正的错误、这两者都遇到了。

    此致!

    Xue Fadong

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

    请尝试使用附加的配置。  这只是配置的微小变化。   

    /cfs-file/__key/communityserver-discussions-components-files/791/ddr_5F00_cfg_5F00_simplified.zip

    当您在禁用 ECC 的情况下运行 memtester 时、您运行了多少个循环?  您是不是在工作温度范围内运行、尤其是在高温下运行?  您遇到的似乎是一个不常见的边缘问题、这可能会在高温运行 memtester 时发现。

    您是否还可以使用 https://www.ti.com/tool/download/DDR-MARGIN-FW /1.9.0 (工具中提供了说明)。  这是一个虚拟的眼睛工具,它将给你一个想法的边缘在你的设计。

    此致、

    James

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

    您好、James  


    我们根据您提供的配置文件进行了测试

    /cfs-file/__key/communityserver-discussions-components-files/791/ddr_5F00_cfg_5F00_simplified.zip

    但是、发生了非法访问中断;原因当前未知。


    我们还对此进行了眼图测试;测试结果如下。
    e2e.ti.com/.../Teye_5F00_micron_5F00_2GB_5F00_1600.pdf


    我们还测试了当前使用的配置 (1865MHz);眼图如下所示:
    e2e.ti.com/.../Teye_5F00_micron_5F00_2GB_5F00_1865.pdf
    根据该眼图、DQ26 至 DQ29 的裕度看起来非常低。 这是否是导致 DDR ECC 错误的原因? 我们应该如何优化这一点?

    发生 ECC 错误时、SoC 温度约为 70 摄氏度以上。

    此外、根据我们当前的配置、简单地将频率更改为 1600MHz 也会导致 ECC 错误。

    此致!

    Xue Fadong

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

    尊敬的 XUE:

    Teye_micron_2GB_1600.pdf 对每个位的眼图比 Teye_Micron_2GB_1865.pdf 宽得多。  但很难确定这是由于频率差还是配置差异造成的。   

    我建议使用我为您提供的配置继续进行调试、并尝试找出非法访问中断。  看起来好像这是关于 ESM 事件的事情、尽管我不知道为什么我给您的 DDR 配置会出现这个错误、但它应该不重要。  也许您现在可以禁用此事件、或者以某种方式确定获得此中断的原因。  如果您可以提供完整的日志、或许我们的软件团队可以提供帮助。

    此致、

    James

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

    您好、James  


    我们根据您提供的配置文件执行测试并禁用其他 ESM 中断;结果是无论是否启用了 DDR ECC、R 内核都会挂起。

    除非 将`tREFlab`更改为 3906、否则 R 内核会挂起。 我们检查了 DDR MR4 寄存器、发现它当前处于 1×Refresh 模式、而我们已将`tREFlab`设置为 4×Refresh。 这种差异是否是导致该问题的原因?


    DDR ECC 启用测试仅在 tREFlab 参数修改为 3906 的情况下进行、但仍然发生 ECC 错误。

    此致!

    Xue Fadong

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

    尊敬的 XUE:

    您可以通过降低刷新率来使工作正常这一事实表明、高刷新率可能会遇到一些带宽限制。

    尝试使用以下配置(最大配置为 85°C)、这将使刷新率保持为 1x

    /cfs-file/__key/communityserver-discussions-components-files/791/ddr_5F00_config_5F00_simplified_5F00_1600MHz_5F00_85C.zip

    如果电路板使用此配置引导、请尝试执行 memtester 测试。  如果您可以让测试通过、那么至少我们有一个基线配置、可以在启用 ECC 的情况下使用。   

    然后、我们可以继续提高频率。  您的应用是否需要在大于 85°C 的温度下运行?   

    此致、

    James

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

    您好、James  

    降低频率不能解决问题;它只是降低概率。
    /cfs-file/__key/communityserver-discussions-components-files/791/ddr_5F00_config_5F00_simplified_5F00_1600MHz_5F00_85C.zip
    此配置下仍会遇到 ECC 错误、即使我们持续冷却 SoC、中断也会在温度低于 60°C 时发生。
    我们的产品具有较高的温度要求、并需要能够在 105°C 下运行。

    我们是否可以修改和测试任何其他配置? 目前、我们没有可避免 ECC 错误的配置。

    此致!

    Xue Fadong

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

    尊敬的 XUE:

    让我再问几个问题来了解一些背景信息:

    -您似乎正在使用 SBL 引导至 Linux。  此日志来自什么?  它看起来不像 Linux 日志。  这是从 R5 运行的一些监控日志吗?

    -这个片段来自 u-boot dtb、但这是无关紧要的、因为你使用的是 SBL。  您能展示在内核 dtb 中所做的更改吗?

    [引述 userid=“675915“ url=“~/support/processors-group/processors/f/processors-forum/1646738/am62a7-q1-ecc-error-after-enabling-inline-ddr-ecc。]3. 更新 u-boot-spl 和 u-boot 和内核中的 DTB
    20260518-171254.jpg[/报价]

    -当 ECC 发生时,您可以在 Linux 中显示日志吗?  您发布的 memtester 日志不显示任何 memtester 错误。

    -当发生 ECC 错误时 Linux 会崩溃吗?  

    -您的系统在发生 ECC 错误时会做什么?  例如、您只是在错误发生时运行 memtester 吗?  您是否正在执行任何应用级操作?  例如、与系统中的其他外设进行任何数据传输?  同时执行多少个处理器内核?   

    -您指出了温度敏感性。  那么、您是否提升温度并开始发现故障?  还是在一定温度下引导和运行?

    -你提到你得到了可纠正和不可纠正的错误。  在遇到不可纠正的错误之前、您是否能够引导并运行一段时间?  或者、这些错误是否在引导过程中发生、而您的系统永远无法通过引导阶段?

    此致、

    James

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

    您好、Jamms

    1. 我们使用 SBL 进行引导、该日志来自 R-CORE。 我们已在 R-CORE 上启用 ESM ECC 故障检测;当触发 ECC 故障时、将生成复位信号。
    2.内核中的修改与 U-Boot 中的修改类似,限制了总内存大小。

    3、发生 ECC 错误时 Linux 系统没有异常。
    4、Linux 系统没有崩溃。
    5.我们的应用程序在 A 核上运行,利用共享内存与 R 核进行内核间通信。 我们观察到、报告 DDR ECC 错误的所有存储器区域都位于此特定的共享存储器区域内。 这可能是什么原因?
    6.我们在 60°C 周围也遇到这个问题;温度似乎不是决定性的原因。
    7.系统在发生 ECC 错误之前的一段时间内正常运行。

    此致!

    Xue Fadong

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

    您能给我们提供有关导致这些错误的场景的更多详细信息吗?  您在 A53 和 R5 之间执行哪种类型的通信?  共享哪种类型的数据?  是否有任何握手或信标来确保 A53 和 R5 不会同时访问同一区域?  共享数据的性质(元素大小,块大小,结构,单个数据字等)是什么?

    此致、

    James

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

    接下来、如果可能、我们想在 EVM 上重现此故障。  如果您有 EVM、如果可以在 EVM 上重现此问题、或者提供有关故障场景的足够信息、我们可以尝试重现此问题、从而真正加快调试速度。

    此致、

    James