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.

[参考译文] TDA4VM:添加了在 SBL 中写入/擦除 OSPI 闪存的功能

Guru**** 2540720 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1003108/tda4vm-add-the-ability-to-write-erase-ospi-flash-in-sbl

器件型号:TDA4VM
主题中讨论的其他器件:UNIFLASH

我,了 SDK 7.2 μ 引导模式:ospi + eMMC;

我,Board_flashRead、Board_flashEraseBlk 成功返回,但当我调用 Board_flashWrite 但它不返回时、程序会在那里挂起我应该如何解决此问题?

代码显示在下面:

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

    您好!

    是否打算仅擦除闪存? 您是否可以使用 UNIFLASH 工具来实现此目的? 如果是、请按照 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/943810/tda4vm-how-to-use-uniflash-easeing-emmc-flash/3514788#3514788上的说明进行操作。 e2e 中提到的步骤是擦除 eMMC、要擦除 OSPI、只需将器件 ID (-d 之后的参数)从4更改为3。

    -e 参数指定要擦除的区域的大小。

    # This will send the flash programmer over UART and then send the sysfw
    dslite.bat --mode processors -c COM7 -f C:\ti\uniflash_5.3.1\processors\FlashWriter\j721e_evm\uart_j721e_evm_flash_programmer_release.tiimage -i 0
    
    # This will erase the OSPI, here size is in Bytes (in HEX)
    dslite.bat --mode processors -c COM7 -d 3 -e 7c0000

    Uniflash 文档: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/07_03_00_07/exports/docs/pdk_jacinto_07_03_00_29/docs/userguide/jacinto/board/uniflash.html 

    此致、

    Karan

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

    这不仅仅是擦除闪存、我想写读取闪存中的某个分区、擦除该分区、然后将新数据写入该分区,、在这种情况下、调用 Board_flashWrite、然后程序在那里挂起。我们确定 Board_flashWrite 函数在 SBL?中工作

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

    您好!

    我从您所附的代码片段中看到、您对 SDK 进行了一些更改。

    您能否在 SDK7.2基础上为我提供您所做更改的补丁?

    此致、

    Karan

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

    根据您的硬件、将 Board_FlashWrite 函数添加到上面的图片中、并测试其是否正常工作。

    谢谢 !

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

    您好!

    您能否提供一个我可以用来在 EVM 上检查您所做更改的补丁?

    此致、

    Karan

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

    diff -git a/modules/pdk_jacinto_07_01_05_14/packages/ti/boot/sbL/src/sb/sbl_sposphi.c b/modules/pdk/pdk_jacinto_07_01_14/packages/ti/boot/sb/sbl_sprispri_01_sprisp_b+/foct+32_priso/k_07x @@+#/f_prisoid/k/k/f_076_ms/i_id_ms/i_cpdk/f_en/k/index_env/k/k/k/ipt/en_076+/p=/p_env/k/k_env/k_c=/k/k_env/k/k/ipt/in/in/in/k/p_01_c=/f_c=/k/k/void_0157.12_pru.pru.ipt/k/k/k/k/f_b.pru.pru.pru./@@ @@-242、10 +243、16 @@ Int32_t SBL_ReadSysfwImage (void **pbuffer、uint32_t num_Bytes) h = Board_flashOpen (Board_flash_ID_MT35XU256ABA1G12、Board_OSPI_NOR_Instance、NULL);#endif + uint8_buL (Board_bumb);0x00 + tb + tb = tb = tend_b (b)、tb = 0x00、tb + tb);tb = tb = tb = tb = 1、tb、tb = 1、tb = 1、tb、tb = 1、tb = 1、tb = 1、tb = 1、tb + 1、tb = 1、tb = 1、tb、 buf、sizeof (buf)、(void *)&writemode);+ SBL_log (SBL_log_ERR、"SBL\n"); #if defined (sim_build)|| defined (SOC_J7200)/*禁用 PHY 流水线模式*/

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

    您好!

    很抱歉、我无法从您的回答中了解差异。

    我认为一个问题是 您使用的 writeMode 应该为1而不是0。 请参阅 pdk*/packages/ti/drv/spi/test/ospi_flash/src/main_ospi_flash_test.c#757和 pdk*/packages/ti/board/src/flash/nor/nor.h#107

    您可以参考 OSPI 单元测试以了解正确的序列。 源代码 pdk*/packages/ti/drv/spi/test/ospi_flash/.

    此致、

    Karan

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

    我将  writeMode 值设置为1、 我测试发现 Board FlashWrite 未正确返回。我参考您说的例程、Board_FlashWrite 未正确返回。

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

    将以下代码添加到 SBL_ospi.c 文件的第249行、并对其进行测试以查看其是否正常工作。

            uint8_t  buf[11]
            memset (buf、 0x00、 sizeof (buf));
            int  writemode =  1、 ret、 sector =  0、 page =  0

            RET =  Board_flashRead (h、 0x1380000、 buf、 sizeof (buf)、 (void *)&writemode);
            if (ret !=  0){
                SBL_log (SBL_LOG_ERR、 "读取 错误\n");
            } 否则 {
                SBL_log (SBL_LOG_ERR、 "读取 成功\n");
            }

            RET =  Board_flashOffsetToSectorPage (h、 0x1380000、 &sector、 &page、 false);
            if (ret !=  Board_flash_eok){
                SBL_log (SBL_LOG_ERR、 "addr error、 ret = %d\n"、 ret);
                回程;  
            } 否则 {
                SBL_log (SBL_LOG_ERR、 "Board_flashOffsetToSectorPage Success\n");
            }

            RET =  Board_flashEraseBlk (h、 扇区);
            if (ret !=  Board_flash_eok) {
                SBL_log (SBL_LOG_ERR、 "擦除 错误、 扇区 = %x、 ret = %d\n"、 扇区、  RET);
                回程;  
            } 否则 {
                SBL_log (SBL_LOG_ERR、 "Board_flashEraseBlk 成功\n");
            }

            SBL_log (SBL_LOG_ERR、 "test\n");
            Board_flashWrite (h、 0x1380000、 buf、 sizeof (buf)、 (void *)&writemode);
            SBL_log (SBL_LOG_ERR、 "SBL\n");
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否取得了任何进展?

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

    您好!

    我们将在明天结束时尝试重现此内容、并就此向您回复。

    任何与 PDK 相关的 diff 共享的示例。 请执行以下操作:

    CD $PSDKRA_PATH/PDK_Jacinto_07_03_00_29
    Git 初始化
    Git 添加。

    上述操作将创建 PDK Git 存储库。

    之后、您可以很容易地为我们提供差分输出:
    Git diff path_to 文件> diff

    并共享它。 这将使我们能够非常轻松地将差分直接应用于测试和重现。

    此致、
    基尔西

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

    您是否取得了任何进展?

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

    您好!

    我将尝试此操作、并在不久后为您提供更新。

    此致、

    Karan

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

    我可以复制此问题、我可以从您的测试中看到以下日志:

    测试后不打印。

    此致、

    Karan

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

    那么、我们如何解决这个问题呢?

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

    是否有任何进展

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

    您好!

    很抱歉耽误您的时间、我将在本周结束前为您提供更新。

    此致、

    Karan

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

    您好!

    您能否从 board_diag_ospi 应用程序获取参考? 它具有写入、读取和擦除闪存的序列。 将其作为应用程序从 SBL 中运行、并且不要将代码集成到 SBL 中、因为这样会增加 SBL 的大小。 我尝试过、但它不适合 OCM RAM。

    使用默认 OSPI SBL、然后将 board_diag_ospi_mcu1_0_release.appimage 刷写到0x100000。

    使用以下工具构建应用程序:

    cd pdk/packages/ti/build/

    使 board_diag_ospi

    源代码:pdk/packages/ti/board/diag/ospi/src/sospi_test.c

    此致、

    Karan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 验证 board_diag_ospi 应用程序是否正常工作?

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

    验证 board_diag_ospi 应用程序是否正常工作?

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

    您好!

    是的、我验证了 board_diag_ospi 与 SBL 一起工作。 请参阅以下日志:

    SBL Revision: 01.00.10.00 (May 29 2021 - 10:39:59)
    TIFS  ver: 21.1.1--v2021.01a (Terrific Lla
    
    *********************************************
    *            OSPI FLASH Test                *
    *********************************************
    
    OSPI NOR device ID: 0x5b1a, manufacturer ID: 0x2c
    
     Verifying the OSPI Flash first page...
    OSPI NOR Flash first page verification Successful
    
     Writing Tuning Data to the Flash
    Tuning Data Programming Successful
    
    OSPI NOR Flash verification Successful
    
    OSPI Flash Test Passed!
    
    
    
    Running OSPI PHY Mode Test
    
    OSPI NOR device ID: 0x5b1a, manufacturer ID: 0x2c
    
     Verifying the OSPI Flash Write and Read with PHY Enabled...
    OSPI NOR Flash Memory Access in PHY mode Successful
    
    OSPI NOR Flash verification in PHY mode Successful
    
    OSPI PHY Mode Test Passed!
    
     All tests have passed

    您可以将测试构建为:

    cd pdk/packages/ti/build

    使 board_diag_ospi

    您可以使用 以下 Uniflash 步骤刷写到 OSPI。 相应地修改路径。

    sudo ./dslite.sh --mode processors -c /dev/ttyUSB1 -f /home/karan/ti/uniflash_6.1.0/processors/FlashWriter/j721e_evm/uart_j721e_evm_flash_programmer_release.tiimage -i 0
    sudo ./dslite.sh --mode processors -c /dev/ttyUSB1 -f /home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/packages/ti/boot/sbl/binary/j721e_evm/ospi/bin/sbl_ospi_img_mcu1_0_release.tiimage -d 3 -o 0
    sudo ./dslite.sh --mode processors -c /dev/ttyUSB1 -f /home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/packages/ti/drv/sciclient/soc/V1/tifs.bin -d 3 -o 80000
    sudo ./dslite.sh --mode processors -c /dev/ttyUSB1 -f /home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/packages/ti/binary/board_diag_ospi/bin/j721e_evm/board_diag_ospi_mcu1_0_release.appimage -d 3 -o 100000
    sudo ./dslite.sh --mode processors -c /dev/ttyUSB1 -f /home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/packages/ti/board/src/flash/nor/ospi/nor_spi_patterns.bin -d 3 -o 3FE0000

    此致、

    Karan