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.

[参考译文] AM5728:BareMetal 中的 QSPI 闪存访问

Guru**** 2618835 points

Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662146/am5728-qspi-flash-access-in-baremetal

器件型号:AM5728

您好!

实际上、我希望在裸机情况下使用 JTAG 对 QSPI 闪存执行读写操作。 已在 IDK-AM4377中尝试相同的方法。
在那里、我有了 Starterware、并在他们的帮助下在 CCS 中创建了项目。

您提到的流程是否可以实现相同的功能?
请告诉我同样的情况。

Br、Abhinav

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

    Abhinav、

    我们在 Processor SDK RTOS 中提供的低级驱动程序可用于裸机以及 RTOS 上下文。 为了实现这一点、我们提供了一个名为(OSAL)的操作系统抽象层、该抽象层具有两个版本、一个版本用于 RTOS、另一个版本可用于无操作系统或裸机代码的上下文。

    您可以看到裸机示例中使用的 QSPI 驱动程序、该驱动程序包含在我们为测试电路板功能提供的诊断测试中。 您可以在 PDK 封装的以下位置找到此示例。
    pdk_am57xx_1_0_9\packages/ti\board\diag\QSPI

    此致、
    Rahul

    PS: 用于构建 和运行诊断程序的文档。

    http://processors.wiki.ti.com/index.php/Processor_SDK_RTOS_DIAG 

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

    感谢 Rahul 的答复。

    现在、您能不能帮助我构建相同的器件。
    我正在访问中提到的链接、但 make 命令不起作用。

    所遵循的步骤-

    已将 pdksetupenv.bat 和 Rules.make 复制到 pdk_am57xx_1_0_9\packages/ti\board\diag、并执行了链接中提到的相同操作

    2.已尝试"全部制作"命令。 出现以下错误

    "make"不能识别为内部或外部命令、
    可操作的程序或批处理文件。

    3.然后发现 dir.

    4.移动到 pdk_am57xx_1_0_9\packages/ti\board\diag\QSPI 并尝试执行 make 命令、但仍然出现相同的错误。

    e2e.ti.com/.../logs.txt.txt

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

    make 命令用于 Linux。 在 Windows 系统上,您需要调用 gmake 命令。 如果您执行 gmake all、这将为所有支持的 AM57xx 平台构建诊断。 我建议您使用 pdk_am57xx_1_0_9\packages/ti\board\diag 中的"gmake idkAM572x"来构建特定的评估平台。 这将为该平台 idkAM572x 构建所有诊断测试、包括 QSPI 读/写测试。 如果您只想进行 QSPI 测试、请尝试目录 pdk_am57xx_1_0_9\packages/ti\board\diag\QSPI 中的相同命令。

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

    器件型号:AM5728

    工具/软件:TI-RTOS

    您好!

    我在 C:\ti\pdk_am57xx_1_0_9\packages/ti\board\diag\qspi\src\qspi_diag.c 中使用 IDK-Am5728板和 QSPI 诊断示例
    我的意图是使用实用程序将 MLO 和 u-boot 写入闪存。 将 MLO 和 u-boot 转换为包含大数组的头文件、我将其包含在 QSPI_diag.c 中

    当尝试仅写入 MLO 时、它将写入闪存、并在复位时从闪存引导 MLO (已在 TeraTerm 中打印)。
    但是、当尝试将 MLO 与 u-boot 一起写入时、只有 MLO 正在引导、而不是 u-boot。 使用以下代码写入 MLO 和 u-boot。

    S25FLFlash_BlockErase (flashHandle、blockNumber);
    
    /*以32位字的数量设置传输长度*/
    TransferLength = kSize_MLO;/* MLO 的大小*/
    
    
    /*根据模式更新目标地址。 对于配置模式、通过
    包含闪存偏移值的变量的地址。
    对于存储器映射模式、直接传递闪存偏移值。 *
    addressValue =(QSPI_OPER_MODE_CFG=hwAttrs->operMode )?
    (uint32_t)&addrValue:addrValue;
    
    
    /*更新事务参数*/
    flashTransaction.data =(uint8_t *)&MLO[0];
    flashTransaction.address =地址值;
    flashTransaction.dataSize =传输长度;//以字节为单位*/
    
    /*将缓冲区写入闪存*/
    RetVal = SF25FL_bufferWrite (flashHandle、flashTransaction);
    UART_printf ("MLO 刷写成功! \n");
    
    
    transferLength = kSize_u_boot;
    address 值= kSize_MLO + 1;
    
    flashTransaction.data =(uint8_t *)&u_boot[0];
    flashTransaction.address =地址值;
    flashTransaction.dataSize =传输长度;//以字节为单位*/
    
    /*将缓冲区写入闪存*/
    RetVal = SF25FL_bufferWrite (flashHandle、flashTransaction);
    UART_printf ("U-boot 已成功刷写! \n");
    
    
    SF25FL_Close (flashHandle); 


    请检查这里是否有问题?
    我将 flashTransaction.address 视为偏移量、因此在 u-boot 写入从 MLO 大小更新它的情况下。
    请问这是否有问题?

    Br、Abhinav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Abhinav、

    我们请求您不要打开与同一问题相关的多个主题帖。 您尝试的操作不是支持的用例。 Processor SDK RTOS 中的 MLO 旨在仅加载 Processor SDK RTOS 中提供的 TI RTOS 和裸机代码。 它需要固定的闪存和应用程序存储器布局。

    要加载 u-boot、您需要使用 Processor SDK Linux 并使用该产品中的 SPL 和 uboot。 n`t 针对您尝试实现的混合启动场景测试 SDK。 如果您只是在寻找使用裸机的 QSPI 闪存写入器、我们提供了一个 Fllashwriter 实用程序来将引导加载程序和 RTOS 应用程序写入闪存、请参阅此处的说明:

    processors.wiki.ti.com/.../Processor_SDK_RTOS_BOOT_AM57x

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

    您好、Rahul、

    Okays 只会在这里回复。

    我认为我的上一篇文章不清楚我们要实现的目标。

    此处提供了相关背景信息、以便有助于进一步讨论。

    我的最终目标是使用 CCS 刷写 QSPI

    现在、我在 Linux 平台上安装了 am57xx SDK 和独立的 u-boot 源码。
    为 am572x 编译 u-boot 并使用这些二进制文件(MLO 和 u-boot.img)、能够从 SD 卡引导电路板。
    AM572x SDK 还与诊断应用一起成功构建。  

    使用  QSPI_diagExample_idkAM572x_armv7.out 二进制文件生成、作为构建 qpsi_diag.c 的一部分
    通过 IDK-AM5728板和控制台上的 CCS 加载此二进制文件、即可获得正确的 QSPI 读写打印。

    现在、我所做的是使用 bin2header Linux 开源实用程序将 MLO 转换为十六进制数组。 附加输出文件以供参考(mLO.h).pfA
    已在 QSPI_diag.c 文件中包含头文件、并已进行一些修改、以将此 MLO 阵列写入闪存、而不是模式。
    按照相同的步骤 、通过 CCS 将修改后的 QSPI_diagExample_idkAM572x_armv7.out 二进制文件加载到 QSPI、并观察 Teraterm 上的打印结果。
    QSPI 写入完成后、在电路板上执行热复位、并能够在控制台上看到 MLO 日志、以确认电路板现在正在从 QSPI 引导。
    因为只有 MLO 刷写、MLO 打印件即将推出。

    第二步是按照相同的过程在 MLO 之后使用  qpsi_diag.c 写入 u-boot
    再次创建了 u-boot 的十六进制数组并相应地修改 了 qpsi_diag.c 以在 MLO 之后写入 u-boot。 代码在我的上一个帖子中共享。
    通过 CCS 编译和加载此二进制文件、能够在控制台上查看日志、但当我重置电路板时、只有 MLO 正在引导而不是 u-boot。

    我怀疑 u-boot 未正确写入到闪存中、我的代码发生了变化。我的修改代码中一定会出现一些问题。

    希望这可以解决这个问题。
    作为这种方法的可行性之一,我们已经在 IDK-AM4377上确认了它,我们可以使用闪存写入应用程序在 QSPI 上写入 u-boot,并从那里引导。

    只需检查上一个帖子的代码是否正确即可。

    Br、Abhinav
    e2e.ti.com/.../MLO.h

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

    感谢您的回复。
    问题已解决。 我怀疑是正确的事情、例如 flashTransaction.address。 这是偏移值、给出了错误的值。 当我在路径 include/configs/am57xx_evm.h 下看到 u-boot 源代码时,会提到每个文件的偏移值(如 MLO、u-boot、env.txt)。 U-boot 应写入0x40000。 现在能够从 QSPI 闪存引导。

    Br、Abhinav