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:R5 SPI DMA 故障排除

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1185872/am6442-r5-spi-dma-troubleshooting

器件型号:AM6442
Thread 中讨论的其他器件:SysConfig

MCSPI 项目:FreeRTOS R5应用程序将通过 SPI 接口与其他传感器通信。

IPC RP Message Linux Echo :这是与 A53 (MCU_PLUS_SDK_am64x_08_04_00_17\examples\drivers\IPC\IPC_rpmsg_echo _Linux)进行通信的示例应用程序

 

客户已将 IPC RP 消息 Linux 回显集成到 SPI 项目中。  客户有用于 IPC 通信的 UART1、对于 MCSPI 项目 、有2个使用 DMA 模式操作的 SPI 通道(具有 UDMA PKTDMA_0)。 在集成 MCSPI 项目和 ECHO Linux 之后、在 USART1控制台上显示 No (IPC RPMSG ECHO)消息。

 

SPI 通道的操作模式从 DMA 更改为中断后、它们能够在 UART1控制台中获取日志。

 

他们是否需要更改系统配置中的任何引脚配置或任何设置以使 DMA 适用于 MCSPI?

 

带有 DMA 模式的 MCSPI 设置(不工作):

 

具有中断模式(工作)的 MCSPI 设置:

 

IPC UART1设置:

 

控制台日志:

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

    您好、Lawrence、

    我正在处理您的线程。

    请给我一天或两天时间 、以便与您联系。

    此致、

    S.Anil

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

    您好、Lawrence、

    是否可以共享您的项目以进行进一步调试?

    此致、

    S.Anil。

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

    当然可以

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

    您好、Lawrence、

    请共享您的项目以进行进一步调试。

    此致、

    S.Anil。

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

    您好、Swargam、

    很抱歉耽误你的时间。  https://txn.box.com/s/et5qlg3sw9h69guijbdtozxmwnohqqzx 

    如果您在下载项目时遇到任何问题、请告诉我。

    此致、

    劳伦斯

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

    您好劳伦斯,

    我已下载您的软件。

    请允许我给你一些时间。

    此致、

    S.Anil。

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

    您好劳伦斯,

    根据您的意见,客户正在使用两个具有 DMA 模式的 MCSPI 通道,但我在 sysconfif 文件中看到单个 MCSPI 通道+DMA。

    您能否共享使用2MCSPI 通道+ DMA 的实际 sysconf 文件。

    我需要检查它们是如何为2MCSPI 通道分配 DMA 通道的、因为 它们 在 DMA 中而不是在中断模式中遇到问题。

    此致、

    S.Anil。  

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

    您好、Swargam

    已附加配置文件并与具有 DMA 模式的2个 MCSPI 通道共享工程。

    客户 在 IPC rpmsg echo Linux 示例项目的基础上创建了2MCSPI 接口+DMA 模式。 还启用了 UART 日志记录、并将链接器.cmd 文件中的 SRAM 替换为 DDR1。 在创建端点时、这些更改会产生误差。 如果 它们在2个 McSPI 配置上将 DMA 更改为中断模式、则它正在工作。

    e2e.ti.com/.../8321.example.syscfg

    用于2x McSPI 的项目文件

    https://txn.box.com/s/iid9303qcbkcdty4ewvpc9yaaex6syt1

    此致、

    劳伦斯

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

    您好劳伦斯,

    "我需要您的帮助来解决 DMA 通道配置到 MCSPI 或 RTOS 与 Linux 资源分配的问题。

    您的客户需要执行一次测试。 请进行测试、查看 MCSPI 是否正在与传感器通信、而不在项目中集成 Linux RPMSG echo Linux 示例、并共享结果。

    这样、我们就可以轻松地找到 MCSPI 的 DMA 通道分配或 RTOS 与 Linux 的资源分配问题。

    同时、我可以查看您的共享配置文件、并告诉您是否发生了任何错误。"

    此致、

    S.Anil。

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

    您好、Lawrence、

    我查看了您的 SysConfig 文件和软件更改。

    我发现您错过了软件中 MCSPI 通道的 UDAM 初始化。

    我将于明天对硬件进行测试、并分享测试结果和软件。

    此致、

    S.Anil。

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

    您好、Swargam、

    客户在尝试隔离 DMA (等待 UDAM 初始化测试)时的反馈:

    1.我的团队 Hari 和 Prashant 在我们的 BD 项目上进行了 MCSPI 工作,但我没有结果。

    因此、为了隔离问题、我采用了 RP Msg hello 世界示例并启用了 MCSPI DMA 模式来重现问题。 一旦我从 dma 更改为 mcspi 的 Interrupt,就会在 R5中创建“virtio_rpmsg_bus virtio1:创建通道通道”,并从 A53创建通道,我就可以进行通信。

     

                 

     

    使用 DMA 时,我在 R5F 中看不到这些打印内容

     

    2.与上述问题无关的另一个问题:

    当我尝试使用 RPMsg 将大约724字节的大数据从 A53传输到 R5时,我收到错误“消息太长”

                  

     

    根据以下文档、我创建了指向数据的指针并将其发送到各个位置、但仍会出现相同的错误。

     

                 

     

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1130560/am3358-remoteproc-rpmsg-with-large-payload-meta-ti/4402841?tisearch=e2e-sitesearch&keymatch=Can%252527t%252520write%252520to%252520rpmsg%252520endpt%252520device#4402841

     

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1169066/sk-am64-follow-up-question-how-to-read-write-data-with-the-pru_icssg-xfr2vbus-hardware-accelerator/4402839#4402839

     

    从上面的线程看,RPMsg 可以用作内核与共享内存之间的通知服务,并建议使用“rpmsg_char_zerocopy”sharedmemory 示例传输大数据。 我们是否可以使用“rpmsg_char_zerocopy”,或者建议正确的示例,我们可以使用该示例在内核之间复制大数据。

     3.当我在 A53上运行 DDS (每1ms 运行一次)+ RpMsg Linux 应用程序时,会在串行控制台上收到一些警告,并且在某个时间之后,主板不响应。 我必须切断电路板的电源/打开电路板的电源。 已附加日志以供参考。

    此致、

    劳伦斯

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

    您好、Lawrence、

    我将从 Linux RPMsg 方面进行评论。

    RPMsg 和 DMA

    我没有尝试使用不同的 DMA 设置来运行 RPMsg、因此可能缺少一些内容。 但是、RPMsg 不使用 DMA。 Virtio 缓冲器在存储器的某个位置定义、然后执行 RPMsg 的每个内核读取数据或将数据写入这些缓冲器。

    RPMsg 数据包大小

    请注意上面屏幕截图中的"重要使用点":
    "当 Linux 是 IPC 消息交换的一端时、最大 RPMessage 数据包或缓冲区大小为512字节"

    Linux RPMsg 实际上只使用大小为512字节的缓冲区。 因此、无论何时发送或接收 Linux RPMsg 消息、无论您尝试发送多少个字符或位、您都将发送或接收确切的512字节信息。 这与两个 MCU+内核之间的 RPMsg 不同。

    其中的16个字节实际上是一个标头、因此每个 RPMsg 数据包只能发送496个字节的数据。

    如果您的用例需要在 Linux 和远程内核之间发送更多数据、则 rpmsg_char_zerocopy 示例是一个很好的示例。 这定义了一个共享存储器区域、一个内核写入共享存储器区域、然后该内核发送一条 RPMsg 消息、在共享存储器区域准备好读取后通知另一个内核。

    此致、

    Nick

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

    Nick、Swargam、

    对 DMA 用法进行了一些说明。   

    请在下面的 MCSPI DMA 配置中找到 IPC RPMSG Echo Linux 示例:

    1. 如果没有任何 MCSPI,rpmsg 就可以正常工作。
    2. 使用一个 MCSPI+DMA 时、rpmsg 在每个引导周期都工作、但当我们重新启动 R5F 内核(使用停止/启动命令)时、rpmsg 不工作。

     

    1. 使用两个 MCSPI+DMA 时、rpmsg 不会在每个引导周期中工作、当我们重新启动 R5F 内核(使用停止/启动命令)时、rpmsg 也不工作。

     

    1. 使用一个 MCSPI+Interrupt、rpmsg 在每个引导周期和 R5F 内核重新启动时始终工作。
    2. 使用两个 MCSPI+Interrupt 时、rpmsg 在每个引导周期和 R5F 内核的重新启动时始终工作。

    项目文件:  

    https://txn.box.com/s/is3l05ss8wqtpm1gxkm64gkk71132n0r 

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

    您好、Lawrence、

    仔细检查客户的观察结果:

    我想验证这里的内容。 当您说"rpmsg 正在工作"或"rpmsg 不工作"时、您是否只是谈论 RPMsg? 或者您是否在谈论整个示例?

    例如、对于3.您是否这样说:

    1. 使用两个 MCSPI+DMA 时、rpmsg 不会在每个引导周期中工作、但 MCSPI 代码按预期工作。 此外、当我们重新启动 R5F 内核(使用停止/启动命令)时、rpmsg 不工作、但 McSPI 代码按预期工作

    或者、您说的是:

    1. 使用两个 MCSPI+DMA 时、整个示例(包括 rpmsg)不会在每个引导周期中工作。 此外、当我们重新启动 R5F 内核(使用停止/启动命令)时、整个示例(包括 rpmsg)不起作用。

    如果在每个引导周期后 SPI 和 DMA 操作正常、但 RPMsg 是唯一无法正常工作的远程内核功能、这就告诉我们正在进行的操作有什么不同。

    其他调试方法:使用 CCS

    如果 RPMsg 是客户用来了解远程内核的调试方法、请参考此常见问题解答、我们在其中讨论了如何使用 CCS 来观察远程内核上当前运行的代码: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1188177/faq-am62x-am64x-how-to-use-ccs-to-debug-a-running-m4f-core-that-was-started-by-linux?tisearch=e2e-sitesearch&keymatch=faq%3Atrue

    此致、

    Nick

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

    供参考:从 SDK 8.5开始正常关闭

    需要记住的另一点是:从 SDK 8.5开始、我们不支持远程内核正常关闭。 这意味着、如果您使用 STOP 命令关闭远程内核、内核将以未知状态关闭。 因此、有时内核可以重新启动、但有时尝试启动远程内核会使处理器崩溃。

    一般来说、现在最好在将新固件加载到远程内核(或重新加载相同固件)时重新启动整个处理器。

    我们计划在2023年的某个时候为远程内核添加正常关机功能。 我正在仔细检查时间线。

    -Nick

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

    此外、请附加客户的 Linux devicetree 文件  

    在浏览 IPC_rpmsg_echo_linux_am64x-evm_r5fss0-0_freertos_ti-arm-clang-ipcDMATest 后、Linux RPMsg 设置将如我所期望的那样。 但是、我在.c 文件中没有看到任何 McSPI 代码。 我缺少什么吗? 或者、客户是否在此时仅在 SysConfig 设置中启用了 McSPI、而不添加任何代码?

    查看客户用于确保 R5F 和 Linux 之间没有任何冲突设置的 Linux devicetree 文件会很有帮助。

    此致、

    Nick

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

    您好、Nick、

    我正在从客户那里获得更多信息。  目前、这就是他们共享的内容:

    ===================

    您能否确认团队是否能够按照步骤重现问题? 我们只是初始化 UDMA 驱动程序、但尚未使用 MCSPI API (仅更改了 SysConfig)。 在我看来、它看起来像是系统初始化问题、但我们看不到串行上的调试日志来确认 UDMA 初始化是否失败。

     

    一些观察结果:

    • 当我们使用中断模式时、UDMA 驱动程序不会被初始化。 –RPMsg char 设备创建成功

     

    • 当我们在系统初始化期间引入具有 DMA 模式的 MCSPI 时、UDMA 驱动程序将被初始化。  –RPmsg char 设备创建失败

    • UDMA 初始化失败不应阻止 rpmsg_chrdev 通道的创建
    • 这是否与 R5的正常关闭相关联,预计近期将对其进行修复?

     

    >>需要记住的另一点:从 SDK 8.5开始、我们不支持远程内核正常关闭。 这意味着、如果您使用 STOP 命令关闭远程内核、内核将以未知状态关闭。 因此、有时内核可以重新启动、但有时尝试启动远程内核会使处理器崩溃。

    我不认为上面的 msg 在失败的情况下会显示处理器崩溃。  将为其添加更多内容。 此外、如果我们需要捕获处理器的其他状态以进行确认、请告知我们。 供参考该示例显示 EVM、但我们在 am64x-SK 上使用它、这对 SK 上的 RPMsg 示例有何影响?

    ===================

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

    客户对您的问题的其他反馈:

    我想验证这里的内容。 当您说"rpmsg 正在工作"或"rpmsg 不工作"时、您是否只是谈论 RPMsg? 或者您是否在谈论整个示例?

    [客户] rpmsg 正在运行,表示“RPmsg char 设备创建正在运行”,rpmsg_char_simple -r 2 -n 10命令正在运行(在 Linux A53内核上)

    使用两个 MCSPI+DMA 时、rpmsg 不会在每个引导周期中工作、但 MCSPI 代码按预期工作。  此外、当我们重新启动 R5F 内核(使用停止/启动命令)时、rpmsg 不工作、 但 McSPI 代码按预期工作

    [客户]否 我们选择了 MCSPI+DMA 并生成了驱动程序代码,但我们没有 在 应用程序中使用/测试 MCSPI。

    使用两个 MCSPI+DMA 时、 整个示例(包括 rpmsg)不会在每个引导周期中运行。 此外、当我们重新启动 R5F 内核(使用停止/启动命令)时 、整个示例(包括 rpmsg)不起作用。

    [客户]是的,我们只检查了 rpmsg,我们选择了 MCSPI+DMA 并生成了驱动程序代码,但我们没有在 应用程序中使用/测试 MCSPI

    通过 IPC_rpmsg_echo _linux_am64x-evm_r5fss0-0_freertos_ti-arm-clang-ipcDMATest 快速查看后、Linux RPMsg 设置将如我所期望的那样。 但是、我在.c 文件中没有看到任何 McSPI 代码。 我缺少什么吗? 或者、您是否在此时仅在 SysConfig 设置中启用了 McSPI 而未添加任何代码?

    [客户]我们在 SysConfig 设置中启用了 MCSPI、但没有为 UDMA 添加任何应用程序代码。

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

    您好、Lawrence、

    1) 1)我们能否让客户连接到 CCS 中的 M4F 内核以查看程序所在的位置? 我很想知道代码是否悬挂在某个位置、是否处于错误状态等

    有关连接到正在运行的 M4F 内核的更多信息、请访问 :https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1188177/faq-am62x-am64x-how-to-use-ccs-to-debug-a-running-m4f-core-that-was-started-by-linux

    2) 2)我们能否让客户共享他们的 Linux devicetree?

    我们将与 MCU+开发人员核实 SPI + DMA 是否经过测试和支持、并检查他们是否在 Linux 运行时运行了任何测试。

    此致、

    Nick

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

    Kiran、Venkat、Prashant、

    跟进我们今天的讨论。 如果您可以在星期二在您的身边运行此调试、这将有助于我本周晚些时候的讨论。

    步骤1:确保 Linux devicetree 未通过使用不同的 devicetree 文件请求相同的资源  

    当我检查 AM64x SK Linux devicetree 文件时、在 Linux devicetree 文件 K3-am642-SK.dts 中禁用 MCU_spiX 实例。 这很好-如果远程内核正在使用外设、您不希望 Linux 尝试启用外设并使用它。

    但是、根据上面的屏幕截图、您似乎使用的是主域 SPI 而不是 MCU 域 SPI。 如果确实如此、我希望您在未修改的 Linux devicetree 中遇到问题。 我们可以看到 在 K3-am64-main.dtsi 中定义的 MAIN_spiX 实例。MAIN_spi0甚至请求 DMA。 在板级 devicetree 文件  K3-am642-SK.dts 中不会再次引用 MAIN_spiX 节点。

    这就是问题:如果 Linux 定义了资源表节点,即使它在.dtsi 文件中,该节点也是默认启用的。 这意味着 Linux 可能会尝试声明 SPI 实例。 为了防止这种情况发生、我们需要在 Linux devicetree 中显式禁用主域 SPI 实例。

    我已验证所有器件都在使用 RT Linux SDK 8.5。 我要附加的代码是使用该版本的 SDK 创建的。

    请尝试使用此 Linux devicetree、在这里我禁用所有主域 SPI 外设(OSPI 当前仍处于启用状态):

    输出文件: e2e.ti.com/.../k3_2D00_am642_2D00_sk.dtb

    用于自己修改源文件的补丁: e2e.ti.com/.../0001_2D00_disable_2D00_all_2D00_main_2D00_domain_2D00_SPI_2D00_instances.patch

    构建 Linux devicetree 文件的步骤:(不需要内核构建、但必须将编译器添加到路径中。 可以使用默认内核配置): https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_05_00_21/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html 

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

    步骤2:隔离问题是否与 RPMsg 有关  

    如果更新的 Linux devicetree 文件无法修复该问题、我希望我们验证 RPMsg 是否与该问题有关。

    请按照此常见问题解答中的步骤将空资源表添加到 MCU+项目中、而无需启用 Linux IPC。 您仍然看到问题吗?  https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1193620/faq-am62x-am64x-how-to-allow-linux-to-load-m4f-r5f-firmware-by-adding-a-resource-table

    抱歉如果常见问题解答有点粗略、我今天就推出了这份粗略的草稿、让您能够使用。 如果您不熟悉 git epos、可以在 Linux 终端中直接将 CD 放入 MCU+ SDK 的基础并添加到我使用创建的项目中
    Git init (这会创建 git repo)
    Git 应用[patch]

    此致、

    Nick

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

    请求反馈:

    在浏览资源表常见问题解答后:

    1) 1)我对代码的假设是、所有客户对其代码都有某种 git 版本控制、因此所有客户都能够应用 git 补丁。 这似乎是合理的吗?

    2)在初稿中、我将代码作为全新项目提供。 但是、我也可以提供代码、就像对原始 hello_world 项目进行修改一样-在这种情况下、补丁文件将更清楚地显示基本 hello_world 和修改后的 hello_world 之间的差异。 是否有任何关于哪种方法更有效的想法?

    3) 3)是否有其他反馈?

    此致、

    Nick

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

    你(们)好 Nick。

    在修改"Output file: k3-am642-SK.dtb"文件后、仍然禁用   了 Linux devicetree 上的所有主域 SPI 外设、 我们仍然会看到问题、因为 RPMsg 通道未初始化。

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

    意外删除了文各答的回复。 在此处重新发布:

    您好!

    我采用了 helloworld cpp 项目并添加了"examples/drivers/IPC_rpmsg_echo_linux/am62x-SK/m4fs0-0_freertos/ti-arm-clang/linker.cmd"中提到的空资源表、并启用了 IPC RPC 设置并加载。 更改后、我将获得"Hello_World"打印。

    之后、我添加了具有 DMA 的 MCSPI 并进行了编译和测试、这次看不到"Hello world Print"。

    然后、我通过 CCS 加载了 helloword*.out 文件、并在 uDMA init 中将其置为有效。

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

    Venkata、您好!

    总结我们从您的回答中学到的知识

    测试1:禁用 SPI 外设的 Linux devicetree 是否起作用? 否

    测试2:RPMsg 是导致问题还是其他问题? 未 完成。

    我希望您在未启用 Linux IPC/RPMsg 的情况下使用 Linux 加载远程内核、以查看 McSPI 是否可以正常工作。 我的假设是不、RPMsg 不会产生影响。 但是、如果您想确保、您需要遵循方法2版本 A 或 B、而不是方法1。  https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1193620/faq-am62x-am64x-how-to-allow-linux-to-load-m4f-r5f-firmware-by-adding-a-resource-table 

    后续步骤  

    CCS 加载方法中使用的资源管理器配置(rm configs)可能与 Linux 引导时使用的 rm configs 不同。 如果未授予 R5内核对 DMA 的访问权限、则可能会导致问题。 我们将 MCU + SDK rm 配置与 SDK 8.5的 Linux SDK rm 配置进行比较、并将返回给您。

    此致、

    Nick

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

    关于 测试2:RPMsg 是导致问题还是其他问题?

    在同一 helloworld 项目中、我使 Linux 在未启用 Linux IPC/RPMsg 的情况下加载远程内核、然后内核本身不加载。 事件我尝试重新启动时、结果仍然相同。

    内核停止/启动:

    重新启动时:

    当我尝试从 CCS 加载时、在加载时遇到错误:

    添加 Linux A53 IPC RP 消息后、我可以看到内核正在加载。

     

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

    我们尝试了启用"Linux A53 IPC RP 消息"的 Helloworld、并添加了两条具有 PKT DMA 配置的 MCSPI 线路并从 Linux 加载、然后我们看不到任何"Hello World!" 打印。

     

    当在 MCSPI 中从 DMA 更改为中断时、我们将获得调试日志、以下是 DMA 导致问题的原因:

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

    您是否注意到终端输出"无标头资源表"中的那一行? 这意味着资源表在项目中不存在、或者格式不正确。

    请再次尝试按照常见问题解答中的步骤操作。 我在那里发布了一个回复以提供帮助。
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1193620/faq-am62x-am64x-how-to-allow-linux-to-load-m4f-r5f-firmware-by-adding-a-resource-table/4503953#4503953 

    请尝试接近2A 或2B。 如果您无法按照所示添加资源表、请将您的项目附加到 e2e TT 中、以便我们进行审核。

    此致、

    Nick

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

    大家好、  

    我检查了 PKTDMA 和 IPC 源分配的 Linux 和 RTOS 的 rm_c 文件。

    我发现我们为这两者分配了相同的资源。

    我需要与设计团队核实这一资源分配情况、并与我的同事讨论。

    今天,他正在休假,我将在明天与他讨论资源分配问题后更新最终状态。

    此致、

    S.Anil。

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

    您好!

    部分更新:我们仍在对资源分配进行双重检查。 我们将在明天提供更多信息。

    此致、

    Nick

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

    你好 

    我已使用 Linux SDK 二进制文件完成 SOC 初始化、这意味着我当前正在使用 SD 引导模式。

    此外、我还从 MCU+SDK 中获取了 hello world 示例、并添加了一个 MCSPI 以及 UDMA。

    之后、我从 CCS 运行了 hello world 示例、并注意到 UART 控制台显示了调试错误。

    您是否遇到过相同的问题? 很抱歉,我不是 Linux 专家,在 Linux 上加载应用程序可能需要更多时间。

    因此、我决定从 CCS 加载一个示例。

    此致、

    S.Anil。

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

    尊敬的 Anil:

    当我尝试使用 CCS 加载具有 MCSPI_DMA 的 helloworld 工程时、我也在同一位置结束了置为有效。

    我们的用例是从 Linux 引导而不是从 CCS 加载 R5内核。

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

    Venkata、您好!

    总结

    好的、我有 一些好消息:当 Linux 运行时、SPI DMA 可以在 AM64x 上正常工作。

    这是一个复杂问题:我可以让它在2022年初使用硅(SO GP 硅、在 HS-FS 之前)制造的 AM64x EVM 上正常工作。 但是、当我在 AM64x SK 上进行相同的 devicetree 更改时、我会看到相同的 UDMA 问题。 我仍在尝试调试正在发生的确切情况、即阻止应用我的器件树设置。

    详细信息  

    开发人员在 AM64x EVM 上运行 SPI 示例就可以了、因此我尝试复制他。

    测试1:使用修改后的 mcspi_loopback _DMA 项目和未修改的 AM64x EVM devicetree 文件。 发生了与上述帖子中相同的 UDMA 初始化错误。 这是有道理的、因为 AM64x EVM 专门使用电路板 devicetree 文件中的主域 SPI0。

    测试2:在 AM64x EVM devicetree 文件中将 SPI0仅设置为"disabled"并删除关联的 pinmux 设置。 使用修改后的 mcspi_loopback_DMA 项目。 一切都按预期工作。

    后续步骤  

    我现在需要签核工作。 今晚稍后我将尝试重新登录、以继续调试可能发生的情况。 当我重新登录时、我将提供修改后的 MCU+项目和修改后的 devicetree 文件。

    (MCU+项目修改摘要:启用 Linux IPC、添加存储器日志、将调试 UART 从实例0移至实例1)

    此致、

    Nick

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

    Venkata、您好!

    好的、我从其他团队成员那里获得了一些信息。 我没有时间在我的结尾进行测试、但我认为这是正确的:

    HS-FS 器件将内核和器件树二进制文件(DTB)存储在内核拟合映像中(我假设文件系统/boot/目录中的 fitImage)。 有一个名为"boot_fit"的 uboot 环境变量、用于控制是使用 FIT 映像进行 uboot 引导、还是如 SDK 文档 https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_05_00_21/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#installing-the-kernel-image-and-device-tree-binaries 中所述单独的内核和 devicetree 文件

    BOOT_FIT = 1使用 FIT 图像(这是默认值)
    boot_fit = 0从/boot/目录加载 DTB

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

    将在此帖子中附加文件。 我将在下一个帖子中讨论测试程序。

    McSPI 示例项目  

    e2e.ti.com/.../0001_2D00_Initial_2D00_McSPI_2D00_Debug_2D00_project.patch

    e2e.ti.com/.../mcspi_5F00_loopback_5F00_dma.debug.out

    注意:我希望该二进制文件可以从 Linux 中正常加载并正常工作。 但是、由于计算器件树所需的时间很短、我主要通过在电路板启动后连接 CCS 对其进行测试、然后手动将固件加载到 R5F0内核并运行。

    Linux devicetree 文件  

    e2e.ti.com/.../0001_2D00_k3_2D00_am642_2D00_sk.dts_2D00_disable_2D00_all_2D00_main_2D00_domain_2D00_SPIs.patch

    e2e.ti.com/.../1007.k3_2D00_am642_2D00_sk.dtb

    e2e.ti.com/.../0001_2D00_k3_2D00_am642_2D00_evm.dts_2D00_disable_2D00_main_2D00_domain_2D00_spi0.patch

    e2e.ti.com/.../k3_2D00_am642_2D00_evm.dtb

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

    您好、Nick、

    感谢您调试该问题。

    当您提到 测试程序时、请详细说明哪些 MCU SDK 需要应用这些补丁、将这些 DTB 文件放置在何处以及需要随这些补丁一起更改的任何其他文件等

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

    测试程序  

    1) 1)构建 Linux devicetree、将 devicetree 复制到 SD 卡。  

    $ cd /path/to/ti-processor-sdk-linux-am64xx-evm-08.05.00.21/board-support/linux-5.10.153+gitAUTOINC+3eee621d16-g3eee621d16
    // export the path to the build tools
    $ export PATH=/path/to/ti-processor-sdk-linux-am64xx-evm-08.05.00.21/linux-devkit/sysroots/x86_64-arago-linux/usr/bin:$PATH
    // use the default kernel configs
    $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- tisdk_am64xx-evm_defconfig
    // build the modified devicetree file
    $ make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- ti/k3-am642-sk.dtb
    // copy the devicetree file to the AM64x-SK filesystem. In case of SD card:
    // attach to SD card. I placed my SD card partition at /mnt/sdb1
    // rename the original devicetree file
    $ ls /mnt/sdb1/boot/
    fitImage                       Image                       k3-am642-evm.dtb                   k3-am642-evm-icssg1-dualemac-mii.dtbo  k3-am642-sk.dtb  vmlinux.gz-5.10.153-g3eee621d16
    fitImage-5.10.153-g3eee621d16  Image-5.10.153-g3eee621d16  k3-am642-evm-icssg1-dualemac.dtbo  k3-am642-evm-nand.dtbo                 vmlinux.gz
    $ sudo mv /mnt/sdb1/boot/k3-am642-sk.dtb /mnt/sdb1/boot/k3-am642-sk.dtb.orig
    // copy the devicetree binary to the SD card
    $ sudo cp arch/arm64/boot/dts/ti/k3-am642-sk.dtb /mnt/sdb1/boot/
    $ ls /mnt/sdb1/boot/
    fitImage                       Image                       k3-am642-evm.dtb                   k3-am642-evm-icssg1-dualemac-mii.dtbo  k3-am642-sk.dtb       vmlinux.gz
    fitImage-5.10.153-g3eee621d16  Image-5.10.153-g3eee621d16  k3-am642-evm-icssg1-dualemac.dtbo  k3-am642-evm-nand.dtbo                 k3-am642-sk.dtb.orig  vmlinux.gz-5.10.153-g3eee621d16
    $ sudo umount /mnt/sdb1

    2) 2)在 CCS 中或通过终端构建 MCU+项目。

    R5F 二进制文件可使用与 Linux devicetree 相同的方法复制到 SD 卡/lib/firmware/pdk-ipc。

    3) 3)更新 Linux 以指向所需的二进制文件:

    am64xx-evm login: root
    root@am64xx-evm:~# cd /lib/firmware/
    root@am64xx-evm:/lib/firmware# ls pdk-ipc/
    hello_world_no_ipc.out                              ipc_echo_baremetal_test_mcu1_1_release_strip.xer5f  ipc_echo_baremetal_test_mcu2_1_release_strip.xer5f  mcspi_loopback_dma_ipc_logs.out
    ipc_echo_baremetal_test_mcu1_0_release_strip.xer5f  ipc_echo_baremetal_test_mcu2_0_release_strip.xer5f  ipc_echo_baremetal_test_mcu3_0_release_strip.xer5f
    root@am64xx-evm:/lib/firmware# ls
    LICENCE.ibt_firmware      am64x-pru0_0-fw  am64x-rtu1_1-fw        iwlwifi-8000C-22.ucode  iwlwifi-8265-31.ucode              iwlwifi-9260-th-b0-jf-b0-43.ucode  ti-connectivity
    LICENCE.iwlwifi_firmware  am64x-pru0_1-fw  am64x-txpru0_0-fw      iwlwifi-8000C-27.ucode  iwlwifi-8265-34.ucode              iwlwifi-9260-th-b0-jf-b0-46.ucode  ti-pruss
    am64-main-r5f0_0-fw       am64x-pru1_0-fw  am64x-txpru0_1-fw      iwlwifi-8000C-31.ucode  iwlwifi-8265-36.ucode              mcusdk-benchmark_demo
    am64-main-r5f0_1-fw       am64x-pru1_1-fw  am64x-txpru1_0-fw      iwlwifi-8000C-34.ucode  iwlwifi-9260-th-b0-jf-b0-33.ucode  pdk-ipc
    am64-main-r5f1_0-fw       am64x-rtu0_0-fw  am64x-txpru1_1-fw      iwlwifi-8000C-36.ucode  iwlwifi-9260-th-b0-jf-b0-34.ucode  pru
    am64-main-r5f1_1-fw       am64x-rtu0_1-fw  intel                  iwlwifi-8265-22.ucode   iwlwifi-9260-th-b0-jf-b0-38.ucode  regulatory.db
    am64-mcu-m4f0_0-fw        am64x-rtu1_0-fw  iwlwifi-3160-17.ucode  iwlwifi-8265-27.ucode   iwlwifi-9260-th-b0-jf-b0-41.ucode  regulatory.db.p7s
    root@am64xx-evm:/lib/firmware# ln -sf /lib/firmware/pdk-ipc/mcspi_loopback_dma_ipc_logs.out am64-main-r5f0_0-fw
    // you can check where am64-main-r5f0_0-fw is pointing by using $ls -al

    4) 4)重启以确保您添加的 Linux devicetree 实际上已被使用(而不是 FitImage)、并将新的二进制文件加载 到 R5中

    # reboot -f
    
    // press a button on the keyboard during uboot to pause boot and enter the uboot terminal
    //show the current uboot environment variables
    => printenv
    // set boot_fit to use the .dtb and kernel image in /boot directory
    // note this is /boot directory in the root partition, NOT the boot partition
    // the boot partition is the smaller partition with only a couple of files
    => setenv boot_fit 0
    => saveenv
    //double check settings
    => printenv
    // boot
    => boot

    5) 5)从 Linux 端检查内核是否已引导

    am64xx-evm login: root
    // note that the remoteproc number assigned to the core can change between boots
    // so it is best practice to check to make sure you are looking at the right core
    root@am64xx-evm:~# head /sys/class/remoteproc/remoteproc*/name
    ...
    ==> /sys/class/remoteproc/remoteproc0/name <==
    78000000.r5f
    ...
    root@am64xx-evm:~# cat /sys/class/remoteproc/remoteproc0/state
    running
    
    root@am64xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
    // the last time I ran this from Linux I had not yet updated UART output to UART1,
    // so the firmware never finished initializing even though Linux thought it was
    // running. I would expect you to see the SPI test output in this trace with
    // the new attached binary

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

    我使用了 Linux SDK 8.5和 MCU+ SDK 8.5。

    我将开始准备好睡觉。 我将在20-30分钟后再次查看您是否有任何最后一分钟的问题。

    -Nick

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

    如果 Linux trace0未显示任何内容、则没关系。 现在忽略测试的这一部分、只需在 Linux 运行时使用 CCS 将二进制文件加载到 R5中。 如果 Linux 没有尝试初始化 McSPI0、则加载的 CCS 二进制文件应该起作用。 如果 Linux 确实初始化了 McSPI0、则 CCS 将显示您看到的相同错误。

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

    我已尝试下载测试步骤中提到的 SDK。

    但由于办公室的互联网非常糟糕、我无法下载 SDK。

    我已经尝试了机器中已经存在的 RT-Linux SDK。 我在构建它时遇到错误

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

    另一部分更新:

    每次电路板启动时、该 boot_fit 选项都会被覆盖。 现在、如果我们要使用单独的 Linux 和器件树文件、您需要在每个引导周期手动执行 setenv boot_fit 0 (或修改 uEnv.txt 文件、我还没有机会查看该文件)。

    这令人沮丧。 感谢您的耐心等待。 我正在与团队合作、以更好地记录 HS-FS 处理器的默认行为、并推动讨论这是正确的默认行为、还是我们希望在将来的版本中进行更改。

    RT Linux 配置的名称略有不同。  

    尝试$ ls arch/arm64/configs/

    在我的 RT Linux SDK 中、我看到 tisdk_am64xx-evm-rt_defconfig

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

    Venkata、您好!

    我已仔细检查、在上述帖子中连接的 R5F 二进制文件在 Linux 中加载正常:  

    am64xx-evm login: root
    root@am64xx-evm:~# head /sys/class/remoteproc/remoteproc*/name
    ==> /sys/class/remoteproc/remoteproc0/name <==
    78000000.r5f
    
    // ok, remoteproc0 is R5F0_0 for this boot (sometimes it is remoteproc1 instead)
    
    root@am64xx-evm:~# cat /sys/class/remoteproc/remoteproc0/state
    running
    
    // Linux sucessfully initialized the the remote core
    // note that this just means the core was started. It does not mean that the
    // R5F is not in an error state.
    
    // let's check the Debug prints
    
    root@am64xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
    [r5f0-0]     0.003613s : [MCSPI] Loopback example DMA mode started ...
    [r5f0-0]     0.016302s : ----------------------------------------------------------
    [r5f0-0]     0.018609s : McSPI Clock 1000000 Hz
    [r5f0-0]     0.020685s : ----------------------------------------------------------
    [r5f0-0]     0.025885s : Data Width     Data Length     Transfer Time (micro sec)
    [r5f0-0]     0.030394s : 8              128             1148.10
    [r5f0-0]     0.031865s : ----------------------------------------------------------
    [r5f0-0]     0.037061s :
    [r5f0-0]     0.037158s : All tests have passed!!
    

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1185872/am6442-r5-spi-dma-troubleshooting/4514574#4514574

    我找到了一种永久使用/boot/image 和/boot/devicetree.dtb 而不是/boot/fitImage 的方法  

    1)在计算机中、打开 SD 卡的引导分区(较小的分区、而不是我们目前使用的根分区)。

    2) 2)打开 uEnv.txt 文件

    3) 3)编辑 uenvcmd 条目以在每次引导时设置 boot_fit 0。 保存更改。

    uenvcmd=if run check_psdk_setup; then echo "Already setup."; setenv boot_fit 0; else run do_psdk_setup; mw.b ${loadaddr} 0 1; fatwrite mmc 1:1 ${loadaddr} .psdk_setup 1; reset; fi

    请注意、此设置将在 uboot 终端可用后适用、而不是以前。 因此、如果暂停引导并在 uboot 终端中使用 printenv、您应该会看到 boot_fit 设置为1。 然后、在您通过输入"boot"命令继续引导后、uvencmd 将其更改为0。

    后续步骤  

    目前、我没有计划采取任何进一步行动来帮助您。 如果您在使 Linux 与 McSPI UDMA 配合使用时遇到其他问题、请随时在此处发帖。 如果您有其他问题、请创建新的 e2e 主题。

    我将在下周回来更新 e2e 常见问题解答主题。 此时、我将使说明更加清晰、上传更好的补丁文件、并删除 我们有关该主题的对话、因为我认为我们涵盖了该主题中的所有要点。

    此致、

    Nick

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

    感谢 Nick 提供的详细信息。

    我已下载 SDK ti-processor-sdk-linux-am64xx-evm-08.05.00.21并创建了器件树文件"K3-am642-SK.dtb"、并复制到 SD 卡中的/boot 文件夹中、如上面的测试过程"构建 Linux devicetree"中所述。


    在引导提示符下设置 boot_fit = 0、并在 uEnv.txt 中设置以下命令

    uenvcmd=setenv boot_fit 0;否则运行 do_psdk_setup;mw.b ${loadaddr}0 1;fatwrite mmc 1:1 ${loadaddr}.psdk_setup 1;重置;fi


    在 CCS 中加载"mcspi_loopback_dma"并编译和加载
    "mcspi_loopback _dma_am64x-sk_r5fss0-0_freertos_ti-arm-clang.out"。

    我已经加载了上面附加的"mcspi_loopback_dma.debug.out"、并已开始使用它、同时也会获取断言。

    您能否提供最终测试步骤。 正如您提到的、此线程变得笨拙、无法指出确切的工作步骤。

    我们是否可以调用来执行我的设置中的最终测试步骤。

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

    测试 DTB 文件:

    e2e.ti.com/.../8473.k3_2D00_am642_2D00_sk.dtb

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

    =>
    U-Boot SPL 2021.01-g3983bffabc (2022年12月14日- 11:58:15 +0000)
    EEPROM 在80时不可用、尝试在81时读取
    在冷启动时重置以解决 ErrataID:i2331
    正在重置...

    U-Boot SPL 2021.01-g3983bffabc (2022年12月14日- 11:58:15 +0000)
    EEPROM 在80时不可用、尝试在81时读取
    SYSFW ABI:3.1 (固件版本0x0008 '8.5.3-v08.05.03 (Chill Capybar')
    SPL 初始堆栈用法:13424字节
    尝试从 MMC2引导
    MMC 无法发送 STOP 命令
    读取群集时出错
    **无法读取文件 tispl.bin **
    身份验证已通过
    身份验证已通过
    身份验证已通过
    身份验证已通过
    在 ARM64内核上启动 ATF...

    注意:BL31:v2.7 (发行版):v2.7.0至359-g1309c6c805-脏
    注意:BL31:构建时间:2022年12月14日11:49:05
    I/TC:
    I/TC:OP-TEE 版本:3.19.0-15-gd6c5d0037 (gcc 版本9.2.1 20191025 (A 配置文件架构的 GNU 工具链9.2-2019.12 (ARM-9.10)))#1星期三12月14日11:53:26 UTC 2022 Aarch64
    I/TC:警告:此 OP-TEE 配置可能不安全!
    I/TC:警告:请检查 opte.readtheddocs.io/.../porting_guidelines.html
    I/TC:初始化主 CPU
    I/TC:SYSFW ABI:3.1 (固件版本0x0008 '8.5.3-v08.05.03 (Chill Capybar')
    I/TC:Huk 初始化
    I/TC:激活的 SA2UL 器件
    I/TC:为 SA2UL TRNG 器件启用防火墙
    I/TC:SA2UL TRNG 已初始化
    I/TC:SA2UL 驱动程序已初始化
    I/TC:主 CPU 切换到正常世界引导

    U-Boot SPL 2021.01-g3983bffabc (2022年12月14日- 11:53:57 +0000)
    SYSFW ABI:3.1 (固件版本0x0008 '8.5.3-v08.05.03 (Chill Capybar')
    尝试从 MMC2引导
    身份验证已通过
    身份验证已通过


    U-Boot 2021.01-g3983bffabc (2022年12月14日- 11:53:57 +0000)

    SoC:AM64X SR2.0 HS-FS
    型号:德州仪器 AM642 SK
    电路板:AM64B-SKEVM 修订版 A
    DRAM:2GiB
    NAND:0 MIB
    MMC:MMC@fa00000:1.
    正在从 FAT 加载环境... 好的
    IN:串行@2800000
    输出:串行@2800000
    ERR:串行@2800000
    NET:eth0:以太网@8000000port@1
    警告:以太网@8000000port@2 MAC 地址不匹配:
    ROM 中的地址为34:08:E1:80:AD:1D
    环境中的地址为70:ff:76:1e:BD:70
    ,eth1:以太网@800000000port@2.
    按任意键停止自动引导:0
    切换到分区#0,确定
    mmc1是当前器件
    在器件1上找到 SD/MMC
    无法加载'boot.scr'
    在1ms 内读取1671字节(1.6 MIB/s)
    从 uEnv.txt 加载了 env
    正在从 mmc1导入环境...
    正在运行 envcmd ...
    1ms 内读取1个字节(1000字节/秒)
    已设置。
    MMC 无法发送 STOP 命令
    ** FS_devread 读取错误-块
    无法加载'/boot/Image
    **无分区表- MMC 1**
    libfdt FDT_CHECK_HEADER ():FDT_ERR_BADMAGIC
    未配置 FDT 存储器地址。 请进行配置
    通过"fdt addr

    "命令。
    正在中止!
    错误:未找到 cmdline 设备树
    找不到有效的设备树
    =>

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

    Venkata、您好!

    好的、在我们明天的通话之前、这里是要测试的东西。 基本上、我正在尝试使用修改后的 Linux DTB 文件引导您的设置。 一旦工作正常、您就可以开始尝试加载测试远程内核固件。

    步骤1:将 uEnv.txt 恢复为默认设置

    SD 卡应能够开箱即用地进行精细引导。 那么、让我们撤消可能产生影响的所有更改。

    请 从 SD 卡的引导分区中删除 uEnv.txt。 然后、您可以复制 Linux SDK board-support/prebuilt-images/uEnv.txt 中的 uEnv.txt 文件。

    现在、尝试在 uboot 端子中手动将 boot_fit 设置为零。 (请记住、您需要停止引导、并在每次引导时手动执行此更改)。 您是否能够成功加载到 Linux 中?

    setenv boot_fit 0

    步骤2:如果步骤1不起作用、请尝试创建新的 SD 卡映像  

    如果您使用的是未修改的 AM64x SK、以及新的 SD 卡映像、则您的设置和我的设置之间不应有任何差异(假设您的电路板设置为从 SD 卡而不是其他引导源引导)。

    使用 Linux SDK 8.5映像创建新的 SD 卡: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_05_00_21/exports/docs/linux/Overview/Processor_SDK_Linux_create_SD_card.html

    2a)测试 fitImage 的默认引导是否正常

    2b)测试使用 SD 卡上的内核映像和 devicetree 文件进行引导是否正常、方法是在 uboot 终端中手动将 boot_fit 设置为零。 它是否仍然引导?

    2c)现在复制 Linux DTB 文件、然后再次手动将 boot_fit 设置为零。 它是否仍然引导?

    步骤3:了解如何构建 FitImage。 这是一组额外的步骤、因此我的团队成员如果更熟悉 U-Boot、则不建议这样做、除非我们无法使步骤1和2正常工作。  

    https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_05_00_21/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#id14 

    此致、

    Nick

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

    步骤1:将 uEnv.txt 恢复为默认设置

    SD 卡应能够开箱即用地进行精细引导。 那么、让我们撤消可能产生影响的所有更改。

    请从 SD 卡的引导分区中删除 uEnv.txt。 然后、您可以复制 Linux SDK board-support/prebuilt-images/uEnv.txt 中的 uEnv.txt 文件。

    现在、尝试在 uboot 端子中手动将 boot_fit 设置为零。 (请记住、您需要停止引导、并在每次引导时手动执行此更改)。 您是否能够成功加载到 Linux 中?

    setenv boot_fit 0

    [金卡特]
    我已从 SD 卡的引导分区中删除 uEnv.txt。 然后从 Linux SDK 电路板支持/预编译映像/uEnv.txt 复制了 uEnv.txt 文件

    我在引导文件夹下有原始的 K3-am642-SK.dTB 文件。

    在引导提示期间、将 boot_fit 设置为0、并保存 env 值和使用命令 boot 引导的。
    我看到昨天的错误"Could not find a valid device tree (找不到有效的设备树)"。

    (三
    步骤2:如果步骤1不起作用、请尝试创建新的 SD 卡映像

    如果您使用的是未修改的 AM64x SK、以及新的 SD 卡映像、则您的设置和我的设置之间不应有任何差异(假设您的电路板设置为从 SD 卡而不是其他引导源引导)。
    [Venkat]我的设置配置为从 sdcard 引导。

    使用 Linux SDK 8.5映像创建新的 SD 卡: software-dl.ti.com/.../Processor_SDK_Linux_create_SD_card.html
    [Venkat]我使用了 SKAM64x Linux SDK 映像。


    2a)测试 fitImage 的默认引导是否正常
    [Venkat]是的,使用新的 SD 卡映像,从 fitImage 引导正常。
    2b)测试使用 SD 卡上的内核映像和 devicetree 文件进行引导是否正常、方法是在 uboot 终端中手动将 boot_fit 设置为零。 它是否仍然引导?
    [Venkat]在将 boot_fit 设置为0后、未加载 devicetree。 收到相同的错误"找不到有效的设备树"。


    2c)现在复制 Linux DTB 文件、然后再次手动将 boot_fit 设置为零。 它是否仍然引导?
    [Venkat]收到相同的错误"Could not find a valid device tree (无法找到有效的设备树)"。

    (三
    步骤3:了解如何构建 FitImage。 这是一组额外的步骤、因此我的团队成员如果更熟悉 U-Boot、则不建议这样做、除非我们无法使步骤1和2正常工作。
    [Venkat]我正在尝试按照链接中提到的步骤构建 FitImage。 正在构建。

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

    根据我们今天的电话、它看起来像是 SD 卡问题。

    此致、

    Nick

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

    我已修改 uEnt.txt 文件以始终从 Devicetree. 我已经测试了大约20次、大约7次失败、出现了相同的错误"找不到有效的器件树"。 如果是 sdcard 问题、则应始终失败。 预计不会有30%的时间出现故障。 我们是否可以致电以检查此问题?

    我已经使用新的 devicetree 二进制文件测试了 Rpmsg echo Linux (RPmsg+MCSPI-DMA)、它正在加载、日志即将到来。 但是,当我们使用 RPMsg+MCSPI-DMA 加载项目时,在启动期间不会创建 rpmsg 通道。 我明天会再次检查这个问题。

    同时、您能否与我们分享您的"mcspi_loopback_dma.debug"项目。 我们需要将 mcspi 配置与我们的项目进行比较。

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

    Venkat、您好!

    1) 1)是否可以获取一些 SanDisk Ultra 16GB SD 卡进行测试? 我正在对团队进行一些跟进、但看起来我们在 AM64-SK 板的早期版本中遇到了某些 SD 卡品牌的问题。 我还不确定这些问题是否已得到解决、但看起来 SD 卡的品牌始终如一。 这也是我在测试设置中使用的 SD 卡的品牌。

    2) 2)我没有将 RPMsg 代码添加到修改后的 mcspi_loopback _DMA 项目的.c 文件中。 您需要手动将其添加到中。 源代码的差异位于以下帖子中: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1185872/am6442-r5-spi-dma-troubleshooting/4514574#4514574

    此致、

    Nick