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.

[参考译文] TMS570LS3137:CAN 引导加载程序实现问题

Guru**** 2465890 points
Other Parts Discussed in Thread: TMS570LS3137, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/659548/tms570ls3137-can-bootloader-implementation-issue

器件型号:TMS570LS3137
主题中讨论的其他器件: UNIFLASH

大家好、

我尝试通过 CAN 模块对 HDK 进行编程已有2周、但实际上 、我不理解也不知道如何执行此操作。 我已经看到了一个关于它的应用手册(spna187)并且找到了一些示例代码、但是这个示例是通过使用美国国家仪器公司生产的 NICAN 来解决的、但是我只有 PCAN-USB 模块。 此外 、我无法成功地将代码实施到我的 TMS570LS3137 HDK 项目中。 我是否可以对 PCAN 执行相同的操作、或者是否有人可以使用 PCAN 执行任何示例?  您能否告诉我、在 PCAN 和 HDK 之间实现代码和创建新项目的技巧和重要事项是什么?  

谢谢、

奥古扎罕。

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

    应用手册中的代码可放置在将在目标端执行引导加载程序功能的器件上。 它包括您提到的使用 NICAN 的一些示例源、但您应该能够使用任何第三方工具来执行同样的操作。 重要的部分是对数据包进行底层调整、并按照顺序对器件进行编程。

    器件上的引导加载程序支持特定的命令+数据协议格式、该格式可从连接到同一 CAN 总线的任何外部工具发送。 诀窍是弄清楚如何使用 PCAN 工具执行此操作。 由于我们没有 PCAN 或对其的任何引用、因此我无法说出该工具的使用所需的条件、即使它可以使用也是如此。 所需的是在主机上运行的一些外部软件、这些软件可以支持使用正确的消息 ID、编程命令和要编程的二进制文件中的数据来构建数据包。 我不知道 PCAN 工具是否具有可通过主机端的自定义 C++程序、Pearl 脚本或其他工具访问的 Windows 界面、甚至可能是使用类似 PC 编程或脚本工具执行相同操作的命令行。

    出于好奇、引导加载程序是您的应用的绝对要求、或者您是否正在寻找某种生产编程解决方案? 您是否知道用于在 CCS 之外对 Hercules 器件进行编程的 Uniflash 工具?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    我理解你所说的话,并感谢你解释性地回答。 我想、如果我了解 HDK 侧、我将解决 PCAN 侧问题。 引导加载程序是我的应用程序的绝对要求、因此我想将德州仪器 CAN 引导加载程序的源代码实施到我的 TMS570HDK 中、但我还没有达到执行此应用程序的知识。 我对这个主题没有经验、这是我第一次尝试编写引导加载程序代码、因此我不知道如何使其变为现实、也不知道我必须执行哪些步骤来逐步完成最终操作。 我一直在阅读 TMS570引导加载程序(spna187)的应用手册、但我并不了解其中的所有步骤。 这有点复杂。 执行引导加载程序的基本方法是什么?

    此外、我知道 Uniflash 已安装在我的 PC 上。

    此致、

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

    您好、Oguzhan、

    很抱歉回复太晚了。

    应用手册 SPNA187实际上已经是一个相当基本的引导加载程序。 它的引导代码位于占用第一个扇区的闪存的开头。 在引导时、它会检查更新闪存的条件、如果看到这些条件、则会执行引导加载程序代码。

    引导加载程序代码由 MCU 中的两个主要部分组成。 第一部分是低级闪存编程 API 或驱动程序。 此部件具有功能头、您可以使用这些头来配置闪存以进行编程、并使用来启动闪存操作、例如组或扇区擦除、程序操作、空白检查、程序验证等 这些函数访问闪存包装程序模块中的隐藏寄存器以在硬件级别执行这些操作。 引导加载程序的第二部分是管理层。 该层用于控制程序和数据的流。 这是接收编程、擦除、验证等命令的协议解码所在的层 如果发送的命令是程序命令、则后跟要编程的二进制代码、管理器将跟踪接收到的数据的完整长度并检查必要的 CRC 等以验证传入日期/二进制文件。  

    在 PC 端、您将需要能够通过您选择的任何协议将命令和数据发送到 MCU 的软件。 例如、它将发送编程命令、该命令应具有后跟数据或二进制信息的命令。 系统设计需要确定一次发送和编程多少字节。 这应根据 PC 发送数据的能力以及 MCU 在编程前接收和缓冲传入数据的能力来确定。

    一般来说,所有这些都是相当直接的。 这种复杂情况会让您无法对执行的同一银行进行编程。 在某些器件中、我们有多个组、因此可以轻松地从组0执行程序并将程序编程到组1。 但是、在我们的许多 Hercules 器件上、我们只有一个组、因此需要弄清楚如何对引导加载程序所在的组进行编程。 通过将代码复制到 RAM 并从 RAM 中执行管理器和闪存 API 可实现此目的。

    我们经常遇到的另一个混淆/问题是关于异常/中断向量。 通常、它们位于闪存的开头、但由于引导加载程序和应用程序的分离。 问题是 CPU 希望向量位于闪存的开头、这对引导加载程序操作很好、但随后需要有应用程序的第二条路径。 为了适应这种情况、闪存开头的矢量需要分支到位于第一个扇区之后的应用程序开头(引导加载程序位于第一个扇区中)。

    请告诉我这一概述是否有帮助。 我希望这份高级概述将有助于使应用手册变得更加丰富、因为它为应用手册中讨论的内容提供了背景信息。