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.

[参考译文] AM6442:TI SDK API 无法按预期运行。

Guru**** 2895600 points

Other Parts Discussed in Thread: AM6442

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1644529/am6442-ti-sdk-api-is-not-working-as-expected

器件型号: AM6442

您好、

我正在使用 TI mcu_plus_sdk_am64x_09_00_00_31、并使用为我的 AM6442 器件生成 Keywriter 二进制文件。 需要从 Keywriter 程序中切换 EMMC 硬件引导分区、我使用了 SDK “MMCSD_enableBootPartition“提供的 API、但在将分区编号传递为 2 时、未启用引导分区 2。 所以我编写了一些函数来读取和写入 EXTCSD 寄存器索引 179 以手动切换引导分区。 附加实现的屏幕截图。 通过这些实现、我能够切换引导分区。 如果实施不正确、请查看并建议进行任何修改。 image.png

image.png

image.png

此致、

Ankur

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

    您好:

    如果我将您的实现与默认的 MMCSD_enableBootPartition 进行比较、则没有看到任何逻辑差异。 您能否与默认 MMCSD_enableBootPartition 共享显示实现工作案例和非工作案例的相关日志。

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

    您好、Prashant、

    如果我正在使用 SDK API、Keywriter 程序大部分时间都会卡住、可能是由于时序问题。 在我的自定义代码中,我有更好的控制,因为我在读写操作后睡觉,它运行良好的每一次。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我使用 SDK API、Keywriter 程序大部分时间都卡住了、

    如何检查设备是否卡住? 您是否使用调试器并发现应用卡在某个位置?

    在我的自定义代码中、我有更好的控制、因为我在读写操作后睡觉、每次都运行良好。  [/报价]

    我不知道这些 R/W 操作。 您能详细说明一下吗?

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

    我已将调试日志放入 Keywriter 应用中、引导时、控制台上仅打印部分日志、然后器件不响应。 必须执行下电上电以恢复器件。 如果我使用 SDK API MMCSD_enableBootPartition、则会发生这种情况。

    由于没有可用于读取 EXTCSD 寄存器内容的 API、我从应用程序中发送 MMC 协议命令 8 来读取 512 字节的 EXTCSD 寄存器、然后解码 179 索引中的位以获取以下参数值    

    位 6:引导确认
    位 5-3:引导启用
    位 2-0:分区访问

    要切换引导分区、我要修改 EXTCSD 寄存器 179 索引中的上述位、方法是从我的应用程序发送 MMC 协议命令 6、然后再次读回以验证更改。 对于活动引导分区、引导使能和分区访问位必须分别具有值 1 或 2。 引导 ACK 始终为 1。 如果使用 SDK API MMCSD_enableBootPartition、 分区访问位为 0(我认为大多数情况下应用程序挂起时只有 1 或 2 次)。 由于此操作处于繁忙的等待操作、因此可能存在时序或同步问题。 如果我使用自定义函数、则应用程序每次都会以所需的输出完成。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在使用 SDK API MMCSD_enableBootPartition 的情况下、 分区访问位为 0(我看到应用程序大多数时间挂起时只有 1 或 2 次)。 由于此操作处于繁忙的等待操作、因此可能存在时序或同步问题。 如果我使用自定义函数、则应用程序每次都会以所需的输出完成。  [/报价]

    但是、我没有看到“manual_set_boot_partition“与默认的“MMCSD_enableBootPartition“之间有任何逻辑差异。 如果有、请列出这些内容吗?

    至于应用挂起、我相信这可能是由 UART 引起的。 如果您使用的是 Keywriter v09.00.00、您能否将 UART 的模式从“中断“更改为“轮询“、并至少每次都要打印日志。

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

    我需要一些时间来验证 UART 相关的更改、但这些更改应该不会影响功能。 EMMC 的分区 1 中有 Keywriter 映像、分区 2 中有 Linux 映像。 输入为分区 2 的 API 调用必须在下一次重新引导时更改引导分区、但每次器件都使用 Keywriter 二进制引导。

    我观察到以下 差异 :SDK API 正在修改寄存器索引 177 以设置引导总线宽度。 调用我的函数后、我额外延迟了 1 秒。

    我想知道、如果使用我们的自定义函数执行相同操作、这会导致任何问题吗? 我们可能会在将来修改我们的 Keywriter 应用以添加更多功能、因此如果我们保持这样的状态、它会对我们有所帮助。 我们只是想查看 Keywriter 应用中所做的更改。 请告诉我使用 SDK 构建定制应用是否正确。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SDK API 也正在修改寄存器索引 177 以设置引导总线宽度。

    这是必需的、因此您在实现中也必须执行相同的操作。

    在调用我的函数后、我额外延迟了 1 秒。

    如果这样能正常工作、那么您可以对默认 SDK 函数执行相同的操作。

    在任何情况下、您都可以继续进行实现、但它也应该修改引导总线宽度、类似于在默认 SDK 函数中修改引导总线的方式。

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

    您好、Prashant、

    我将 UART 配置为轮询模式、并延迟调用 SDK API、现在看到分区正在切换。 但是、我发现多次运行时不一致。 Keywriter 程序会卡入其中。 我正在使用 Teraterm 来查看串行日志、当我断开并连接 TeraTerm 的新实例时、Keywriter 程序运行正常、但如果我在 TeraTerm 的同一实例中运行多个复用次数、Keywriter 程序会出错。 因此、UART 模式可能不是根本原因。 您之前是否遇到过类似的问题?   

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

    您好:

    您之前是否遇到过类似的问题?

    我们尚未在 Keywriter 上下文中测试此类场景。

    Keywriter 程序在两者之间摇摆。

    您能详细说明一下吗? 发生这种情况时、您能否获取日志并共享它们? 如果可能、您能否使用调试器来检查内核卡住的位置?