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.

[参考译文] AM625:关于巨型数据标称下载期间的闪存写入问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1589467/am625-regarding-flash-write-issue-during-nominal-download-of-huge-data

器件型号: AM625

您好团队:

MCAL 软件包:  MCAL _SitaraMPU_10.01.00.03

如我们的通话中所述、继续处理我们在上一张票证中的问题(关于将同一内核中的多个 RPRC 文件合并为单个二进制文件的工具 — 处理器论坛-处理器 — TI E2E 支持论坛)、我们创建了该票证。

问题是作为输入给出的数据与从闪存读取的数据不匹配。

您能否告知我们、TI 是否有一个示例验证了 Fls_Write 在超过 1MB 数据上的运行情况。

谢谢你。

此致、

Pradeep R

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

    您好:

    请允许我就此发表意见。

    谢谢、

    Vaibhav

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

    您好 Pradeep、

    目前观察到的行为是读回数据与已知数据不匹配、并且会随机看到一组 FFh。

    您能否请执行以下步骤来验证这是否纯粹是写入或读取问题、因为它肯定不是擦除问题:

    1. 写入 x 字节数、在本例中、写入通常的 1MB 字节。
    2. 现在、在将数据读回 RX 缓冲区之前、暂停并启用 DAC 位、即寄存器 FC40000 的第 7 位。
    3. 在这里、我希望计算完成刷写的偏移量、那么基本上是转到 0x60000000 + WRITEOFFSET、然后检查闪存内容是否中间显示随机 FFh?

    如果启用了 DAC、并且您看到这些随机 FFh、则写入操作未正确执行、读取效果良好。 如果您没有看到随机的 FFh、则这可以归类为读取失败。

    希望这可以澄清需要执行的操作。

    期待结果。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    我们 在 FLS 配置中启用了 DAC 位进行调试、请找到附加的文件 bin.zip application.bin(输入应用程序)和 dump_from_flash.bin(从闪存输出应用程序转储)。

    e2e.ti.com/.../1882.bin.zip

    如果您需要更多信息、请告知我们。

    BR、

    Shubham

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

    您好、

    看一下闪存转储、有一些随机位置的闪存未正确写入、除此之外、我还看到没有写入 32KB 的块。

    请执行以下操作:

    循环 1024 次:
        一次写入 1024 个字节
    这样可确保写入 1 MB
    现在检查闪存区域并查看写入的值是否与应用程序二进制文件匹配。 它应该是理想匹配的 appotronics 测试 1 KB 的写入肯定.

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    作为  application.bin(输入应用程序)的共享 bin.zip 和 dump_from_flash.bin(从闪存输出应用程序转储)、我们已配置为 1024 个缓冲区大小、大小为 1024 个。

    如果可以检查任何内容、请告知我们。

    BR、

    Shubham

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

    嗨、Shubham、

    [引述 userid=“587427" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1589467/am625-regarding-flash-write-issue-during-nominal-download-of-huge-data/6126646

    作为  application.bin(输入应用程序)的共享 bin.zip 和 dump_from_flash.bin(从闪存输出应用程序转储)、我们已配置为 1024 个缓冲区大小、大小为 1024 个。

    如果可以检查任何内容、请告知我们。

    [/报价]

    谢谢、这应该没问题、我们等待 Appotronic 评论他们测试 MCAL INDAC 示例的方式。 好像在没有 SBL NULL/SBL OSPI 的情况下、它们没有独立测试。

    请查看电子邮件、了解他们一方的最新更新。

    谢谢、

    Vaibhav

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

    共享更新的 FLS_delay 和  OSPI_flashExecCmd

     static Std_ReturnType OSPI_flashExecCmd(const CSL_ospi_flash_cfgRegs *pRegs)
     {
        uint32 retry = OSPI_DAC_WRITE_TIMEOUT;
        Std_ReturnType  retVal = E_OK;
    
        volatile uint32 tempCount = FLS_TIMEOUT_DURATION;
    
        if (FLS_TIMEOUT_DURATION > 9U)
        {
            /* Each unit of SW_delay equals to 9 clockcycles, so dividing by 9U */
            tempCount = (FLS_TIMEOUT_DURATION / 9U);
        }
        /* Wait for FSM to to come out of reset */
        do
        {
            if (tempCount == 0U)        
            {
                /* Timeout */
                break;
            }
            MCAL_SW_DELAY(tempCount);
        }while (CSL_ospiIsIdle(pRegs) == FALSE);
    
        /* Start to execute flash read/write command */
        CSL_ospiFlashExecCmd(pRegs);
        
        while (retry != 0U)
        {
            /* Check the command execution status */
            if (CSL_ospiFlashExecCmdComplete(pRegs) == TRUE)
            {
                break;
            }
            OSPI_delay(OSPI_CHECK_IDLE_DELAY);
            retry--;
        }
    
        if (retry == 0U)
        {
            retVal = E_NOT_OK;
        }
    
        if (FLS_TIMEOUT_DURATION > 9U)
        {
            /* Each unit of SW_delay equals to 9 clockcycles, so dividing by 9U */
            tempCount = (FLS_TIMEOUT_DURATION / 9U);
        }
        do
        {
            if (tempCount == 0U)        
            {
                /* Timeout */
                break;
            }
            MCAL_SW_DELAY(tempCount);
        }while (CSL_ospiIsIdle(pRegs) == FALSE);
    
        return (retVal);
     }
     
     static void Fls_delay(uint32 msecs)
     {
         volatile uint32 tempCount = 1000000U * msecs;
    
         /* Each unit of MCAL_SW_DELAY() equals ~9 clock cycles,
            so we scale tempCount accordingly */
         if (msecs > 9U) 
         {
             tempCount = msecs / 9U;
         }
     
         /* Wait for the delay to complete */
         do 
         {
             if (tempCount == 0U) 
             {
                 /* Timeout reached */
                 break;
             }
             MCAL_SW_DELAY(tempCount);
         } while (tempCount > 0U);
     }

    此致、

    Vaibhav

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

    您好 EB 团队、

    感谢 Pradeep 通过电话运行测试。

    摘要(呼叫:2025年11月25日):

    1. MCAL FLS 写入适用于 0.5MB 数据。 正在预填充数据。
    2. MCAL FLS 写入适用于 1MB 数据。 正在预填充值 0、1、2、3...255、0 的数据 1、2… 直到 1 MB。
    3. MCAL FLS 写入不适用于增量编程。 宝马有一些已知的数据被压缩、以 1024 个字节的块接收、然后动态写入这些字节 (1KB)。 比较在随机偏移处不匹配。
      1. 跟踪 1:Pradeep 检查数据是否以与 DDR 类似的方式复制、它是否与原始压缩数据匹配。
      2. 后续步骤 2:如果压缩数据已经以大小为 1 MB 的 TX 缓冲区的形式提供、是否正确写入?

    此致、

    Vaibhav

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

    你好、 Vaibhav Kumar 、

    感谢您的支持和所有反馈。

    通过多次测试、我们发现传递给闪存驱动程序的解压缩数据中存在零星的不匹配。

    闪存驱动程序已正确写入数据、但解压缩的数据在选定位置不匹配。

    我们将检查解压缩部分、如果我们对闪存驱动程序有任何疑问、我们将再次返回。

    此致、

    Pradeep R

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

    您好 Pradeep、

    感谢您的更新。

    此致、

    Vaibhav