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.

[参考译文] RTOS/J6EVM5777:将 SYSBIOS 刷写到 J6EVM 板以从闪存启动代码

Guru**** 2614265 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/647675/rtos-j6evm5777-flashing-sysbios-to-j6evm-board-to-boot-up-the-code-from-flash

器件型号:J6EVM5777
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我正在尝试在不使用 JTAG 和 CCS7的情况下在 J6EVM 评估板上运行 DSP SYSBIOS 源代码。

在过去的几天里、我对 TI 网站和我的项目的 wiki 进行了一些研究。 我在 这个网站上只找到 了一些有关 Jacinto 6评估板中的 Linux 启动的信息。 但这不是我要做的。

我的应用是一个在 DSP 上运行良好的 SYSBIOS 实现、但它只与 JTAG 和 CCS7一起运行。

如何将.out 文件刷写到 DSP 中、以及如何使用闪存中的 ARM A15启动/引导程序?

根据我的理解、ARM A15是主控制器、所有其他控制器是从控制器。 这意味着 ARM A15必须启用 DSP 并将我的编译应用程序从闪存加载到 DSP 中。 是这样吗?

最好提供包含文档或启动指南的示例代码。

此致

Paul

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

    我已将您的问题转交给 TI-RTOS 专家。

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

    您正确理解了 A15是系统的引导主站、负责加载其他内核。

    能否提供有关正在运行的应用程序的更多信息? 具体而言、A15在 DSP 应用程序运行时是否处于活动状态? 如果是、它是在 Linux 或 Android 等高级操作系统上运行、还是也将运行 SYS/BIOS? 或者、A15可能在您的场景中处于空闲状态? 有各种 SDK 可帮助您实现所需的功能、因此我只想确保您的方向正确。

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

    感谢您的快速回复。

    我的项目是一个仅 DSP 项目。 这意味着 A15内核处于空闲状态。 在 DSP 上、我仅使用 SYSBIOS、而不使用 Linux 或 Android 系统。

    现在、我可以在具有 CCS 调试功能的独立模式下在 DSP 上运行代码。 下面是我的详细过程:

    ->为评估板加电
    ->通过 CCS 连接到 A15并运行 GEL 脚本 DSP1SCLKEnable_API
    ->现在、我可以在没有 A15项目的 DSP 上连接并运行我的代码

    在哪里可以找到用于激活 DSP 的 A15的 SYSBIOS 示例代码、以及如何刷写 J6EVM 以在没有 CCS 的情况下运行应用?

    此致

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

    尊敬的 Paul:

    感谢您提供更多信息。  根据您提到的内容、我建议使用 Processor SDK RTOS Automotive、即适用于 RTOS 应用的 DRA7xx SDK。  您可以从 DRA7xx 软件登录页面下载该软件:  

    http://www.ti.com/tool/PROCESSOR-SDK-DRA7X

     

    从这里、我将指向下面的辅助引导加载程序组件 /pdk_dra7xx_1_0_8/packages/ti/boot/sbl_auto。  这是 A15引导应用程序、可处理应用程序对 J6器件上所有或部分内核的加载。  出于您的目的、您可以创建仅限 DSP1的应用程序映像。  支持的引导模式包括 SD、QSPI 闪存和 NOR 闪存。  您可以查看有关如何创建映像的特定说明的文档。

    如果您有任何疑问、请告诉我。

    谢谢、
    斯蒂芬

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

    不确定我上一篇帖子中的格式化发生了什么情况、但在下载页面下方、我还尝试向您指出支持的功能和设备的版本说明:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_Automotive_Release_Notes

    对于此 SDK、我们对 J6/J6EP/J6EX 器件使用 DRA75x 命名约定。 DRA72x 适用于 J6Eco。

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

    尊敬的 Stephen:

    感谢您的出色帮助、我的工作非常出色。 我现在刷写了 QSPI 存储器上的 SBL、并从板上获得了以下消息:

    完成 TDA2Ex SBL BootDPLL 配置
    时钟域配置完成
    模块启用配置完成
    TI EVM 焊盘配置完成
    DDR 配置完成
    应用程序映像下载开始

    制造商 ID - 0x1
    器件 ID - 0x18

    多核映像中的 Magic String 无效
    有效的应用程序映像不可用
     
    (一
    PMCCNTR 每64个时钟周期进行一次计数、每64个时钟周期进行多次计数、以获得实际的 CPU 周期

    SBL 初始配置周期- 65115 (5.20ms)<\r\n\r\n SOC 初始配置周期- 174118 (13.92ms)
    DDR 配置时钟周期- 45747 (3.65ms)<\r\n\r\n 应用程序映像加载周期- 266357 (21.30ms)
    从 Core 启动周期- 14248 (1.13ms)<\r\n>SBL 启动周期- 56667 (45.33ms)
    SBL 启动 IPU1_0 - 40354834的时间 (3228.38ms)
    (一
    正在将 MPU 置于保留状态...

    问题现在、SBL 无法找到应用程序映像。 也许我在闪存过程中犯了一些错误。 我要做的是:

    我在0x0处刷写 SBL、在偏移量0x80000处刷写应用程序映像。 应用程序映像还需要特殊数据、我是否可以在应用程序映像后刷写此数据? 最后、存储器应如下所示:

    0x0         SBL

    0x8000  应用程序映像

    应用程序映像的0xXXXX 数据

     

    0xXXXX... 取决于应用程序映像大小。

     

    谢谢

    Paul

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

    AppImage 是否为格式? 此外、您还需要将其刷写为0x80000 (在一个位置提到0x8000、在另一个位置提到0x80000)。

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

    我测试了 LE 并处于偏移量0x80000处。 我上次的答覆中的抵销是一个书面错误。 两个创建的应用程序映像都不起作用,并且我会得到相同的消息“无效的魔法串”。

    以下是我的 AppImage 的标题:

    BC E7 01 00 00 30 40 4D 53 54 52 01 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 b4 E7 01 00 00 00 00 01 00 00 00

    我也应该以大端字节序编译 ELF 文件吗? 因为这仍然是小端字节序。

    此致

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

    好的、我认为我的应用程序输出文件的字节序是错误的。 我以小端字节序构建应用程序、但无法以大端字节序编译应用程序。 因为 SYSBIOS 不支持 C66的大端字节序。 编译器在 CCS 中返回以下错误:

    "ti.sysbios.family.shared.vayu.IntXbar:不支持目标 C66_big_endian。 .xdchelp"

    我能否以小端字节序启动 AppImage vom SD 卡? 我找不到有关这一点的一些信息。 仅此行:

    "endian (be/LE):指定输出文件是否为大端字节序/小端字节序格式。 对于 QSPI/SPI 引导模式应用程序映像应为、对于其他引导模式、应用映像应为 LE。"

    此致

    Paul

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

    尊敬的 Paul:

    从 SYSBIOS 中、您将仅获得 LE 格式。 然后、您必须使用 tiimage 工具向其添加 GP 标头。

    此工具采用 LE 或作为参数之一。 对于 SD 引导、应使用 LE 作为参数;对于 QSPI、应使用 be 作为参数。

    请查看 SBL 用户指南文档。 它对此进行了详细解释。

    此致、

    Rishabh

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

    您好!

    我找到了我的错误。 我不需要将 bin 文件转换为 tiimage。 MulticoreImageGen.exe 后面的 bin 文件是最终的 AppImage。

    现在、代码已成功加载、并在 cfg 文件中添加了单独的入口点:

    Program.sectMap[".init { boot*(.text)}"]= new Program.SectionSpec();
    Program.sectMap[".init { boot*(.text)}"].loadAddress = 0x80031EC0;

    这行代码为我提供了入口点符号:"_c_int00" 地址:80032000。

    现在、我的应用程序映像已加载、但在 DSP1上不运行。 我只会得到以下返回 "Ping MPU in Retention ..."的结果。 我的应用程序映像仅包括用于 DSP1的我的应用程序二进制文件。 是这样吗? 或者、我是否需要 CPU0的启动代码? 或者是否有必要更改第457行中的 SBL_tda2ex_main.c 文件?

       /*跳转至 MPU CPU0的入口点*/
       if (0U!= sblEntryPoints.Entrypoint[SBLLIB_CORE_ID_MPU_CPU0])
       {
           SBLLibPrintf (SBLLIB_TRACE_LEVEL_IMP_INFO、
                        "\n 跳转到 MPU CPU0应用程序\n");
           UARTWaitUntilTransmitComplete();
           mpuCore0EntryFuncPtr =
               (EntryFuncPtr_t)(sblEntryPoints.Entrypoint[
                                     SBLLIB_CORE_ID_MPU_CPU0]);
           mpuCore0EntryFuncPtr();
       }

    是否必须将 SBLLIB_CORE_ID_MPU_CPU0更改为 SBLLIB_CORE_ID_DSP1 才能启动应用?

    请提供有关最后一点的详细信息/示例。 这一点不是文档的一部分。 此外、ARM A15的示例还将返回不受支持的器件! 所有 DRA7xx 器件。

    此致

    Paul

     

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

    我找到了我的错误。 我不需要将 bin 文件转换为 tiimage。 MulticoreImageGen.exe 后面的 bin 文件是最终的 AppImage。

    现在、代码已成功加载、并在 cfg 文件中添加了单独的入口点:

    Program.sectMap[".init { boot*(.text)}"]= new Program.SectionSpec();
    Program.sectMap[".init { boot*(.text)}"].loadAddress = 0x80031EC0;

    这行代码为我提供了入口点符号:"_c_int00"地址:80032000。

    现在、我的应用程序映像已加载、但在 DSP1上不运行。 我只会得到以下返回"Ping MPU in Retention ..."的结果。 我的应用程序映像仅包括用于 DSP1的我的应用程序二进制文件。 是这样吗? 或者、我是否需要 CPU0的启动代码? 或者是否有必要更改第457行中的 SBL_tda2ex_main.c 文件?

    /*跳转至 MPU CPU0的入口点*/
    if (0U!= sblEntryPoints.Entrypoint[SBLLIB_CORE_ID_MPU_CPU0])

    SBLLibPrintf (SBLLIB_TRACE_LEVEL_IMP_INFO、
    "\n 跳转到 MPU CPU0应用程序\n");
    UARTWaitUntilTransmitComplete();
    mpuCore0EntryFuncPtr =
    (EntryFuncPtr_t)(sblEntryPoints.Entrypoint[
    SBLLIB_CORE_ID_MPU_CPU0]);
    mpuCore0EntryFuncPtr();


    是否必须将 SBLLIB_CORE_ID_MPU_CPU0更改为 SBLLIB_CORE_ID_DSP1才能启动应用?

    请提供有关最后一点的详细信息/示例。 这一点不是文档的一部分。 此外、ARM A15的示例还将返回不受支持的器件! 所有 DRA7xx 器件。

    此致

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

    尊敬的 Paul:

    SBL 解析多核应用程序映像并标识不同内核的入口点。 如果任何内核的应用映像不是多核应用映像的一部分、则该内核的入口点将为0x0。 SBL 将此类内核置于低功耗状态(MPU 时保持)。 sblEntryPoints.Entrypoint[SBLLIB_CORE_ID_DSP1]的值是什么? 根据您的解释、它应该是_c_int00、即80032000。

    您还能详细说明一下"ARM A15正在返回不受支持的器件!"这一点。

    谢谢、此致、

    Rishabh

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

    您好!

    我修改了 SBLLIB_CORE_ID_DSP1的 SBL 源代码、并从 sblEntryPoints.Entrypoint[SBLLIB_CORE_ID_DSP1]返回到正确的入口点地址。 因此入口点地址现在为0x80032000、SBL 跳转到该入口点。

    但代码无法启动或不执行我的应用、因为我无法从应用程序获取 UART 返回值。 我是否必须首先使用 A15主装置启用 dsp1?

    和"不支持的器件!" 问题位于 TI Resource Explorer 的示例中。 我为 A15 (DRA72x)加载 hello world 示例并导入我的工作区。 执行此步骤后、我构建代码并获取"不支持的器件!" 误差。

    此致

    Paul

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

    SBL (在 A15上运行)通过控制模块寄存器将入口点传递给 DSP 来引导 DSP。
    由于这是 DSP 应用的入口点、SBL 不会跳到那里、而是 DSP 将从那里开始执行。
    SBL 引导所有从内核后、它将打印其时序统计信息。
    如果 DSP 不等待 SBL 完成并尝试在 UART 上打印某些内容、则可能会导致 UART 输出错误。

    您能否在引导后尝试使用 CCS 连接到 DSP 并查看其状态?

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

    您好!

    在 SBL 引导后、我使用 CCS 连接到 DSP1、而 DSP 在 main 函数之前在系统初始化内部停止。

    DSP 不执行我的主函数、并且处于冻结状态。

    我这边有什么问题?

    我应该首先在主 CPU 上执行一些代码吗? 如果这是正确的、您能否给我发送一个有关主 CPU 应用的示例。 或者我的 SBL 修改错误吗?

    此致

    Paul

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

    尊敬的 Paul:

    系统初始化函数取决于 DSP cfg 文件。 随着应用程序的启动、SBL 修改看起来不错。
    您能否尝试使用 Vision SDK (www.ti.com/.../PROCESSOR-SDK-TDAX)中的 DSP cfg 文件。 如果仍然不能正常工作、请共享 DSP 应用程序的 cfg 文件。

    此致、
    Rishabh

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

    您好、Rishabh、

    您能否再次发送链接、因为链接不起作用。

    我还可以在 SBL_User_Guide.pdf 中找到有关 DSP 引导地址对齐的信息(请参阅第22页的第13章)。

    这说明了以下几点:

    "DSP 内核的引导地址应与‘0x400’边界对齐。 当 SBL 使 DSP 内核脱离复位状态时、它只能加载启动地址的高位22位、低位10位预计为0。"

    我将我的 DSP 引导地址与'0x800'边界对齐。 这可能不正确。 我现在尝试将"SBL_User_Guide.pdf"示例包含到.cfg 文件中、但我无法包含内存段 DSP1_PROG。

    但首先、我将尝试使用 Vision SDK 中的.cfg 文件。

    此致、
    Paul

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

    链接为:
    www.ti.com/.../PROCESSOR-SDK-TDAX

    (论坛引擎在 Rishabh 的帖子中包含了作为链接一部分的支架)

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

    尊敬的 Paul:

    SBL 用户指南介绍了两种不同的代码对齐方法。 当使用链接器命令文件来指定存储器映射时、使用第一种方法(通常情况下、没有 BIOS/XDC、就无法构建操作系统)。 第二种方法是 BIOS 构建。

    相同的代码是 Vision SDK Dsp1.cfg 文件的一部分:

    /*引导地址需要与0x400对齐*/
    Program.sectMap[".text:_c_int00"] = new Program.SectionSpec ();
    Program.sectMap[".text:_c_int00"].loadSegment ="DSP1_CODE_MEM";
    Program.sectMap[".text:_c_int00"].loadAlign = 0x400; 

    此致、

    Rishabh

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

    e2e.ti.com/.../MyProjectSysBiosConfig.cfg

    您好!

    我执行了 SBL_USER_guide.pdf 中的所有步骤、但它不起作用。 在我之前的一篇文章中、我向您提出了一个有关主 CPU 的问题。

    我通过以下方式创建 AppImage für SD 卡:

    out2rprc my_project.out my_project.rprc

    MulticoreImageGen.exe LE 66 AppImage_LE 8 my_project.rprc

    在这里、您可以看到、我只有一个 DSP 源代码文件。 我是否需要 主 CPU 的启动代码?

    我的.cfg 是附加的。

    此致 Paul

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

    您是否已将 AppImage_LE 重命名为 AppImage?
    您还可以共享 SBL 引导日志。

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

    e2e.ti.com/.../Attachment.7z

    您好、Rishabh、

    是的、我重命名了"多应用程序映像"。 SD 卡内部只有 MLO 和 AppImage。

    我附加了修改后的 SBL .c 文件、用于 SD Boot 的编译 MLO 和 SBL 日志。

    我执行了 SBL_User_Guide 中的所有步骤、但它不起作用。 唯一的区别是、我修改了 DSP 引导的默认 SBL。 因为我有一个仅用于 DSP 的源代码。 在我的权变措施中、所有其他 CPU 都没有源代码。

    我是否需要主 CPU 或其他内部控制器的其他源/启动代码?

    此致

    Paul

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

    尊敬的 Paul:

    我看到了您的更改。 问题在于您修改 SBL 主函数的方式。

    当您调用 SBLLibDSP1BringUp 时、DSP1退出复位状态。

    更改后、A15将跳转到 DSP 的入口点。

    您应该保持 SBL main 不变。 在 DSP 应用中、在 main 开始处添加一个等待、这样 DSP 在 SBL 完成前空闲。 这将防止 DSP 使用 EDMA、UART 等资源、即使在 DSP1启动后、SBL 也可以访问这些资源。

    此致、

    Rishabh

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

    感谢您的回复。

    我现在已将 SBL 文件还原为默认文件并重新编译了它。 现在、我有 SD 卡的默认 MLO。 此外、我在 DSP 源代码的 main (void)(大约6秒)中包含了一个睡眠循环。

    SBL 日志如下所示:

     TDA2Ex SBL 引导

     DPLL 配置完成

     时钟域配置完成

     模块启用配置完成

     TI EVM 焊盘配置完成

     DDR 配置完成

     应用程序映像下载开始

     SD Boot (SD 引导)-文件打开成功完成

     DSP1映像加载完成

     应用程序映像下载完成

    (一

     PMCCNTR 每64个时钟周期进行一次计数、每64个时钟周期进行多次计数、以获得实际的 CPU 周期

     -71289 (1076887816.1毫秒)
     -179985 (1076887816.1 ms)
     -45880 (1076887816.1毫秒)
     -1215259 (1076887816.1 ms)
     -14102 (1076887816.1毫秒)
     -1527605 (1076887816.1 ms)
     -14772 (1076887816.1毫秒)
    (一

     正在将 MPU 置于保留状态...

    我的程序在6秒后不启动 我还通过 JTAG 执行了我的程序、它运行正常。 我希望只能在 UART 上打印。 但 UART 终端仅显示 SBL 日志。 几秒钟(大约1分钟)后、SBL 将重新启动或运行到 CPU 复位中。

    我是否必须等待6秒以上? 或小于6秒?

    此模式是否正确"将 MPU 置于保持状态..." 用于 DSP 启动?

    此致

    Paul

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

    SBL 解析应用程序映像并将所有内核置于其找不到映像的低功耗状态。
    因此、A15将 MPU (即自身)置于保持状态不是问题。
    您能否将 DSP 应用更改为在 OCMC 位置而非 UART 打印处写入特定模式、并查看其是否正常工作。

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

    尊敬的 Paul:

    此外、SBL 必须在3分钟后重新启动。 这是看门狗复位(超时由 RBL 设置)。
    应用程序应禁用或处理看门狗。

    此致、
    Rishabh

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

    您好、Risbabh、

    我也忘记了有关我所做的调试状态的一些信息。

    在 SBL 启动后、我激活了 JTAG。 该程序始终位于 I2C 主设备忙状态内。 这意味着我的程序始终位于 cint 例程内。

    如何解决此问题? 这是.cfg 问题吗?

    此致

    Paul

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

    我不明白 DSP 是如何处于 I2C 主设备忙状态的? 您的应用程序执行 I2C 编程。
    您能否共享您的 DSP cfg 文件?

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

    您好、Rishabh、

    我目前正在使用 PDK 库中的 UART_BasicExample_evmDRA72x_c66xExampleProject。

    但这也不起作用。 我在 main 函数的开头包含了6sec。 如果我查看内部、控制器始终是该地址:

    800471c0   00000020                :i2c.oe66 (.text:I2CMasterBusy)

    我会向您发送.out 文件和示例项目。 我尝试了很多次、但我的输出总是相同的。 该应用程序不会启动并且一直在运行到 I2CMasterBusy 中。

    对于主项目、我需要 i2c、因为我必须在 EVM 上启用 ac31x 编解码器。 如何解决 I2CMasterBusy 问题并使应用程序正常工作?

    此致

    Paul

    e2e.ti.com/.../uart_5F00_BasicExp_5F00_for_5F00_evmDRA72x_5F00_c66x.7z

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

    我再次花了一些时间用于 SBL。 我发现 SBL 实用程序使用的是 i2c。 我想这就是为什么我的程序在 i2cMasterBusy 状态下停止的问题。

    SBL 引导内部是否存在问题?

    此致

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

    尊敬的 Paul:

    似乎还有其他问题、SBL 正在正确加载应用程序。 可能由于其他原因发生 I2C 忙错误。

    若要调试该函数而不是等待、请添加 while 循环

    volatile int wait=1;
    while (wait); 

    使用 CCS 连接到 DSP、然后执行一个步骤。

    此致、

    Rishabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Paul:
    问题不是 SBL。 如果您看到 PC 处于 DDR 中、而 SBL 从 OCMC RAM 执行。 您能否按照建议单步执行并检查 I2C 为何使总线占线?

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

    我使用 while (1)循环管理单步调试。 应用程序位于无限循环内。 很好!

    执行此步骤后、我将环路更改为25秒、并再次执行单步调试过程。 应用程序正在运行到25秒循环中,但在循环之后,应用程序将进入 Board_Init()函数内的 I2CMasterBusy()状态。

    您有什么想法、为什么会发生这种情况?

    您能否向我发送一个处理看门狗 SBL 复位的示例代码。 因为我必须避免应用中的复位。

    谢谢

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

    您的观察证实 SBL 中没有问题。 board_init API 是否需要特定的开关设置?
    您能否尝试查看哪些特定代码行会导致 I2CMasterBusy()调用。
    要禁用看门狗计时器、请调用 WDTIMERDisable (SOC_WD_TIMER_BASE) API。

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

    尊敬的 Paul:

    在原始文章中、您提到您正在使用自定义应用、因此我没有意识到您已切换到使用 PDK 示例。  此外、我不记得器件是 J6Eco、我假设您使用的是 J6。   我对这里的所有游览表示歉意、但我现在理解您在使用 I2C 时遇到的问题。

    SBL 中的焊盘配置序列与 PDK 示例中完成的一些电路板初始化相冲突、这些 PDK 示例通过 CCS 加载提供开箱即用支持。  具体而言、在 SBL 焊盘配置后无法访问 I2C5焊盘、但 PDK 电路板库会尝试写入该总线上的 I/O 扩展器器件、因此它将无限期挂起。  为了使这个特定示例运行、需要一个 tweak。  您可以选择以下任一选项:

    1. 在  SOC_TDA2EX 的 SBL_utils 中调整 CTRL_CORE_PAD_McASP1_AXR0和 CTRL_CORE_PAD_McASP1_AXR1的焊盘配置、  以分别选择 I2C5_SDA 和 I2C5_SCL。
    2. 注释掉 PDK 电路板库中的 Board_ioexpConfig 函数(I/O 扩展器不影响此示例)
    3. 注释掉 Board_ioexpConfig 中 I2C5的使用(它使用0索引、看起来就像使用实例4)。  这个特定的扩展器只影响 McASP 示例应用

    最简单的测试方法是2或3、但1是使应用进入更生产就绪状态时的正确顺序、如果您的应用需要访问 I2C5、则需要1。

    此外、请记住 Rishabh 的所有反馈、作为其他问题的有用提醒(谢谢 Rishabh!)。

    请告诉我您是否能够运行该程序。  然后、如果需要、我们可以查看您还需要做什么、尤其是对于您的应用。

    谢谢、
    斯蒂芬

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

    尊敬的 Stephen:

    感谢您的回答、我获得了成功。 PDK 中的 UART_example 正在使用选项2运行。

    现在、我想切换回支持音频输入和输出的自定义应用。 在此应用中、我使用 McASP 和 AC31x 编解码器。

    正如您说过的、我的支持 McASP 的自定义应用程序在选项2和3中不能正常工作。 我的应用基于 PDK 的 McASP Echo 演示。

    您能详细介绍一下选项1的修改吗? 我尝试了一些修改、但它对我不起作用。 在 SBL_utils_tda2xx.c 中、我找到了 gModuleEnableTable。 我是否必须将所有 PMHAL_PRCM_MOD_I2Cx 排除在它们之外?

    我们正在为我的应用程序提供一种很好的工作方式:)

    此致

    Paul

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

    尊敬的 Paul:

    很高兴听到这对您有用的消息!

    是的、为了使 PDK 音频环回示例正常工作、我们需要探索前面列出的选项1。  要启用此应用、需要对 SBL 进行两次修改:

    1. 如 您所述、修改 SBL_utils_tda2xx.c 中的 gModuleEnableTable。  您不需要排除任何内容、但需要添加条目  
      {PMHAL_PRCM_MOD_I2C5、 PMHAL_PRCM_MODULE_MODE_ENABLED、"I2C5"}、
      

      目前已针对 SOC_TDA2PX 完成此操作、但需要添加此功能才能在 J6Eco 上启用此模块(您可能只需在此条目周围删除 ifdef)

    2. 修改 SBL_utils_tda2xx_iodelay.c 中由'#elif defined (SOC_TDA2EX)'包围的 gPadDelayConfigCommon*表  根据您的器件版本、您需要修改 SR 1.0的_1_0表或 SR 2.0的_2_0表。  如果您不确定自己拥有的是什么、则可以安全地修改这两个文件。  您将需要 I2C5 SDA/SCL 信号(通过 McASP1 AXR0和 AXR1)和 McASP3 ACLKX、FSX、AXR0和 AXR1。   
      /*启用 I2C5 */
      {0x2B4、0x6000A、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_McASP1_AXR0、0xC0107、{N/A}、{N/A}、{N/A}}**/
      {0x2B8、0x6000A、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_McASP1_AXR1, 0xC0107,{N/A },{N/A }**/
      ...
      /*启用 McASP3 */
      {0x324、0x40000、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_MCASP3_ACLKX、0x40107、{N/A}、{N/A}、{N/A}}**/
      {0x328、0xC0000、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_MCASP3_FSX、0xC0107、{N/A}、{N/A}、{N/A}}**/
      {0x32C、0xC0000、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_MCASP3_AXR0、0xC0107、{N/A}、{N/A}、{N/A}}**/
      {0x330、0xC0000、
      {0x0、0、 0}、{0x0、0、0}、{0x0、 0、0}}、
      /**{CTRL_CORE_PAD_MCASP3_AXR1、0xC0107、{N/A}、{N/A}、{N/A}}**/ 

    重建 SBL 后、应用程序应能够访问 I2C5、对 I/O 扩展器进行编程(您需要恢复 PDK 板更改以重新启用此功能)、并对 EVM 上的音频信号进行 McASP3以及对 AIC3106的 I2C1进行编程、 已通过默认 SBL 配置启用的功能。

    如果操作正确、您应该能够通过线路输入播放音频、并通过线路输出收听音频。  最好是输出应连接到一组扬声器、但耳机也应使用较弱的输出信号。

    谢谢、
    斯蒂芬

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

    感谢 Stephen 和 Rishabh、

    SBL 和我的自定义程序从 I2C5补丁开始。 结合 SBL 很难理解 RTOS 功能。

    现在,此主题中的主要问题已完成:)

    最后一件事。 在过去的几天里、我编写了一个 QSPI 闪存读取器。 这基于 PDK 的"main_QSPI_flash_read_write.c"示例。

    现在、我的问题是、它在 JTAG 调试模式下工作、但在 SBL 下不工作。 与 QSPI 和 SBL 是否也存在类似冲突? QSPI_Init 应该正常、但 QSPI_Read 函数始终运行在空闲状态。

    此致

    Paul

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

    很高兴听到应用程序现在按预期工作!

    我不确定 QSPI 闪存读取器程序。 我查看了 SBL 和板库、在焊盘配置方面似乎没有任何配置冲突。

    您能否说明您的程序在何处挂起? 此应用中没有调用 QSPI_READ、但 SPI_TRANSFER 最终会映射到较低级别的读取命令、根据 QSPI 模式(CFG 或 MMAP)、该命令可能运行方式不同。 您能否确认您的 QSPI 设置与示例中的原始设置相匹配、或解释您修改了哪些内容?

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

    尊敬的 Stephen:

    澄清并非如此简单。 有时、程序会独立于 BIOS 的空闲任务挂起、有时它会在 HWI 内部或定时器内部的某个位置挂起。 调试这个东西真的很困难。

    如果没有 SBL、如果我使用 JTAG 加载应用、我可以运行 QSPI_READ 函数。 但有时我也会遇到 JTAG 的奇怪问题。

    我的 QSPI 闪存读取器包含与"MAIN_QSPI_FLASH_READ_WRITE.c"文件相同的函数。 我只是重新安排了示例以使我的用法正常工作。 S25FL256闪存的初始化和读取函数以及所有设置与示例相同。

    此致

    Paul

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

    听起来您的任务处于被阻止状态。 您可以通过查看"Tools"->"RTOS 对象视图"(ROV)、选择"Task"模块并查看"Detailed or CallStacks"视图来确认这一点、它应该告诉您块的原因是什么。

    假设它是一个信标、这可能是因为驱动程序正在请求一个传输、但传输完成中断没有通过。 您是否在修改后的应用程序中正确配置了中断交叉开关?

    如果不是信标、请告诉我您是否可以从 ROV 中找到任何信息、了解哪些信息可能会导致某个位置的调度程序关闭。

    谢谢、
    斯蒂芬