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.

[参考译文] TMS320F28379D:将 controlCARD 上的 SW1倒置安装

Guru**** 2587365 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE, TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down

器件型号:TMS320F28379D
Thread 中讨论的其他器件:controlSUITEC2000WARE

在尝试使用 TI 实用程序 serial_flash_programmer 和示例程序 F2737xD_sci_flash_kernels_cpu01将闪烁示例程序编程到 controlCARD 上的闪存之后、我已经超过了我的领先水平。 我使用的是 C2000ware v4.01和最新的 controlSUITE。

今天、我运行了主题为"TMS320F28379D:F2837xD controlCARD SW1文档显示错误"的论坛主题40934。

问题1:我有一个 controlCARD 1.3版、其中 SW1安装反向。 如果我正确解释了引用的线程、为了在尝试 SCI 引导模式时获得正确的行为、我应该将开关位置视为开关安装在右侧上方。 是这样吗? 要问另一个问题、我是否应该将位置1视为位置2、反之亦然、并且应该将 ON 解释为 OFF?

问题2。 我没有对 serial_flash_programmer 实用程序进行任何更改。 我在一个位置更改了源文件 F2837xD_sci_flash_kernels_cpu01.c、将参数 SCI_boot_alternate 传递给函数 SCI_GetFunction、以便将 GPIO 28和29用于 SCI-A Rx 和 Tx。 当我从菜单中选择 DFU CPU1时、程序会报告"发送函数数据包时出现 NACK 错误..." 请按 Ctrl-C 中止"。 无论我是将 SW1上的开关设置为与 controlCARD 手册中的表2相匹配、还是选择相反的设置、都会发生这种情况。 为什么会发生这种情况、如何解决?

问题3:我找到了一个名为 flash_programming_cpu01的 C2000ware 示例程序。 这看起来与 F2837xD_sci_flash_kernels_cpu01非常相似、不同之处在于在 main()末尾、它对函数 EraseFlashSector 和 ProgramFlashSector 进行了显式调用。 我是否正确地假设该程序的工作方式与 F2837xD_sci_flash_kernels 类似、并且添加了在初始化自身后立即执行 DFU CPU1操作的特性、而用户不必显式请求 DFU CPU1操作?

当我在 serial_flash_programmer 的-k 选项中运行该程序时、它将菜单显示为 F2837xD_sci_flash_kernels_cpu01、而不显示错误消息。 但是、当选择 DFU CPU1菜单选项时、它会生成与上述相同的 NACK 错误消息。  因此、无论 SW1开关是如何设置的、也无论为 serial_flash_programmer 实用程序选择了哪个闪存编程程序、这种行为看起来都是一致和可重复的。

您能帮助我使这种工具组合正常工作吗?

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

    Thomas、我可以为您提供 Q1方面的帮助。 如果您有电路板的图片、我将不胜感激。

    如果开关倒置、则位置1和2将相反。 此外、如果指南建议"向上"、则意味着向下...

    • 让我们假设指南显示"Position 1 Down"、您应该将 Position 2向上。
    • 如果导板建议打开或关闭、则不应将其反转、例如、如果其显示"位置1打开"、则将位置2打开。

    我的同事应该帮助解决其他问题。

    此致、
    Cody  

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

    Thomas、  

    对于 Q2 -请参阅闪存内核常见问题解答的 F2837x 部分应用手册: https://www.ti.com/lit/an/sprabv4e/sprabv4e.pdf 

    这为您提供了有关如何使用 serial_flash_programmer 实用程序在 F2837xD 控制卡上运行闪存内核示例的分步说明。  

    对于 Q3 -这个示例演示了闪存 API 的使用、不打算将其传递到 serial_flash_programmer 的-k 参数中。  

    谢谢、

    Anu

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

    Cody 或 Anu -

    根据我所能知、sci_flash_kernels 示例程序无法指定应对哪个闪存扇区进行编程。 示例程序 FLASH_programming 可以、但它是硬编码的、用于对闪存扇区 B 和 C 进行编程。它对闪存进行编程时没有什么用处。 这两个项目似乎都简单地演示了闪存 API 的使用。

    TI 是否有现成的实用程序、该实用程序使用具有闪存内核 B 的 serial_flash_programmer 对 F2837xD DSP 上的指定闪存扇区进行编程、而无需用户从闪存内核 API 示例构建自己的闪存扇区?

    在找不到任何内容后、我已经根据示例程序 FLASH_programming 创建了一个新的 CCS 项目。 我将其命名为 program_flash_sector。 我的程序通过硬连线对特定的闪存扇区进行编程。 通过定义 名为 EraseFlashSector 和 ProgramFlashSector 的函数、我重新将示例代码考虑在内。 扇区选择基于枚举列表。 枚举用于查找扇区地址。

    当我运行此代码以对 CPU1闪烁的 controlCARD 示例项目进行编程时、会显示消息"Nack Error with sending the Function Packet (发送函数包时出现 NACK 错误)"。 很明显、我做了一些错误。 您能告诉我在我的实施中造成了问题的原因吗? 或者我的整个方法可能有缺陷。

    我想上传源代码、而不是在我的回复中嵌入冗长的源代码。 我尝试使用您的论坛插入文件工具执行此操作、但它不允许我上传 ZIP 文件。 我的 ZIP 文件包括 CCS 项目和 Windows 批处理文件、用于封装发送到 serial_flash_programmer 实用程序的参数。 请告诉我为您提供这些文件的最佳方式。

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

    Thomas、  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4191644 #4191644"]根据我可以知、sci_flash_kernels 示例程序无法指定应编程的闪存扇区。 [/报价]

    正确、闪存内核没有指定要编程的扇区的方法。 这由应用程序的链接器命令文件确定。 您的应用程序将被写入您在其链接器命令文件中将应用程序分配到的任何扇区。  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4191644 #4191644"]示例程序 flash_programming 确实如此,但它是硬编码的,用于对闪存扇区 B 和 C 进行编程。它对闪存中没有什么有用的程序。 两个项目似乎都简单地演示了闪存 API 的使用。[/quot]

    这是特意设计的、正如您所说的、本示例旨在演示闪存 API 的使用、而闪存内核示例用于执行固件更新。  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4191644 #4191644">当我运行此代码以将 controlCARD 示例项目闪烁至 CPU1时、会显示消息"Nack Error with sending the Function Packet (发送函数包时出现 NACK 错误)"。 很明显、我做了一些错误。 您能告诉我在我的实施中造成了问题的原因吗? 或者我的整个方法可能有缺陷。[/引述]

    你将什么命令传递到 serial_flash_programmer 中、你将什么命令传递到 k 和 a 参数中? 您是否尝试按照我在上一次答复中链接的应用手册中指定的方式运行示例?

    讨论完这些主题后、我们可以尝试查看源代码。  

    Anu

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

    Anu 和 Cody -

    感谢您的回复。 现在、我更好地了解了 FLASH_programming 示例代码和 serial_flash_programmer 的预期用途。

    我的最终目标是能够将3个相同的十六进制文件复制到3个不同的闪存扇区。 启动加电时、引导加载程序将验证3个副本的比较校验和、并仅在所有3个副本匹配时继续。 然后、引导加载程序将十六进制文件从主闪存扇区复制到 RAM 中并开始在 RAM 中执行。

    由于扇区只能在十六进制文件中指定、而不能在闪存编程应用程序中指定、我看不到如何使用 serial_flash_programmer 实现我的目标。 它可以对引导加载程序进行编程、但不能安装要复制到 RAM 并从 RAM 执行的3个十六进制文件副本。

    回到我的简单练习、演示我可以让 serial_flash_programmer 将设计为从闪存运行的十六进制文件复制到由其链接 cmd 文件指定的扇区中: 我正在尝试将 controlCARD 的闪烁示例程序的闪存构建配置编程到闪存扇区 C、如链接 cmd 文件中指定的那样。 该命令从保存构建产品的 blinky 工程 CPU1_FLASH 文件夹中执行。 传递给 serial_flash_programmer 的参数为:

       d f2837xD
       -k ..\targetConfigs\F2837xD_sci_flash_kernels_cpu01.txt
       a .\blinky_cpu01.hex
       -p COM4.
       -v

    当我从选项菜单中选择选项1 DFU CPU1时、响应为 NACK 错误、发送函数 Packet... 请按 Ctrl-C 中止。

    正在将.blinky_cpu01.hex 下载到器件... 校验和不匹配... 请按 Ctrl-C 中止。

    您是否需要任何其他信息?

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

    Thomas、

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4194138 #4194138"]由于限制只能在十六进制文件中指定扇区、而不能在闪存编程应用中指定扇区、因此我看不到如何使用 serial_flash_programmer 实现我的目标。 它可以对引导加载程序进行编程、但不能安装要复制到 RAM 并从 RAM 执行的3个十六进制文件副本。

    对于您的特定实现、您可能需要创建自定义主机程序。  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4194138 #4194138"]

    回到我的简单练习、演示我可以让 serial_flash_programmer 将设计为从闪存运行的十六进制文件复制到由其链接 cmd 文件指定的扇区中: 我正在尝试将 controlCARD 的闪烁示例程序的闪存构建配置编程到闪存扇区 C、如链接 cmd 文件中指定的那样。 该命令从保存构建产品的 blinky 工程 CPU1_FLASH 文件夹中执行。 传递给 serial_flash_programmer 的参数为:

       d f2837xD
       -k ..\targetConfigs\F2837xD_sci_flash_kernels_cpu01.txt
       a .\blinky_cpu01.hex
       -p COM4.
       -v

    [/报价]

    我建议使用 C2000Ware_4_01_00_00\utilities\flash_programmers\serial_flash_programmer 文件夹中的文件。 f2837xD_FW_upgrade_example 具有一个 F2837xD_sci_flash_kernels_cpu01_alt.txt 文件、该文件使用 GPIO 引脚28和29构建、用于 SCI 通信、这正是我们使用控制卡时所需的。 您还可以使用 blinky_dc_cpu01.txt 作为应用文件、它将与128位边界对齐、这也是使用闪存内核执行固件升级时所需的。 从此目录运行 serial_flash_programr.exe。 在使用 serial_flash_programmer 之前、请务必按照应用手册中的指定设置控制卡。  

    谢谢

    Anu

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

    Anu -

    我使用 GPIO 84和85 (选项1)而不是 GPIO 28和29 (选项2)来实现 SCI-A 的原因有多种。 我不想通过 USB 端口对闪存进行编程、GPIO 28和29连接到 USB 端口。 我正在使用 controlCARD 为我的客户的专有 PC 板构建闪存编程原型、该板设计为使用 GPIO 84和85、不提供使用 GPIO 28和29的选项。 我同时也在研究 Elprotronic FlashPro2000闪存编程器的使用、根据供应商的说法、它只在 GPIO 84和85上工作、这可能是出于同样的原因、GPIO 28和29连接到 USB 端口。 我是否有任何理由不应在 TI controlCARD 上使用 GPIO 84和85?

    感谢您提供有关128位对齐的信息。 我查看了 blinky_dc 项目、发现 DC 代表双核。 我们目前没有理由使用 CPU2、此时我不想增加这种复杂程度。

    我导入了项目 binky_dc_cpu01。 我发现它使用的链接文件2837xD_Flash_Sector_CPU1.cmd 与 blinky_cpu01相同、其中包含指令 align (8)、我理解这意味着64位内存对齐。

    我修改了闪烁应用程序、方法是使用我自己修改的链接 cmd 文件、该文件通过使用 align (16)指令代替 C2000ware 版本中的 align (8)指令来设置128位内存对齐。 它仍会生成与我之前引用的 NACK 和校验和错误消息相同的消息。 我是否需要采用不同的方法来分配128位内存对齐?

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

    Thomas、  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4195708 #4195708"]我是否有任何理由不应该在 TI controlCARD 上使用 GPIO 84和85?

    请参阅以下应用手册的屏幕截图:

    上一屏幕截图中引用的勘误部分:  

    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4195708 #4195708"]我是否需要采用不同的方法来分配128位内存对齐?

    对于 C28x 内核、align (8)是128位对齐、而不是64位对齐。 您应该按照修改链接器命令文件。  

    谢谢

    Anu

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

    回复:controlCARD 上 SCI-A 的 GPIO 引脚分配。 我阅读了与 TI controlCARD 和针对 controlCARD 的串行闪存编程相关的所有文档。 我有1.3B 版电路板、在您提供修订版 B 链接之前、我唯一能够找到的手册是电路板1.3A 版的手册。 我发现这两个修订本在这个问题上没有实质性的区别。

    我注意到应用手册 C2000微控制器串行闪存编程于2019年发布、TI controlCARD 1.3B 版用户指南于2022年6月修订。 如果 Rev B controlCARD 的限制是仅可在 SCI 引导模式下使用 GPIO 28和29、为什么没有说明这一点? p4注释中针对所有 controlCARD 的语言意味着可以使用 GPIO 28和29或 GPIO 84和85。 A:SW1位置2的说明未明确说明断开 USB 接口的影响。

    阅读完所有这些内容后、 您似乎在说控制卡上提供到 SCI-A 的唯一 GPIO 连接是通过 FTDI US 转串行芯片- GPIO 84和85无法连接到 SCI-A、如果 A-SW1位置2设置为绕过 FTDI USB 转串行芯片、 然后 SCI-A 和 GPIO28 & 29之间的任何连接被移除。 换言之。 连接到 SCI-A 的唯一选择是通过 USB 连接器、在不禁用任何和所有到 SCI-A 的 GPIO 连接的情况下、不能绕过 USB 连接器

    这将是一个严重的限制。 它还与这样一个事实相冲突:通过底座板连接到 GPIO-84和85时、与 Elprotronic 一起使用其 FlashPro2000适配器对闪烁信号进行编程是可行的。 如果成功、当使用 serial_flash_programmer 应用程序时、我应该可以使用 GPIO 84和85连接到修订版1.3B controlCARD 上的 SCI-A。

    回复:第二个主题、128位对齐:我的 CPU1闪烁项目副本在提供的链接 cmd 文件2837xD_FLASH_lnk_cpu1.cmd 中已有 align (8)说明符。 您曾说过我必须使用 blinky_dc 来获得128位对齐、因此我认为 align (8)指令用于64位对齐。同样、我能够使用 align (8)指令和 FlashPro2000对 blinky 生成进行编程。 我无法在任何文档中找到对 ALIGN 指令的良好描述、包括 George Mock 提供的用于方便高效存储器使用的高级链接器技术文档。 我已恢复 cmd 文件中用于 blinky 的 align (8)指令。

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

    Thomas、  

    对于您的 controlCARD 特定问题、 是更好的回答者。

    关于128位对齐、很高兴 align (8)已存在、但链接器命令文件有时并非如此。 如果已经对齐了128位、则可以使用闪烁示例。  

    Anu

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

    3天前又回到我的帖子...

    回复:我的简单练习演示了我可以让 serial_flash_programmer 将设计为从闪存运行的十六进制文件复制到由其链接 cmd 文件指定的扇区中: 我正在尝试将 controlCARD 的闪烁示例程序的闪存构建配置编程到闪存扇区 C、如链接 cmd 文件中指定的那样。 该命令从保存构建产品的 blinky 工程 CPU1_FLASH 文件夹中执行。 传递给 serial_flash_programmer 的参数为:

       d f2837xD
       -k ..\targetConfigs\F2837xD_sci_flash_kernels_cpu01.txt
       a .\blinky_cpu01.hex
       -p COM4.
       -v

    当我从选项菜单中选择选项1 DFU CPU1时、响应为 NACK 错误、发送函数 Packet... 请按 Ctrl-C 中止。 正在将.blinky_cpu01.hex 下载到器件... 校验和不匹配... 请按 Ctrl-C 中止。

    blinky_cpu01的构建与我导入的示例没有任何变化。 正在通过 SCI 进行数据交换。 什么会导致 DFU CPU1操作显示 NACK 错误? 如果出现 NACK 错误、为什么执行看起来会继续? 哪些校验和不匹配?如何纠正?

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

    Thomas、controlCARD 并未专门限制 GPIO。 只要可以在 CCARD 中访问引脚、引导加载程序中支持的任何 GPIO 都是可能的。

    您提到的注意事项就在这里、因为我们有很多客户连接 JTAG USB 连接器、并且认为现在任何 SCI 外设和引脚组合都可以通过 USB 工作。 请注意、SCI 引导加载程序可通过 XDS 与 GPIO 28和29一起用于终端应用。 如果您为 另一组 GPIO 配置器件 SCI 引导、则不会有任何阻止您直接连接到这些引脚的情况、它只是不会通过 USB 连接器进行通信... 就我所能说的那样、这一点对您来说是显而易见的。 感谢您的讲解。   

    此致、

    Cody  

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

    Cody -感谢您的回复:可通过 TI controlCARD 上的 GPIO 引脚访问 SCI 功能。  但是、当我尝试将 serial_flash_programming 实用程序与闪存内核类型 B 的 F2837xD_sci_flash_kernels 实现一起使用以将闪烁示例程序编程到闪存时、您和 Anu 都没有直接回答我遇到的最新阻止问题。

    您能告诉我在尝试执行 DFU CPU1菜单选项时可能会导致 NACK 错误的原因吗?从那时起、我可以采取哪些措施来继续?

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

    Thomas、

    很抱歉耽误你的时间、上周我都不在办公室了。 我只在这里支持硬件问题、我认为这些问题已经解决。(如果您需要更多支持、请随时告诉我)软件问题落在 了围栏的 Anu Biradar 一侧。 如果您认为您没有获得足够的答案、我可能会将该主题发送回主持人、并要求他们重新分配、尽管我 无法保证这会有所帮助。

    此致、
    Cody   

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

    Cody -感谢您的回复。 我意识到我的问题属于 Anu 的专业领域。 我已经查看了 serial_flash_programming 和 sci_flash_kernels 的源代码、并且看不到在尝试执行 DFU_CPU1菜单选项后会立即导致 NACK 错误的原因。

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

    Thomas、  

    在 PC 上使用控制卡并运行串行闪存编程器时、需要使用 GPIO 引脚28和29。 NACK 错误可能是因为 F2837xD 上的 SCI 外设未针对该示例正确配置。

    Anu

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

    正如我在之前的答复中所说、我相信我可以在闪存编程期间使用 GPIO 84和85来驱动 SCI-A、原因有几个。 1) 1) Elprotronic FlashPro2000能够使用 GPIO 84和85将闪烁示例程序编程到闪存中。 使用 GPIO 28和29时失败。 2) 2)程序开始时的串行流量、在两个 GPIO 对的菜单显示完全相同之前在命令窗口控制台上回显。 3) 3)当我尝试使用具有 GPIO 28和29的串行闪存编程器并调用 SCI_GetFunction (SCI_B0OT_ALTERY)而不是 SCI_BOOT 时、其工作方式与使用 GPIO 84和85时相同;串行数据交换成功完成、显示菜单、并尝试运行 DFU CPU1会立即导致 NACK 错误。

    当您说"F28377xD 上的 SCI 外设配置不正确"时、您是说软件还是板载硬件实现? 据我所知,在 GPIO 对之间切换所需的唯一更改是传递给 GetFunction()的 SCI_BOOT 或 SCI_BOOT_ALTERNATE 参数。 F2837xD_sci_flash_kernels 中是否还有其他需要更改的地方? 是否在其他地方应该进行配置更改?

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

    尊敬的 Thomas:

    我们将查看此内容、并在第二天内回复您。  

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="159004" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1129446/tms320f28379d-sw1-on-controlcard-mounted-upside-down/4208637 #4208637">当您说" F28377xD 上的 SCI 外设配置不正确"时、您是指软件还是板级硬件实现? 据我所知,在 GPIO 对之间切换所需的唯一更改是传递给 GetFunction()的 SCI_BOOT 或 SCI_BOOT_ALTERNATE 参数。 F2837xD_sci_flash_kernels 中是否还有其他需要更改的地方? 是否还有其他地方应该进行配置更改?

    是的、f2837xD 的 SCI 外设可通过软件实现进行配置、您可以在该软件实现中从 SCI_BOOT 切换到 SCI_BOOT_ALTERY。 对于 F2837xD_sci_flash_kernels 文件、该示例无需更改任何其他内容。

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

    Charles -感谢您在使用 sci_flash_kernels 程序对闪存进行编程时、确认了我对用于为 SCI-A 通信选择不同 GPIO 对的软件配置的分析。 这个问题仍然没有得到解答、如果 SCI 通信显然在内核下载期间发生、为什么请求 DFU-CPU1会导致 NACK 错误? 出现了什么问题、我该怎么做才能成功执行命令?

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

    Thomas、

    很抱歉、您已经为这个问题解决了好几周。 我被 Anu 和 Charles 拉进来帮助您解决这个问题、虽然我声称在这个领域没有专业知识、但我一定会尽力帮助您。

    因此、我阅读了整个信息链、我对问题摘要的理解如下:

    在 F2837x 上尝试使用 SCI 引导模式并尝试下载闪存内核时、您会看到问题(NACK 错误等)。 出现菜单、但一旦您按 DFU CPU1命令、就会出现错误。

    2.无论您使用的是 GPIO 84/85还是28/29,都会出现问题。 在每种情况下、您都会相应地重建闪存内核、以支持所需的 GPIO 配置。 在前一种情况下、由于 F2837xD controlCARD 不支持使用 USB 连接器、因此您可能直接连接到电路板上的 GPIO 引脚。 在后一种情况下、您可能正在使用 USB 连接器。

    诚然、出于上述原因、我们从未尝试将 GPIO 84/85用于带有 F2837x controlCARD 的 SCI 引导。 但是、我们已经成功地尝试了28/29组合。 鉴于这不是默认模式、需要执行一些额外的步骤。 这样做的主要原因是、我们需要适当地设置 BMODE 字段。 我确实意识到您最终需要使用 GPIO 84/85的功能、但您能否快照一下、看看您使用 GPIO 28/29的设置是否起作用?

    谢谢、

    Sira

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

    SIRA -您的说明在两个方面不清楚。 1) 1)文本的图像非常小、当我尝试在新选项卡中打开它并放大时、图像模糊。 您能告诉我 TI 文档和页码、以便我能以 PDF 格式阅读吗? 2)步骤4听起来像是我需要 运行 CCS 调试器来更改 EMUBOOTCTRL 中 BOOTCTRL 寄存器的内容。 如果是、我正在调试什么程序? 它是 F2837xD_sci_flash_kernels 吗?

    我正在尝试建立一个不需要更改 OTP 位置、也不必使用 CCS 调试器的过程。 只需插入并运行即可。 在不运行调试器的情况下、是否有另外一种方法可以在 EMUBOOTCTRL 中以编程方式更改 BOOTCTRL 寄存器?  是否可以在执行 sci_flash_kernels 程序的早期添加该逻辑?

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

    Thomas、

    1、sprabv4、第20页。 请查看问题"使用 controlCARD、我无法在 SCI 引导中将 SCI 闪存内核下载到 RAM、我应该采取哪些步骤来实现这一目的?"的答案

    正确、这就是我们要尝试设置 EMUBOOTCTRL 寄存器的 BMODE 位域的想法。 在此步骤中、您不必调试 CCS 中的任何可执行文件。

    3.我明白。 我的目标是查看您是否可以像我们一样使用 GPIO 28/29进行设置。 这样做后、我们可以将注意力转向 GPIO 84/85 (这是默认模式、不需要任何特殊设置)。

    谢谢、

    Sira

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

    我已经按照步骤1-3在 controlCARD 上配置了开关。 通过扩展坞卡上的电源插孔为电路板供电。 SCI-A 通信通过 USB 端口和 XDS100v2接口进行。 当我开始运行/调试时、我收到错误消息 Error connecting to the target (Error -2131 @ 0x0)。 我会怎么做?

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

    Thomas、我明天将在 F28379D CC 上尝试此操作、并通过更清晰的预期屏幕截图返回给您。

    谢谢、

    Sira

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

    SIRA -关于我的最后一条消息、我今天早上查看了我的配置、发现我的 SW1:1位置1设置不正确。 解决了连接到目标时的错误。 控制台内容现在与文档中的图6.1类似。 但是、当我尝试菜单中的选项1 DFU CPU1时、我仍然会得到"发送函数数据包时出现 NACK 错误"。

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

    尊敬的 Thomas:

    是否已尝试在 SCI_GetFunction.c 文件中输入断点? 在此文件中、函数 SCI_GetPacket 可以确定从主机发送的内容不正确、 校验和或数据可能包含错误。 断点可以放置在文件中的第604行、622行和627行、以查看触发 NACK 错误的原因。 在 CCS 中加载内核的符号、然后在这些位置设置断点、 并尝试运行 DFU 命令。  

    此致、

    查尔斯

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

    Charles -感谢您提供的调试信息。 我通过调用 serial_flash_programr.exe 并传递参数来调用 F2837xD_sci_flash_kernels。 如何执行该操作并在 CCS 调试器中运行 sci_flash_kernels?

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

    Thomas、

    要检查主机行为, 请执行以下步骤:


    1.打开包含项目文件夹的 CCS
    2.查看并启动目标配置文件
    3.在调试窗口中,右键单击 CPU1并连接到目标
    4.在“查看”选项卡下,单击内存浏览器窗口并输入地址0xD00。 在此地址键入十六进制值815A。
    5.在工具栏窗格中,单击 CPU 的"CPU Reset"按钮,然后按 CPU1的"Resume"按钮。
    6.打开命令提示符并导航至包含闪存内核(alt 版本)和应用程序 hex 文件(.txt)的文件夹以及 serial_flash_programr.exe
    7.输入此行,更改特定 COM 端口(例如 COM6,可在设备管理器的端口中找到)的编号。
    serial_flash_programr.exe -d f2837xD -k F2837xD_sci_flash_kernels_cpu01_alt.txt -a blinky_dc_cpu01.txt -b 9600 -p COM -v
    8.允许将文件下载到设备。 下载完成后、返回 CCS、暂停程序、然后在工具栏窗格中单击加载图标、并通过浏览项目为器件加载闪存内核程序.out 符号。
    9.查看 SCI_GetFunction.c 文件、并在第604、622和627行中放置断点以查看 NACK 错误
    10.在 CCS 中按 CPU1的"恢复"。 返回命令提示符、然后按1键进入 DFU CPU1。

    如果您选择 Microsoft Visual Studio、则还可以将参数(例如 -d f2837xD -k F2837xD_sci_flash_kernels_cpu01_alt.txt -a blinky_dc_cpu01.txt -b 9600 -p COM12 -v)传递到 serial_flash_programmer SLN 文件中。 您必须进入 Debug > serial_flash_programmer Properties > Configuration Properties > Debugging、其中命令行为参数行。

    此致、

    查尔斯

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

    Charles -感谢提供了将 CCS 调试会话链接到从命令窗口运行的 EXE 文件的出色说明。

    我按照您的指示进行了操作。 直到最后一步、一切都进展顺利。 消息"NACK Error with Sending the Function Packet……"(发送函数数据包时出现 NACK 错误……) 仍然会发生、但3个断点都不会跳闸。

    它可能不相关,但它可能有助于找到 NACK 的来源,从而知道该消息后面会出现“正在将.\blinky_cpu01.txt 下载到设备...  校验和不匹配... 请按 Ctrl-C 中止"。

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

    尊敬的 Thomas:

    让我来看看这个。 我认为这与如何为所提供的步骤设置暂停有关。 需要在执行 DFU CPU1命令之前暂停 CPU1。 也将检查校验和消息。

    查尔斯

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

    Thomas、

    当您尝试执行除 DFU CPU1之外的其他命令操作时、是否会发生此错误?  

    查尔斯

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

    查尔斯:我执行了您要求的测试。 我选择了选项3擦除 CPU1、而不是 DFU CPU1。 我选择了扇区 C、然后选择0以结束选择列表。 在选择 DFU CPU1时、立即响应与之前相同:"Nack Error with sending the Function Packet……"。 随后是:

    错误标头41B
    错误校验和
    预期为7.
    收到0
    错误页脚700
    数据包命令错误!
    错误状态:未识别错误
    错误地址:0xcccccccccccc
    未识别错误
    有关错误的进一步说明、请参阅闪存 API 文档。
    FMSTAT 寄存器内容:cccccccccc

    由于错误列表显示"请参阅闪存 API 文档"、因此您应该知道我正在从包含以下内容的批处理文件中运行:

    C:\ti\c2000Ware_4_01_00_00\utilities\flash_programmers\serial_flash_programmer\serial_flash_programr.exe ^
       d f2837xD ^
       -b 9600 ^
       -k .\targetConfigs\F2837xD_sci_flash_kernel_alt_cpu01.txt^
       A .\%1.hex ^
       p COM%2 ^
       -v

    其中、我已从 CPU1_FLASH 编译配置中为参数1输入"blinky_cpu01.hex"、为参数2输入"4"。

    我想知道 blinky_CPU1项目和 blinky_dc_CPU1项目之间是否存在可能导致故障的内在差异。 我将链接 cmd 文件更改为使用 align (16)而不是 align (8)、并将闪存位置从扇区 B 更改为扇区 C。我在 CPU1_flash_standalone 构建配置中构建了 blinky_dc_CPU1工程、并使用了该工程。 它为菜单选项 DFU CPU1和擦除 CPU1提供了相同的错误消息。

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

    尊敬的 Thomas:

    您的 controlCARD 的修订版本是什么? 此外、主机和目标之间的导线长度是多少、因为这可能会影响传输。  

    此外、您能否尝试运行以下位置的 sci_loopback 和 sci_echoback 示例:C:\ti\c2000Ware_4_01_00_00\device_support\f2837xd\examples\cpu1

    以验证 SCI 功能。

    查尔斯

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

    controlCARD 标记为 R1.3。

    我一直通过 USB 扩展器电缆将 controlCARD 连接到 Windows 10主机的 USB 端口。 今天早上、我尝试使用 controlCARD 附带的 USB 电缆进行直接连接。 sci_loopback 和 sci_echoback 程序在这两种配置下都能完美地工作。 因此电缆长度似乎不是一个因素。

    但是、对于 serial_flash_programmer、我发现我一直在为鼠标指定 COM 端口、而不是为 controlCARD 上的 SCIA 指定 COM 端口。 因此、内核尝试使用 SCI 端口失败的原因很明显。 serial-flash_programmer 似乎认为它已成功下载内核并显示了菜单、这是奇怪的。

    现在、我似乎有一个新的失败。 使用与 USB - FTDI 接口关联的 COM 端口从 serial_flash_programmer 下载内核的尝试在"尝试自动波特加载内核"处停止。 无论电缆配置如何、行为都是相同的。

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

    尊敬的 Thomas:

    很高兴您能够解决 COM 端口问题。 您能否提供进入"尝试自动波特加载内核"提示的确切步骤?

    谢谢、

    查尔斯

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

    我在上一次答复中提供了批处理文件。 我传递给 serial_flash_programmer 的参数解析为 blinky_cpu01.hex、用于对要编程的映像、而 COM13用于将 Windows 串行端口传输到 controlCARD 上的 USB 端口。 serial_flash_programmer 的响应为:

    正在获取通信状态
    建立通信 DCB
    调整端口设置

    调用 f021_DownloadKernel CPU1内核
    正在将..\targetConfigs\F2837xD_sci_flash_kernels_alt_cpu01.txt 下载到设备...

    正在尝试自动波特加载内核...

    它就在那里。

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

    尊敬的 Thomas:

    我明白了。 您使用的是扩展名为.hex 的闪烁文件吗? 我已经使用.txt 来确认示例中的图像。 我还建议使用 blinky_dc_cpu01.txt 文件、而不是 blinky_cpu01.hex。  此外、您是否还有另一个 controlCARD 可用于查看它是否是硬件问题?

    查尔斯

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

    无论使用.hex 文件扩展名还是.txt 文件类型扩展名、由 hex2000.exe 输出生成的可刷写文件内容都是相同的。 文件扩展名是否确实会影响闪存编程结果?

    我已经尝试了 blinky_cpu01和 blinky_dc_cpu01。 这两个器件的运行方式完全相同:由 serial_flash_programmer 生成的错误。

    我们有第二个 controlCARD。 我将其配置为通过 USB 端口对闪存进行编程。 我在 blinky_cpu01和 blinky_dc_cpu01上尝试了 serial_flash_programmer。 结果与第一个 controlCARD 相同。

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

    Thomas、

    十六进制或.txt 文件类型的文件扩展名正确无误、只是比较  了我们的设置中可能存在的差异。 如果两个 controlCARD 的结果相同、则不太可能与硬件相关。 如果您想设置私人电话来解决此问题、我会给您带来混乱。

    查尔斯

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

    Charles -再次感谢您的帮助。 今天下午、我重复闪存编程、使用 GPIO 28和29对 controlCARD 上的 SCI-A 进行替代类型的编程。 这一次、我使用 CCS 调试器将 SCI 引导选项2的位置0x0D00设置为0x815A。 然后、我从命令窗口运行批处理文件。 包括 DFU CPU1在内的所有步骤似乎都正常工作。 然后、我执行了菜单选项5 -验证 CPU1。 失败的消息。

    传输的比特率/s 为:6997.561523
    应用程序加载成功!
    已完成等待应用程序下载和引导...
    命令成功
    错误状态:verify_error
    错误地址:0x8201c
    闪存 API 错误:失败
    有关错误的进一步说明、请参阅闪存 API 文档。
    FMSTAT 寄存器内容:00

    此外、当我在将 SW1设置为从 controlCARD 上的闪存引导后重启电源时、LED 不会闪烁。  

    我尝试将 SCI 引导选项1与 GPIO 84和85一起使用。 内核下载似乎正常。 当我从菜单中尝试 DFU CPU1时、我得到了

    调用 f021_SendPacket

    发送函数数据包时出现 NACK 错误... 请按 Ctrl-C 中止。正在下载.\blinky_cpu01.hex 至设备...

    校验和不匹配... 请按 Ctrl-C 中止。

    针对到 controlCARD 的 SCI 连接的 COM 端口选择这次是正确的。 似乎我正在跳过一个步骤、使用默认 GPIO 对使内核针对 SCI 引导选项1正常运行。

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

    尊敬的 Thomas:

    很高兴 DFU CPU1能够通过 GPIO 28/29引脚工作。 在此设置中按 DFU CPU1时、所述的入口点地址是什么?

     verify_error 状态 表示尝试验证闪存扇区 B (地址0x8201c)中的程序失败。 这是对闪存扇区 C 使用默认的闪烁链接器命令文件还是修改过的命令文件? 您可以对一个段进行编程、并尝试验证未编程的段。 我还会确保文件与128位边界对齐(align (8))。 此外、您能否看到某个段是否被映射到 RAM 而不是闪存?

    对于 SW1、我已确认下载操作具有 SCI/等待引导模式(左开关向上、右开关向下)。 当将 SW1置于闪存引导模式(两个开关都打开)时、LED 闪烁。  

    对于具有 GPIO 84/85引脚的 SCI 引导选项1、您是否还使用 HSEC 文档来物理连接这些引脚?

    查尔斯

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

    Charles -感谢您的建议。 我将在几天内就此向您回复。 其他几个项目在短期内优先进行。

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

    Thomas、

    听得好。 期待您的下一次答复。

    谢谢、

    查尔斯