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:需要外部 EEPROM 接口支持的 SPI 引导模式

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1298144/tms320f28379d-spi-boot-mode-with-external-eeprom-interface-support-needed

器件型号:TMS320F28379D
主题中讨论的其他器件: C2000WARE

我有一个控制器(TMS320F28379D)和 EEPROM (25AA512、SPI 接口)、我试图在引导模式下使用 EEPROM 来引导该控制器、以便控制器从 EEPROM 中获取代码。 您能指导我执行相应的步骤吗? 我参考了控制器第 4.10.4.3节"SPI 引导模式"的参考手册、但内容尚不清楚。

注意: 不查找使用闪存的 EEPROM 仿真

此致
萨达姆   

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

    你好 Saddam,

    仅希望确保您知道、如果您 对配置进行硬接线以使用 SPI 引导模式、该器件将  在每次上电或复位时使用 SPI 引导、并且不会从闪存引导。  

    - Allison

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

    尊敬的 Allison:
    感谢您的回复、非常感谢您提供的信息、但这不是问题的关键所在、  
    要求:EEPROM 中的十六进制文件将由控制器在 SPI 引导模式下使用,那么如何实现此目的。
    实现:我已使用 spi_boot.c 文件成功完成与 EEPROM 的 SPI 通信, 注:已用 SPIB ,但没有什么信息要做的下一步。

    此致、
    萨达姆

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

    你好 Saddam,  

    要澄清一点、您的意思是除了设置引导引脚以获取模式并为 SPI 引导模式配置密钥之外、您是否还需要其他步骤方面的帮助? 您已经成功实现了 SPI 引导模式和硬件设置、但想知道如何通过 SPI 通信将十六进制地址从 EEPROM 发送到 F2837?

    此致、

    艾里森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您已经成功实现了 SPI 引导模式和硬件设置,但想知道如何通过 SPI 通信将十六进制文件从 EEPROM 发送到 F2837?

    尊敬的 Allison:

    是的、请提供帮助。

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

    你好 Saddam,

    我们不熟悉这个特定的 EEPROM 器件、但我们确实有涉及 AT25128/256的软件示例、您可以将其用作参考指南。 虽然 F2837xD 专门没有此 SPI EEPROM 示例、但 F2838x 确实有此示例(C2000Ware 中的 SPI_ex6_EEPROM)、您可以在此处寻求帮助。  

    您之前提到 可以与 EEPROM 通信、所以您遇到了特定部分的通信问题吗? 如果您尝试调试代码、确定4个 SPI 引脚的范围也有助于检查通信是否正确。

    此致、

    艾里森

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

    尊敬的 Allison:


    我不需要有关 SPI 的帮助、我需要有关"如何通过 SPI 使用引导模式"的确切步骤

    要求:EEPROM 中的十六进制文件将由控制器在 SPI 引导模式下使用,那么如何实现该目标。
    [/报价]

    请了解要求是什么(上面引用的)。

    此致

    萨达姆

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

    你好 Saddam,

    对于 通过 SPI 测试引导模式的步骤、您可以执行以下操作:

    1.打开 CCS、查看并启动目标配置文件

    2.在调试窗口中,右键点击 CPU1并连接到目标

    3.在"View"选项卡下,点击"Memory Browser"窗口,然后输入地址0xD00。 在此地址处、键入十六进制值0x045A。

    4.在工具栏窗格中、点击 CPU1的 CPU Reset 按钮、然后按 Resume 按钮。

    您必须为 EEPROM 配置 SPI、以便能够被识别。 有关这方面的更多信息、最好查看第4.10.4.3节。  我的专业知识目前没有这个外设、但可以查看是否需要任何其他特定的东西、将会告诉您。

    谢谢。此致、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 打开 CCS、查看并启动目标配置文件

    =>启动目标配置文件后要做什么?

    2.在调试窗口中,右键点击 CPU1并连接到目标

    3.在"View"选项卡下,点击"Memory Browser"窗口,然后输入地址0xD00。 在此地址键入十六进制值0x8104。

    [/报价]

    =>成功完成

    4.在工具栏窗格中、点击 CPU1的 CPU Reset 按钮、然后按 Resume 按钮。

    [/报价]

    现在,在点击 CPU 重置后,发生以下情况:  

    点击"继续"后、将出现以下情况:

    我无法看到这是如何使我进入 SPI 引导模式的?

    问题1)在 TMS320F28x 控制器的 TRM 中、在 SPI 引导模式下的第4.10.4.3节、您能告诉我将在主函数内部或在主函数之前编码步骤1至8、

    a)如果在主函数内部、那么在主函数开始之后的什么位置、或者在哪里?

    b)如果在 main 函数之前、那么这里?

    问题2)并且在第4.10.4.3节或 TRM 中的这个步骤中、不清楚代码/控制器是如何确定它应该运行哪个代码的、无论是来自 EEPROM 还是闪存

    问题3)、它们是 SPI 引导模式的引导引脚:  

    a)不清除 SPI 模式的 GPIO 引脚、请清除此
    B)以及代码中的 BOOTCTRL 寄存器在哪里、以及如何根据需要对其进行配置

    问题4)您能否提供示例代码、因为在 TRM 中、它还不是很清晰、如何实现任务(任务:我想将十六进制文件从外部 EEPROM 编程到控制器中、 由于在现场、我们不想对控制器进行编程、因此我们想要将 hex 文件放入外部 EEPROM、只需插入 PCB 并重置电路板、同时向引导引脚添加跳线引脚、控制器应从 EEPROM 获取更新的 hex 文件)

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

    你好 Saddam,

    实际上我为您准备了校正、启动模式应为0x045A (SPI 启动模式为04、5A 用于确认寄存器有效)。   

    Q1a)这些步骤发生在  UINT32 SPI_Boot (UINT32 Bootmode)函数中、该函数是 bootROM 代码(SPI_Boot.c)的一部分。

    Q1b)在 main 之前、器件正在配置时钟并选择引导模式。

    Q2)这是由  UINT16 SPIA_IPORI Address_Key 函数确定的。 我可以为您研究这种情况。

    Q3a) SPI 模式的引导引脚由传递到  SPI_Boot 函数的引导模式确定。 默认情况下、引导引脚使用的是 GPIO16、GPIO17、GPIO18和 GPIO19。 这些与函数  SPI_SPI_2 Pinmux_Option ()有关。  

    Q3b) BOOTCTRL 寄存器在  Selection Mode_Boot  文件中的代码中引用。

    Q4)我的带宽现在是有限的,为这个任务,将看到什么可以做.

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    我实际上为您做了修正,引导模式应为0x045A (04表示 SPI 引导模式,5A 用于确认寄存器有效)。

    我没有得到您在此引用消息中建议的内容、您是要求将0xD00地址更新为值0x045A 吗?

    1) 1)在您之前的回复中、您建议了进入引导模式的4个步骤、我已为您提供了相同的屏幕截图、请说明。

    2) 2)正如您提到的 SPI_Boot.c 文件、但没有提到在 main 内或 main 之前调用该文件函数的位置、确切地说、TRM 中也确实缺少此信息、 因此、我需要基础/简单示例代码来了解使用 SPI EEPROM 的引导过程、我的所有问题都已回答。

    3)如果您的带宽有限,请转发您的可用人员

    此致  

    萨达姆

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

    你好 Saddam,

    是的、对于 SPI 引导模式、请将0xD00地址更新为0x045A。 我也将与其他一些人取得联系以获得此处的支持、因此请允许他们在他们联系我时多花一些时间-预计在明天结束之前提供更新。 我 也注意到了这一点、因此 我们   将来可以改进和阐明对 SPI 引导模式的描述、以便更轻松地实现。

    此致、

    艾里森

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

    你好,萨达姆,还在等待听到,但我将再次更新周一或一旦我听到回来。  

    此致

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

    尊敬的 Allison:

    还在等待您的回复。

    我想和大家分享我已经执行的一些步骤、并且对此有一些疑问、

    注意:有两个项目:a) EEPROM 的 LED 闪烁300ms b)控制器的 LED 闪烁100ms

    a)在外部 EEPROM 中转储十六进制文件

    => 300ms LED 闪烁代码(十六进制文件)、要在外部 EEPROM 中转储

    =>在转储之前、我已经在 properties->C2000 Hex Utility -> Boot Table Options -> Set a)选择引导模式、b) spi-a 端口、8位模式(--spi8、-spi8)中设置了一些设置

    =>输出格式选项->设置"Intel hex"

    =>构建工程

    =>读取此 hex 文件时、我可以看到前两个字节的密钥= 0x8AA

    b)独立引导

    =>调试配置->目标->闪存设置-> Z1-Bootctrl (0x7801e)= 0x0000045A

    =>构建后->调试模式

      正如您在存储器浏览器中看到的 Z1-bootctrl 的值

    => CPU 复位

    =>恢复

    =>暂停

      如图所示、bootctrl 寄存器的值没有改变、控制器代码在运行、而不是 EEPROM 代码

    =>您也可以看到引导状态寄存器、因为寄存器的值中有闪存引导、而不是 SPI 引导

    =>我认为控制器没有进入 SPI 引导、因为我设置值的地址(0x045A)不是您在 TRM 中提供的错误地址、因为在下面的内存浏览器中、您可以看到地址是 0x0005F004、而不是0x7801e、 如果0x0005F004是设置 bootctrl 寄存器的正确地址、请告诉我如何设置、因为在调试配置中、目标的闪存设置中、地址是0x7801e

    =>我还必须在闪存设置中设置另一个寄存器、请参阅下图

    注意 :我在独立引导中完成了电源重置我的控制器板,但控制器代码正在运行,而不是 EEPROM 代码

    b)仿真模式

    =>在调试模式下设置寄存器0x00d00中的值0x045A

    => CPU 复位

    =>恢复

    =>暂停

    =>即使在仿真模式下、控制器代码也在运行、而不是 EEPROM 代码

    我正在等待您的回复、我仍在要求您提供示例代码或任何文档。

    此致

    萨达姆

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

    你好 Saddam,

    感谢您提供的信息以及持续的耐心。 我仍在等待响应、但仍在与此处寻求更多支持。 我明天会收到他们的反馈。

    此致、

    艾里森

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

    你好 Saddam,

    很抱歉、我还在等待回复(这不是我的专长)、但我可以尝试在这里提供进一步指导:

    首先要注意的是目前应坚持使用仿真引导模式-使用该模式进行调试并验证您是否可以正确连接使用 EEPROM 进行工作。 一旦我们确认其设置正确、然后继续使用闪存工具对 OTP 进行编程以对其进行设置。

    设置 EMU 引导模式后、应该可以按照上面屏幕截图中所示选择该模式。 首先、在 CCS 中进行重置、然后转到工具栏中的"脚本"选项卡并使用"EMU 引导模式选择"功能。 请告诉我您能否完成此操作、并使 EMU 引导模式正常运行。  

    此致、

    艾里森

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

    尊敬的 Allison:

    您提到的 emu 引导步骤对我无效。

    1) 1)在工具栏-> Scripts->EMU Boot Mode Select->(EMU_BOOT_SARAM 和 EMU_BOOT_FLASH)中、但是我需要 EMU_BOOT_SPI、该选项中未显示此功能。

    2) 2)即使我已在内存浏览器中手动将值0x045A 置于地址0x00d00上、在 CPU 复位状态下的调试模式下、然后点击"Resume"、但会运行控制器代码和 EEPROM 代码。 (注意:我已经完成了此操作、并提供了之前回复中的屏幕截图)

    此致

    萨达姆

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

    你好 Saddam,  

    感谢您的答复。 另一个需要注意的事项是、您之前在回复中表示您使用的是 SPIB。 根据数据表、共有两种 SPI-Boot 模式(0和1)-取决于您所使用的 GPIO -但是这两种模式都被指定用于 SPIA 引导。 (请参阅表9-15。 数据表的每个外设引导加载器使用的 GPIO 引脚)。  

    有鉴于此、有一些问题:您正在使用哪组 GPIO (我知道 Charles 之前已与您讨论过、但我想再次查看您是否在使用 SPI 引导0和 SPI 引导1)。 另外、您是否仍在尝试使用 SPIB? 您 是否尝试过使用 SPIA? 如果没有、请尝试在此处实施 SPIA。

    此致、

    艾里森

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

    尊敬的 Allison:

    我正在使用 SPIA (GPIO58、GPIO59、GPIO60和 GPIO61)、因此根据 TRM、我使用的是 SPI 引导0。

    如上面响应中的屏幕截图所示、在调试模式下、我已将 EMU_BOOTCTRL 寄存器(0x0d00)设置为0x045A、这里的04表示 SPI 引导0。

    此致

    萨达姆

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

    你好 Saddam,  

    看起来、当您从上面的屏幕截图中恢复并重新暂停您的程序时、在实际上引用了 SPI_Boot.c 的地方、将传递此值。

    下面是 一些逐步完成仿真 SPI 引导过程的说明、此过程为  调用 SPI_Boot.c 提供了更多的上下文。 这也有助于检查是否也能成功看到 SPI 通信。

    1. 在 CCS 中打开项目、并照常启动目标配置文件
    2. 在调试窗口中、右键点击 CPU1并连接到目标
    3. 在"View"选项卡下、点击"Memory Browser"窗口并输入地址0xD00。 在此地址处、输入十六进制值0x045A
    4. 在工具栏中、点击 CPU1的"CPU Reset"按钮
    5. 在工具栏中、单击"Load"按钮旁边的下拉菜单( )、然后单击"Load Symbols"
    6. 在弹出窗口中、单击"Browse"并选择目录下的文件:C2000Ware_5_01_00_00\libraries\boot_rom\f2837xd\revB\rom_sources\CCS_files\cpu01\Release\F2837x_cpu01_bootROM_RevB_Golden_020314.out
    7. 加载该文件后、将弹出一个窗口、指示 CCS 无法找到源文件。 单击"Locate File"并选择此位置:C2000Ware_5_01_00_00\libraries\boot_ROM\f2837xd\RevB\ROM_sources\F2837x_bootROM\cpu01-bootROM\source
    8. 将打开"c1brom_slot.asm" Init_Boot 文件。 导航到第370行("LCR _c1brom_system_init")。 右键单击行并选择"运行到行"。
    9. 在工具栏中、单击"Step Into"按钮一次、这将打开"c1brom_boot.c"文件
    10. 在第722行设置一个断点:"Else if (BootMode == SPI_BOOT||(BootMode == SPI_BOOT_ALTERNATE)) EntryAddr = SPI_Boot (BootMode);"
    11. 在这里、您可以验证 BootMode 是否设置为 SPI_BOOT (0x4)、然后再次使用工具栏按钮"设置到"'SPI_BOOT.c'文件
    12. 在"SPI_Boot.c"内、您可以逐步检查并验证 F2837xD 与 EEPROM 器件之间的 SPI 连接的行为是否符合预期。
      1. 我还建议使用示波器来查看 SPI 线路、以确认片选引脚变为低电平并且 两个器件之间正在进行数据通信。

    请告诉我您是否能够按照以下步骤操作并查看 SPI 通信。  

    警告 :您只能对 OTP 启动控制键编程两次,因此 在实际编程 OTP 之前、请务必验证一切都在仿真模式下运行。 您可以使用"工具">"片上闪存"将密钥编程到 OTP 中。 向下滚动至"OTPBOOTCTRL"并在按下按钮进行编程之前键入它。 但是、请再次小心操作:

    此致、

    艾里森

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

    尊敬的 Allison:

    你提到的所有步骤都能很好地工作,是的,我能够在外部 EEPROM 和控制器之间建立 SPI 通信,因为在 SPI_START_Boot ()中,我可以看到它正在读取密钥: 0x08AA,这意味着 SPI 正在工作并返回 entryAddress(十进制:545171 )。

    但是当我在获得入口地址后运行恢复时、它不会运行 EEPROM 代码、仍然运行控制器代码。

    下面是供您参考的屏幕截图:

    1)在完成返回 entryAddress 的 spi_boot()函数后,我将逐步执行到 exitBoot,然后按 resume,然后代码会转到 nowWhere (请参考 pic 4):

    1) 2) 3) 4)

    此致、

    萨达姆

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

    你好 Saddam,

    感谢您发布有关单步执行 SPI 引导流程的详细信息、我有一些问题和建议。  

    1. cpu1brom_system_init()返回的 entryAddress 是否与您在内存浏览器中看到的内容一致? 正如 技术参考手册的第4.10.1节所述、我希望在0x80000处对该应用程序进行编程。 0x80000地址是否被其他数据占用? 如果是、请在编程之前使用片上闪存工具擦除闪存。  

    2.我注意到您在为 LED 闪烁应用程序生成十六进制文件时使用了 Intel Hex 格式。 请使用 ASCII 十六进制输出格式(-a 或--ascii)生成十六进制文件。 有关详细信息、请参阅技术参考手册的第4.10.5节。

    3.我不确定我是否理解在将应用程序加载到闪存后您看到的行为。 前面您说它运行控制器代码、而不是 EEPROM 代码、但在屏幕截图中您提到它不会在任何地方运行。 正在运行什么控制器代码? 是否在发生 SPI_Boot 之前将程序加载到控制器上?  

    此致、

    斯凯勒

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

    您好、Skyler:

    1) 1)您可以在屏幕截图中看到、地址为 0x00085193、当我遵循 Allison 步骤时发生了这种情况

    2)它应该是 Intel hex(我认为),因为当我读取 ASCII 十六进制文件时,我在前两个字节和之后看不到密钥(0x08AA),但我可以在 Intel hex 文件中看到密钥和其他类似波特率的东西。

    ASCII 十六进制文件

    Intel Hex 文件

    3) 3)你可以在我的上述响应的屏幕截图中看到、在调试模式下、 我可以看到正在运行的代码 LED 在闪烁、但当我暂停程序时、nowWhere 出现(请参考之前响应 PIC 4中的屏幕截图)。

    此致

    萨达姆

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

    你好 Saddam,  

    Skyler 和其他几位专家目前不在办公室,预计将于1月2日返回。 但 我认为 ASCII 是应该使用的正确格式、因此那里可能存在问题-我正在对此进行检查以确认。 您如何生成这些文件?

    此致、

    艾里森

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

    你好 Saddam,

    如果 LED 在调试中闪烁、则您的应用程序代码 似乎正在运行。 当您暂停它、但它"无处可去"、这可能表明您需要加载正确的符号(采用与调试 SPI_Boot.c 中类似的方式)、因此当您暂停它时、请尝试加载您项目 代码的.out 文件。 如果这会改变您的能够看到的内容、那么应该表明从 EEPROM 加载的代码正在运行。 请注意、代码运行不需要执行此步骤、但您必须能够在调试模式下查看此步骤。  

    您能否还请发送 led blinky 项目应用程序.cmd 文件,以便我可以检查那里的地址也?

    此致、

    艾里森

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

    尊敬的 Allison:

    我要生成输出文件、方法是在"Properties"->"C2000 Hex Utility"->"Output Format Options"中设置输出格式并构建工程、然后生成十六进制文件。

    1) 1)您能否判断 SPI_boot 完成后(即在引导退出时)应该是什么?

    2) 2)您希望我在引导完成后执行该步骤、即代码处于引导退出状态或 CPU 复位状态时执行?

    因此当您暂停时,请尝试加载项目 代码的.out 文件。

    3) 3)我认为符号加载正确、这就是代码运行 SPI 引导函数的原因、如果不正确、请告诉我如何正确执行。

    4) 4)我无法向您发送.cmd 文件、因此我提供了该文件内容的屏幕截图。

    图1) 图2)

    图3) 图4)

    此致、

    萨达姆

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

    你好 Saddam,

    1.根据您提供的 hex 文件和.cmd 文件、SPI Boot 返回的条目地址看起来是正确的。 在 LED Blinky 项目中导航到 Properties -> C2000 Hex Utility 时、您是否可以发送"Summary of flags Set:"的内容?

    2.我认为,你看到的代码在暂停后无处消失的原因是因为 LED Blinky 应用程序的符号没有加载。 因此、当您在 LED 开始闪烁后暂停调试会话时、您将无法看到器件上运行的源代码。 要加载符号、请在 LED 应用程序成功加载后暂停调试会话、导航至"Load Symbols"、然后选择 LED Blinky 应用项目 。  

    此致、

    斯凯勒

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

    您好、Skyler:

    首先、让我清除两个代码:一个用于 EEPROM (LED 闪烁300ms)、另一个用于控制器(LED 闪烁1s)。

    1) 1)我已经通过控制器代码对控制器进行编程、并在调试模式下设置、然后完成 CPU 重置、然后加载符号:"C:\ti\c2000\C2000Ware_2_01_00_00\libraries\boot_rom\f2837xd\RevB\rom_sources\CCS_files\cpu01\Release\F2837x_cpu01_01_bootROM_AllRevison.Out"、并根据上面的指导完成了以下步骤和指导完成了以下步骤。

    2)  

    要加载符号,请在成功加载 LED 应用程序后暂停调试会话,导航至"Load Symbols",然后选择与 LED Blinky 应用项目 [/报价]

    我没有收到您在这条引用消息中的意思、您是希望我加载 EEPROM 代码或控制器代码的.out 文件吗?

    3)

    此致

    萨达姆

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

    你好 Saddam,

    根据我对用例的理解、您需要实现 SPI 闪存内核以将 EEPROM 代码复制到闪存中。 SPI bootloader 将 EEPROM 代码加载至 RAM、而不是闪存。 我认为这就是您看到控制器代码在 SPI 引导完成后继续运行的原因。 SPI_Boot 返回的进入地址由构建 EEPROM 代码的工程中的连接器命令文件(.cmd)确定。 从您的屏幕截图我们可以看出、.cmd 文件试图将应用程序存储在闪存中、因此尽管 SPI_Boot 函数将程序加载到 RAM 中、但它仍返回闪存入口地址。 根据您所述的行为、先前在闪存中加载的控制器代码必须具有相同的入口地址、因此它会继续运行控制器代码。

    为了实现所需的行为、必须使用闪存内核。 闪存内核负责擦除之前的控制器代码、接收 EEPROM 应用程序代码以及使用闪存 API 将 EEPROM 代码编程到闪存。 此过程的一般流程如下:

    1. 复位器件并使用 SPI 引导模式
    2. 通过 SPI 将闪存内核从 EEPROM 传输到控制器
    3. 闪存内核将在 SPI 引导完成后进行控制
      1. 确保与闪存内核对应的.cmd 文件被配置为存储并从 RAM 运行
    4. 内核将从控制器上的闪存中擦除旧的应用程序代码
    5. 内核将配置与 EEPROM 的 SPI 连接并接收新的应用程序代码
    6. 内核会将新接收到的应用程序代码写入闪存并将控制权转移给它
    7. 将执行从 EEPROM 接收到的新代码

    作为参考、添加一个 SCI F2837xD 的闪存内核位于  C2000 Ware_Install_Location / device_support/f2837xd/examples/dual/f2837xD_sci_flash_kernels。 (我注意到您使用的是 C2000Ware v2.01、而最新版本是 C2000Ware v5.01。 如果未找到我之前提到的位置、请尝试升级到 v5.01)。 需要对其进行调整以与 SPI 外设配合使用。 位于以下位置的 bootROM 代码: C2000 Ware_Install_Location /libraries/boot_rom/f2837xd/revB/rom_sources/f2837x_bootROM/cpu01-bootROM/source 对于创建闪存内核至关重要。 SPI 闪存内核应使用大量 bootROM 代码(位于 C2000 Ware_Install_Location /libraries/boot_rom/f2837xd/revB/rom_sources/f2837x_bootROM/cpu01-bootROM/source/SPI_Boot.c)以完成此任务。 本应用手册讨论了 SCI 闪存内核(https://www.ti.com/lit/sprabv4)、但主要理念对了解/实现 SPI 闪存内核很有用。

    如有任何疑问、敬请告知。

    此致、

    斯凯勒

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

    您好、Skyler:

    我不明白我为什么必须执行这些 额外的步骤、如果我必须执行这些步骤、那么 SPI 引导 模式的使用是什么(我的意思是、我感觉当我对 EEPROM 使用 SPI 引导模式时、 然后、复制 EEPROM 中的代码到闪存地址(0x800000或闪存中的其他一些区域)、然后该地址从引导退出调用)、如果我错、请说明 SPI 引导时的用途是什么?

    我当时认为仿真模式会很简单、但会变得越来越复杂。

    您能告诉我下面的步骤吗? 独立 EEPROM 的 SPI 引导模式?

    此致

    萨达姆

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

    你好 Saddam,

    SPI 引导模式和相应的引导加载程序代码能够将应用程序加载到 RAM 中、而不是闪存中。 如果您想要将应用程序复制到闪存、则需要如上所述的 SPI 闪存内核。 请注意、在 两者皆可 仿真引导和独立引导。 如果您想进一步讨论这一点、我将离线联系您安排一次会议。

    此致、

    斯凯勒

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

    您好、Skyler:

    假设我想把代码从外部 EEPROM 复制到 RAM、而不是闪存、我该怎么做?

    此致

    萨达姆

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

    你好 Saddam,

    如果您想将代码从外部 EEPROM 复制到 RAM、可按照我们之前讨论过的仿真 SPI 引导步骤操作。 请确保 存储在 EEPROM 中代码的活动配置的目标是 RAM。 如果正确完成、引导加载程序代码和新生成的十六进制文件将直接将代码加载到 RAM 中。 SPI_Boot 返回的 entryAddress 将表示程序已加载到 RAM 中、您应该会看到 EEPROM 的新代码开始运行。  

    此致、

    斯凯勒

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

    您好、Skyler:

    1) 1)我可以在独立和仿真模式下运行 EEPROM 代码、方法是将 flash.cmd 更改为"链接器命令文件"中的 ram.cmd 文件、但这些是 led 闪烁代码、它的代码大小很小、 但我的应用代码要大得多、并且未装入 RAM 中、因此我必须使用您之前建议的闪存内核。

    2)请您更清楚地解释这些步骤:  

    • 复位器件并使用 SPI 引导模式
    • 通过 SPI 将闪存内核从 EEPROM 传输到控制器
    • 闪存内核将在 SPI 引导完成后进行控制
      1. 确保与闪存内核对应的.cmd 文件被配置为存储并从 RAM 运行
    • 内核将从控制器上的闪存中擦除旧的应用程序代码
    • 内核将配置与 EEPROM 的 SPI 连接并接收新的应用程序代码
    • 内核会将新接收到的应用程序代码写入闪存并将控制权转移给它
    • 将执行从 EEPROM 接收到的新代码
    [/报价]

    3) 3)您能否提供有关使用闪存内核的任何文档、我在 TRM 中找不到它。

    4) 4)我有点困惑、例如如何使用"sci 闪存内核"和"spi_boot.c"进行 SPI 引导、如何将代码从 EEPROM 加载到闪存。

    参考, SCI F2837xD 的闪存内核位于  C2000 Ware_Install_Location / device_support/f2837xd/examples/dual/f2837xD_sci_flash_kernels。 (我注意到您使用的是 C2000Ware v2.01、而最新版本是 C2000Ware v5.01。 如果未找到我之前提到的位置、请尝试升级到 v5.01)。 需要对其进行调整以与 SPI 外设配合使用。 位于以下位置的 bootROM 代码: C2000 Ware_Install_Location /libraries/boot_rom/f2837xd/revB/rom_sources/f2837x_bootROM/cpu01-bootROM/source 对于创建闪存内核至关重要。 SPI 闪存内核应使用大量 bootROM 代码(位于 C2000 Ware_Install_Location /libraries/boot_rom/f2837xd/revB/rom_sources/f2837x_bootROM/cpu01-bootROM/source/SPI_Boot.c)以完成此任务。 本应用手册讨论了 SCI 闪存内核(https://www.ti.com/lit/sprabv4)、但主要理念将对理解/实现 SPI 闪存内核很有用。

    此致、

    萨达姆

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

    你好 Saddam,

    感谢您的提问、我们将更加离线讨论此主题、并在主题之后进行更新。

    此致、

    斯凯勒