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.

[参考译文] TMS570LC4357:以太网 tftp 引导加载程序和 SPI

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683575/tms570lc4357-ethernet-tftp-bootloader-and-spi

器件型号:TMS570LC4357

大家好、

我正在使用以太网协议和 TFTP 在 TMS570LC4357上开发引导加载程序。

系统比这更复杂;它有两个微控制器(两个都是 tms570lc4357)通过 SPI 进行通信。 当接收到以太网引导加载程序命令时、两个都进入引导模式、软件首先写入其中一个、然后写入另一个。

第一个使用 SPI1、第二个使用 SPI3。 在这种情况下、一切工作正常。

发生什么情况:当我首先使用 SPI3写入1、第二个使用 SPI1写入1时、会发生一些异常。 特别是在 tftp Put 请求期间,在某些数据包之后,UP 不再发出确认,而是进入异常(取消定义)。

有人对 SPI 变化如何影响以太网通信有任何建议吗? 由于两个 SPI 的优先级都高于以太网、因此它不是优先级中断问题。

感谢您的关注。

Valentina

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更新:异常是从 Put 请求后发出的 Get 请求生成的。 实际上、阻止该过程的原因是在 Put 请求期间不会向数据包发送 ACK。 对于发送的第一个数据包、一段时间后(数据包数量并不总是相同)、该数据包丢失。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Valentina、

    我不确定我的理解是否正确:
    系统中的1.2 MCU (LC43x)、它们通过 MibSPI 相互通信
    2. MCU1通过 TFTP 引导加载程序下载代码
    3. MCU1使用 MibSPI 将代码传输到 MCU2

    如果 MCU1使用 SPI1向 SPI 从站写入数据、而 MCU2使用 SPI3向从站写入数据、则 tftp 引导加载程序正常工作
    但是
    如果 MCU1使用 SPI3向 SPI 从站写入数据、而 MCU2使用 SPI1向从站写入数据、则 tftp 引导加载程序停止工作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Qj Wang、
    感谢您的回复。 是的、您的理解是正确的。 尤其是在工作条件下、UP1是主器件、使用 SPI 1、而 UP2是从器件、使用 SPI3。 当我尝试交换这两者的角色时、会出现错误。 在我的软件中、更新过程分为两个步骤:首先使用 tftp 写入 UP1、然后使用 SPI 写入 up2。我无法解释的是、为什么仅使用 tftp 时会发生错误。
    谢谢
    Valentina
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    王先生、您好!

    我有一些更新:我做了一些测试、似乎问题是在 TFTP Put 请求期间微控制器缺少一些数据消息接收。 发现这一点后、我尝试解决了在 HMI 中进行一些更改的问题;当一段时间后、HMI 不接收来自微控制器的 ACK 信号时、它会再次发送相同的数据包。 通过这种方式、我可以成功完成 Put 请求。

    关键是我的软件在写入所有第一个微控制器存储器后、必须验证重新读回所有存储器的过程、并通过 TFTP GET 请求重新发送所有数据。 在该配置中、我遇到了相同的问题:微控制器缺少一些确认消息并停止发送数据。 不幸的是、我还没有在我的软件中修复此问题、而且我需要弄清为什么所有这些都只发生在配置已定义的 SPI (SPI3)而不使用另一个 SPI (SPI1)。

    您认为它可能与中断优先级有关吗? 或与 SPI 的物理方式相关的东西? (我指的是其中一个 SPI 可以具有多个 SIMO/SOMI 引脚、而另一个不能具有)。 我还想了解问题是否可能来自另一个微控制器。

    我可以做的任何测试线索都值得赞赏。

    谢谢。

    Valentina

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    王先生、您好!
    感谢您的回复。 是的、在我的系统中有2个 MCU (LC43x)。 他们使用 SPI 与其他人进行通信。 MCU1是主器件、而 MCU2是从器件。 使用 tftp 对 MCU1进行编程、使用 SPI 对 MCU2进行编程。
    如果我使用 MCU1作为 SPI1的主器件、使用 MCU2作为 SPI1的从器件、则一切都正常。
    如果我使用 MCU1作为 SPI3的主器件、使用 MCU2作为 SPI3的从器件、则 tftp 编程过程会停止、因为 MCU1不会接收所有以太网消息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    王先生、您好!
    我执行了另一个测试来验证中断优先级问题:我使用函数 vimChannelMap 将 Rx 以太网中断从索引79移动到索引37;viversa 我使用同一函数将 mibspi3HighInterruptLevel 从37移动到79。 结果是:没有改变;微控制器仍然丢失一些以太网消息。
    目前我不知道这种行为的原因还有什么。
    谢谢。
    此致
    Valentina
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Valentina、

    我希望你们已经解决了这个问题。 我看不到 SPI3导致 EMAC 数据包丢失的任何原因。 我运行 LWIP 演示、SPI3同时将数据传输到另一个 SPI、但未看到丢失的数据包。 我使用 Ostinato 到 TX/RX 数据包。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    感谢你的帮助。 我实际上没有解决我的问题;我对 SPI1和3运行了更多的测试、我注意到两种情况下都缺少数据;使用 SPI1时、会更频繁地发生。  

    除了我的软件之外、还可以:  

    1.初始化 SPI 和 EMAC

    2.开始在 SPI 上通信以检查与另一个微控制器的连接

    3.暂停此通信并开始与 PC 进行以太网通信

    4.以太网通信完成后,重新启动 SPI 通信

    丢失数据错误发生在步骤3中。  

    谢谢你。

    此致

    Valentina

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

    因为我无法重现此问题、所以我想先关闭此主题。