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.

[参考译文] AM2432:SBL 在高温错误下的 OSPI 频率

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1520539/am2432-sbl-ospi-frequency-at-high-temperature-error

器件型号:AM2432
主题: SysConfig 中讨论的其他器件

工具/软件:

您好、

我将 AM2432 与工业 SDK 11.00.00.08 配合使用、

我们在定制电路板上使用我们的定制 sbl_ospi 工程进行了一些高温测试(大约 90 度)、以了解我们的器件行为。  

我们的结果如下:

133 +无 PHY   +无 DMA     典型工作原理
133 + PHY       + DMA        典型工作原理
166 +无 PHY +无   DMA   崩溃(第一种情况)
166 +无 PHY   + DMA       碰撞(第一种情况)
166 + PHY       + DMA       碰撞(第二种情况)

我们注意到两种类型的碰撞。

在第一种崩溃情况下、SBL ospi 似乎无法对映像进行身份验证、尤其是在以下情况中失败:bootloader_parseMultiCoreAppImage -> bootloader_verifyMulticoreImage -> Bootloader_socAuthImage -> Sciclient_procAuthAndStart、其中 check if ((retVal!= SystemP_success)||(param_rerespt_param=SystemVal_flags) Val_rep.ACK_flags、因为 Param_rep.Param_rep.Parascis_princy=Val_Val_Val_Val_


在第二种崩溃情况下、配置级别的错误似乎更多、因为 sbl_ospi 尝试启用 PHY、但失败:

所述问题发生在高温下、而在正常温度下从未发生过问题。

我们注意到使用 133MHz 频率的测试似乎都通过了。

一种奇怪的行为是、如果器件被预热到高温、但从关闭状态、那么在开启时、它有时不会出现问题。 当高温模块保持开启一段时间(约 1-2 分钟)、然后关闭然后再次开启时、问题更常见。  因此、模块似乎在某种程度上对它以前在重新启动时的运行时间很敏感。

我们可以做些什么来更好地理解和解决问题?  是否已遇到此问题? 它与 OSPI PHY 调优的需求有什么关系吗?

谢谢您、

此致、

Andrea

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

    您好、

    我补充一些细节。
    我们还使用 200MHz 在更高的频率下执行了一些测试、但在本例中、无论是否使用 DMA 和 PHY、测试都顺利通过。

    似乎,改变测试成功的因素只是频率,但为什么在 130MHz 和 200MHz 它的工作,而它只是在 166MHz 给出的问题? 我预计如果 166MHz 失败、200MHz 也应该失败。

    谢谢您、

    此致、

    Andrea

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

    您好、

    我添加了一些有关使用 166MHz 且没有 PHY 的测试的详细信息。

    我添加了以下代码来了解 OSPI 读取和写入如何失败。

            DebugP_log("\r\n\r\nDoing some tests...\r\n\r\n");
            Flash_Handle flashHandle = gFlashHandle[CONFIG_FLASH0];
            uint32_t startOffset = 0x380000;
            uint32_t blk;
            uint32_t page;
            uint32_t ret;
    
            Flash_Attrs *flashAttrs = Flash_getAttrs(CONFIG_FLASH0);
    
            uint32_t eraseOffset = startOffset;
            Flash_offsetToBlkPage(flashHandle, eraseOffset, &blk, &page);
            ret = Flash_eraseBlk(flashHandle, blk);
            DebugP_assert(ret == SystemP_SUCCESS);
    
            uint8_t BufferData[256];
            for (int i = 0; i < 256; i++) {
                BufferData[i] = i;
            }
            ret = Flash_write(flashHandle, startOffset, (uint8_t *)BufferData, 256);
            DebugP_assert(ret == SystemP_SUCCESS);
    
            uint8_t dataRx[256] = {0};
            ret = Flash_read(flashHandle, startOffset, dataRx, 256);
            DebugP_assert(ret == SystemP_SUCCESS);
    
            for (int i = 0; i < 256; i++)
            {
                if (BufferData[i] != dataRx[i])
                {
                    DebugP_log("\r\n%x - %x - %x\r\n", BufferData[i], dataRx[i], i);
                    ret = SystemP_FAILURE;
                }
            }
            DebugP_assert(ret == SystemP_SUCCESS);
            DebugP_log("\r\n\r\nTest done, OK!\r\n\r\n");


    这是测试失败时的结果:

    写入 — 重新读取比较-缓冲器位置(缓冲器位置=写入)

    似乎有时在缓冲区位置 0x4 的倍数中、重新读取的比较值比我们预期的值大 1 位。

    谢谢您、  

    此致、

    Andrea

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

    您好、Andrea、

    感谢您详细解释您的问题。

    我来拟定一个响应、说明调试步骤。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复、有没有任何更新吗?

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    感谢您的等待。

    对于上述所有组合、我假设您的定制电路板上有 S28HS512T 闪存器件、还是 S25HL512T?

    您能继续提供您所说的所有组合的时钟分频器值吗?

    .meanwhile、另请通读以下常见问题解答、以了解 OSPI 调优算法是什么: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1431856/faq-am62a7-ospi-phy-tuning-algorithm

    此外、还将介绍以下内容:

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复。

    我们在定制电路板上使用的 闪存是 S28HS512T 闪存。 使用的时钟分频器始终为 4。  

    谢谢你的链接,我将查看它,并测试它的同时.

    此致、

    Andrea

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

    您好、Andrea、


    请务必通读这些链接、并在您了解调优算法后告诉我。

    [引述 userid=“623297" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1520539/am2432-sbl-ospi-frequency-at-high-temperature-error ]166 +无 PHY +无   DMA   崩溃(第一种情况)
    166 +无 PHY   + DMA       碰撞(第一种情况)
    166 + PHY       + DMA       崩溃(第二种情况)

    然后、我们将首先处理无 PHY 器件。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复。

    我已经阅读了这些文章。 我有疑问、该调优算法是否应该在我们使用的每个定制电路板上都完成? 我认为每一个器件都需要进行调整、而且每个项目只进行一次调整是不够的、对吧?

    告诉我后续要采取哪些步骤来调查无 PHY 器件。

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    [引述 userid=“623297" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1520539/am2432-sbl-ospi-frequency-at-high-temperature-error ]166 +无 PHY +无   DMA   崩溃(第一种情况)

    让我们从 以下方式开始。

    请根据指定的组合填写下表。

    频率(以 MHz 为单位) 时钟分频器 启用 PHY 启用 DMA 结果
    133. 4. 是的 是的 典型工作原理
    133. 4. 是的
    133. 4. 是的
    133. 4. 典型工作原理
    166. 8.
    166. 8. 是的
    166. 8. 是的 是的
    200 4.
    200 4. 是的
    200 4. 是的 是的

    我还假设您将测试上述协议为 8D-8D-8D 的组合。

    此致、

    Vaibhav

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

    您好、

    如果您尝试在 OSPI 闪存 IO 等应用上运行此评估模块、如果它能够在这些应用上运行、那么它也适用于其他应用(应用)。

    如果您认为可以轻松地使用 SBL OSPI、该选项也可以正常工作。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:  

    感谢您的答复。

    我们将在本周进行测试、我们将与您分享测试结果。 同时、我对 OSPI 调优算法有一些疑问、 我们使用的每个定制电路板上是否都需要运行这个调优算法? 我认为每个单独组件都需要进行调优、不足以每个工程运行一次、对吧? 如果我们不使用它会发生什么情况?  它会以较慢的速度运行还是读取/写入会出错?  该算法是否应在发生错误的高温条件下进行? 那么、它对每个条件都有效吗? 应该在每次启动时或只执行一次? 我读出需要使用 --operation=flash-phy-muning-data 编写模式、但这个选项在一个 cfg 文件中、我应该在 UART 模式下使用、但对于我们的定制板、我们无法进入 UART 模式、还有其他方法吗?

    谢谢您、

    此致、

    Andrea

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

    您好、

    本周我们将进行测试、我们将与您分享结果。

    谢谢你。 我很期待这件事。

    与此同时、我对 OSPI 调 优算法有一些疑问、该调优算法是否需要在我们使用的每个定制电路板上运行?

    是的。

    我认为对每个单独的组件进行调优是必要的、并且只对每个工程运行一次是不够的、对吧? [/报价]

    对于每个工程、调优可以运行一次、因为调优的值(我们称为 OTP)会在您运行后保存下来、并且由于 PVT 是相同的、也可以在同一电路板的后续项目中使用。

    如果我们不使用它会发生什么情况?

    假设一个工程在特定 PVT 处计算 OTP、而另一个工程在不同的 PVT 处使用了相同的 OTP、这种情况并不是理想情况。

    如果我们不使用它会发生什么情况?  它会以较慢的速度运行还是读取/写入会出错?  该算法是否应在发生错误的高温条件下进行? 那么、它对每个条件都有效吗? 应该在每次启动时执行还是只执行一次?

    我将在另一个响应中借助图表来解释这一点。

    该算法是否应在发生错误的高温条件下完成? 那么、它对每个条件都有效吗? 应该在每次启动时或只执行一次? 我读到我需要用 --operation=flash-phy-tuning-data 编写一个模式、但这个选项是在一个 cfg 文件中、我应该在 UART 模式下使用、但对于我们的定制板、我们不能进入 UART 模式、是否有其他方法?

    PHY 启用可在任何温度下完成、通过查看流程图、您将了解启用 PHY 的作用/优势。

    对于模式写入、必须将其只写入一次、即写入闪存、下次不需要写入闪存、因为在整个 SDK 中、我们不会擦除写入 phy 调优矢量的块。

    您可以使用任何外部工具来写入一次闪存、否则我可以建议对您在驱动程序本身中使用的闪存器件进行一些更改、这样无论您在.cfg 文件中定义什么、都要确保写入此模式。  

    我看到您使用的是 S28HS512T 闪存器件、您能否告诉我您计划在混合模式还是统一模式下运行闪存? 请参阅以下内容以了解混合模式与扇区模式: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1492859/faq-processor-sdk-am62x-4kb-sector-erase-fails

    此致、

    Vaibhav

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

    供参考、下面的流程图将帮助您更轻松地理解。

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

    尊敬的 Vaibhav:

    感谢您的详细答复。

    我重新阅读了所有内容、现在我认为我理解得很好。 如果我错了、请纠正我:

    • PHY 调优在每次启动时自动完成(当在 SysConfig 中启用 PHY 模式时)。 SDK 代码内有函数 Flash_norOspiOpen、该函数负责检查闪存的最后一部分中是否存在攻击向量(在不好的情况下写入攻击向量,并且在用户擦除该部分之前有效)、使用函数 OSPI_phyTuneDDR 计算最优值并保存它们。 但在我看来、它将它们保存在局部变量中而不是闪存中、因此这意味着该算法必须在每次启动时执行(我不确定这部分);
    • 在 PHY 调优之后、每次执行读取时、PHY 模式将与这些参数一起使用。 PHY 模式允许使用全频率(例如对于 166MHz 和分频器 8、它<xmt-block2> 166MHz</xmt-block> 将使用<xmt-block1> 166MHz</xmt-block> 来对抗禁用此选项的 PHY/8)。 166MHz。</s> 166MHz 但它只能用于读取操作、而在任何情况下、写入和擦除操作仍将以分频器的频率进行;
    • 攻击向量由 Flash_norOspiOpen 函数自动写入、因此如果我执行已经调用此函数的工程、则无需在 UART 模式下使用.cfg 文件;
    • 还可以使用 OSPI_phyTuneGrapher 函数显式计算该数据(如我在此处所见) 、我可以尝试运行此函数并比较这些值、然后期望找到类似的值;
    • 然后、这些 OTP 值对具有特定频率和特定温度的特定器件有效、如果这些因素之一发生变化、最好重新进行 PHY 调优。 这意味着、如果我的器件从 30 度开始、是 PHY 调优、然后达到 90 度、则应进行另一次 PHY 调优(我不确定该器件);

    在我看来、我的问题更多地是关于频率而不是 PHY 模式、因为 166MHz 频率在 PHY 模式和 DMA 下似乎出现故障、也可能没有 PHY 模式和 DMA、而 200MHz 和 133MHz 频率始终正常工作。

    我看到您使用的是 S28HS512T 闪存器件、您能告诉我您是计划在混合模式还是统一模式下操作闪存吗? 请参阅以下内容以了解混合模式与扇区模式: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1492859/faq-processor-sdk-am62x-4kb-sector-erase-fails

    我阅读了这篇文章、我认为我们使用的是统一模式、因为我们从未像您在文章中那样设置混合模式。

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    感谢您的等待。 我将回答不正确的部分、如果我没有回答您问题的具体部分、那么这是正确的理解。

    但是、在我看来、它将它们保存在局部变量中而不是闪存中、因此这意味着此算法必须在每次启动时执行(我不确定这部分);

    OTP 值确实保存到局部变量、但也保存到寄存器中。  
    请参阅以下 API: OSPI_phySetRdDelayTxRxDLL

    计算 OTP 后、将调用上述 API 并将 OTP 值存储在寄存器中。 可以在 OSPI_phyTuneDDR 函数本身中找到此流程。

    希望这澄清了你的疑虑。

    但是、它只能用于读取操作、而在任何情况下、写入和擦除操作仍将以分频器的频率进行;

    当 PHY 启用成功时、读取在 166 处发生

    当 PHY 启用未成功或 PHY 模式被禁用时、读取在 166/8 处发生

    在任一种情况下、写入和擦除将在 166/8 处发生。

    攻击向量由 Flash_norOspiOpen 函数自动写入、因此如果我执行的工程已经调用了此函数、则无需在 UART 模式下使用.cfg 文件;

    为此、我首先希望确保您在 Uniform/Hybrid 下操作闪光灯。

    那么、您能告诉我、如果在您的应用的 SysConfig > FLASH 部分中您看到分配给 quirks 函数的一些值吗?

    也可以使用 OSPI_phyTuneGrapher 函数显式计算此数据(正如我在此处所见) 、我可以尝试运行此函数并比较这些值、我希望找到类似的值;

    请在下图的帮助下理解这一点:

    该算法查看最小数量的点来得出关于 OTP 点可能是什么的结论。

    另一方面、图形者绘制了整个图形、因此、这也可用于选择 OTP。 这里的问题是、与 PHY 调优算法相比需要很多时间。 如这里所示、我们对每个组合进行扫描:(4 * 128 * 128)。

    注意:左侧的图形与右侧的图形相同、红点表示经过的点、以得出找到 OTP 的结论。

    无论是否采用 PHY 模式和 DMA、166MHz 频率似乎都无法正常工作、而 200MHz 和 133MHz 频率始终正常工作。

    分频值 4 和 8 是否失败? 如果是,那么它是无法读取制造商和器件 ID(检查 API Flash_norOspiReadId ()) 还是无法计算 PHY 调优?  

    [引述 userid=“531612" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1520539/am2432-sbl-ospi-frequency-at-high-temperature-error/5854324 #5854324“]
    频率(以 MHz 为单位) 时钟分频器 启用 PHY 启用 DMA 结果
    133. 4. 是的 是的 典型工作原理
    133. 4. 是的
    133. 4. 是的
    133. 4. 典型工作原理
    166. 8.
    166. 8. 是的
    166. 8. 是的 是的
    200 4.
    200 4. 是的
    200 4. 是的 是的
    [/报价]

    请填写此表、以便我继续。

    此致、

    Vaibhav