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.

[参考译文] MSP432E401Y:基于 ARM 的微控制器论坛

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1212607/msp432e401y-arm-based-microcontrollers-forum

器件型号:MSP432E401Y
主题中讨论的其他器件:UNIFLASHMSP-EXP432E401Y

您好!

几年前曾有人提出过类似的问题、但解决方案是使用 BSL Rocket 进行的。 您能否提供不使用 MSP Rocket 从 UART 端口启动的步骤?

Magda.

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

    您好!

     您不需要 MSP Rocket。 如果您有 LaunchPad、则板载 XDS110调试探针具有一个反向通道 USB 转 UART 桥接器、可以与目标器件上的 UART 进行通信。 如果不使用 LaunchPad、则需要 USB 转 UART 桥接器、例如 FTDI IC。  

    有关详细信息、请参阅用户指南的第4节。  

    https://www.ti.com/lit/slau655

    基于闪存的串行引导加载程序示例可在以下位置找到:

    C:\ti\simplelink_msp432e4_SDK_4_20_00_12\examples\nortos\MSP_EXP432E401Y\boot_loader\boot_serial_uart_flash

    有关 UART 的 BSL 脚本程序命令行脚本示例、请参阅:

    C:\ti\bsl-Scripter\ScriptExampleWindows\E4xx_uart

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

    你能解释一下为什么你拒绝我的答案而不给出理由吗? 我曾解释过、如果没有 MSP Rocket、就需要一个 枚举为虚拟 COM 端口的 USB 到 UART 转换器、这样 PC 主机就可以通过 UART 与 MCU 通信。 现代 PC 不再有 UART 端口、这就是使用转换器的原因。 如果您使用 LaunchPad、则板载 XDS110调试探针 具有内置的 USB 到 UART 转换器。 我上一次答复中没有回答什么问题?

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

    您好 Charles、

    我绝对没有拒绝你的答复,相反,感谢你迅速作出答复。 您回答了所有问题。 是否可以错误地按下按钮? 如果发生了、请道歉。 我同时考察 UART 和 USB 方法。 我的实验将为我们的硬件设计提供参考、而且我有点时间紧迫。

    再次感谢您、

    Magda.

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

    尊敬的 Magda:

     非常感谢您的确认。 我将关闭机票。  

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

    如果我有其他问题该怎么办? 我应该开一张新的机票吗? 现在、我将介绍 UART。  

    此致、

    Magda.

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

    您好!

     如果您有与 UART 引导加载程序无关的新问题、请打开新帖子。 如果问题与 UART 引导加载程序相关、可以写回该线程、该线程将自动重新打开。 我会收到通知。  

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

    会的。 谢谢你。

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

    您好 Charles、

    我成功运行了 ti\BSL-Scripter\ScriptExampleWindows\E4xx_uart 中的脚本:script_1到 script_3。 要擦除闪存、我使用了 CCS GEL 文件 MSP432E4_MASH_ERASE。 我没有为 R5和 R6安装0欧姆电阻器、因为我不使用 BSL-Rocket。 接下来、我尝试使用 CLI 命令来复制 script_1到 script_3中的步骤。 我尝试的第一步是初始化通信通道、如下所示:

    我缺少什么?

    我还想使用 CLI 命令-- erase [mass_erase]擦除闪存。 我认为--initComm 是它的先决条件。

    此致、Magda

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

    您好!

    请参阅这篇文章、了解使用命令行批量擦除 MSP432E 的详细信息。  https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/655218/msp432e411y-does-a-tool-exist-to-recover-locked-msp432

    使用的命令如下所示。  

    dbgjtag.exe -f @xds110 -Y 解锁,mode=msp432e4.

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

    谢谢查尔斯。 它只工作一次。 换言之,我叫:

    1. dbgjtag.exe -f @xds110 -Y 解锁,mode=msp432e4.

    断电/上电

    2. BSL_Scripter.exe -- erase erase_all

    断电/上电

    然后我叫了 script1和 script2。

    我看到在闪烁。

    当我重复步骤1和2时、我仍然看到 LED1指示灯闪烁、因此这些步骤没有擦除闪存。

    我的目标是仅使用类似于 script_1到 script_3的步骤在两个应用程序之间交换。 在我们的最终硬件上、我将无法访问 JTAG 和 SW1等按钮、因此我无法运行 app1、然后切换到 App2:

    1.擦除闪存;

    2.在闪存中加载自定义 UART 引导加载程序(script_1);

    3.负载应用1.

    要加载 App2、请重复1。 然后加载 App2。  

    此致、

    Magda.

     

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

    您好!

     您使用哪种类型的电路板以及使用何种调试探针? dbgjtag.exe  @xds110用于 XDS110调试探针。 该 LaunchPad 具有板载 XDS110调试探针。 如果您在定制电路板上具有不同的调试探针(例如 XDS200)、则需要在命令行上进行相应的更改。 dbgjtag.exe 应整体擦除芯片、包括所有非易失性寄存器和 EEPROM。 没有必要做 BSL_Scripter.exe -- erase erase_all。 运行 dbgjtag 命令后,它是否返回任何错误消息? 如果您使用 CCS 内存浏览器、您是否会在任何内存地址上看到闪存变为0xFFFFFFFF?

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

    尊敬的 Charles:

    感谢您的答复。 我现在意识到、将不会有板载 XDS110或 XDS200调试探针。 因此、简单地通过 BSL-Scripter 在两个应用之间交换是不起作用的。 我正在寻找其他方式,到目前为止没有成功。  MSP432E4 SimpleLink 微控制器引导加载程序(BSL)用户指南(修订版 A)(TI.com) 介绍了检查有效堆栈指针和复位处理程序或使用 GPIO 来启动应用更新的方法。 但这些必须在外部触发、这意味着使用连接到 GPIO 的按钮(看起来它不可用)、或者修改 BSL_Scripter 应用程序(希望避免)。 最简单的解决方案是什么?

    此致、

    Magda.

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

    您好!

     您需要找到应用程序跳回引导加载程序的方法。  这可以通过切换 GPIO 来实现、也可以向应用程序发送消息。 收到该消息后、应用程序可以跳转到引导加载程序。 该消息可以通过您需要的任何串行端口发送、无论是 SPI、UART 还是其他端口。 当然、您要接收这条消息的相应串行端口必须首先在应用程序中设置。  

      

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

    感谢您的答复。 我对引导加载程序、MSP432E4xx 应用程序和基于 PC 的应用程序之间的交互有疑问:

    1.是否将引导加载程序代码折叠到我的应用程序中? 否则,我的应用程序如何调用 ConfigureDevice()和 Updater()?  

    2.如果更新是由 GPIO 触发的, 我需要设置 GPIO 中断处理程序来调用 Updater(),假定串行端口已经配置好。 您能给我指一段类似的代码吗?

    3.在 PC 端:BSL-Scripter 按原样是否支持 GPIO 的新应用程序下载或应用程序触发的更新? 显然、它应该符合 https://www.ti.com/lit/ug/slau746a/slau746a.pdf 的第3.3-3.6节中描述的内容 、我看到了一些迹象。   是否需要修改? TI 是否提供我可以轻松修改的任何其他内容? 同样、我没有使用 BSL Rocket。

    此致、

    Magda.

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

    您好!

    1. 我是否要将引导加载程序代码折叠到我的应用程序中? 否则,我的应用程序如何调用 ConfigureDevice()和 Updater()?  [/报价]

    请参阅 GPIO 引脚置位时跳回引导加载程序的示例应用。 您可以看到、该示例应用程序将设置 UART、I2C 和 SPI 端口。 检测到 GPIO 生效(例如按 LaunchPad 上的 SW1)后,它将调用跳转到引导加载程序的 JumpToLoader ()。 您不需要在应用程序内调用 ConfigureDevice。 ConfigureDevice 是一个在引导加载程序运行时引导加载程序调用的函数。 引导加载程序将调用 Updater()以启动固件更新。 这都是由引导加载程序处理的。 您的应用只需要一种机制来跳回引导加载程序。 其余工作由引导加载程序自行处理。  

    C:\ti\simplelink_msp432e4_SDK_4_20_00_12\examples\nortos\MSP_EXP432E401Y\boot_loader\boot_serial_flash_app2

    3. 在 PC 端:BSL-Scripter 是否按原样支持 GPIO 或应用触发更新的新应用程序下载? 显然、它应该符合 https://www.ti.com/lit/ug/slau746a/slau746a.pdf 的第3.3-3.6节中描述的内容 、我看到了一些迹象。   是否需要修改? TI 是否提供我可以轻松修改的任何其他内容? 同样,我没有使用 BSL Rocket。

    BSL 脚本程序不知道 MCU 客户端是应用程序模式还是引导加载程序模式。 换句话说、它不知道应用程序何时跳回引导加载程序。 您需要处理这种情况。 我不建议您修改 BSL-Scripter。 相反、我建议您开发一个单独但简单的 PC 应用程序向该应用程序发送 UART 消息。 当应用程序收到此唯一消息时、将跳转到引导加载程序。 如果这样做更容易、您可以将这个简单的 PC 应用程序和 BSL-Scripter 合并在一个批处理文件中。  

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

    感谢 Charles 提供的说明和 指导。 我正在研究 同一目录中的示例 boot_serial_uart_flash、但无法立即找到问题1和2的答案。

    这个示例、让我进入另一个问题。 硬件人员希望使用 UART1、而不是 UART0。 因此,根据该示例,我应该在 SetupForUART()中为 UART1进行配置。 还有事吗?   

    此致、

    Magda.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在研究 同一目录中的示例 boot_serial_uart_flash,无法立即找到问题1和2的答案。

    BOOT_SERIAL_UART_FLASH 是基于闪存的引导加载程序、而  BOOT_SERIAL_FLASH_App2是应用程序。

    此示例向我提出了另一个问题。 硬件人员希望使用 UART1、而不是 UART0。 因此,根据该示例,我应该在 SetupForUART()中为 UART1进行配置。 还有事吗?   [/报价]

    您可以使用 boot_serial_uart_flash 示例中的 bl_config.h 来 配置 不同的 UART、例如 UART1。 下面是#define 的片段,需要为您要使用的任何 UARTx 进行更改。 默认为 UART0。

    //*****************************************************************************
    //
    // Selects the baud rate to be used for the UART.
    //
    // Depends on: UART_ENABLE_UPDATE, CRYSTAL_FREQ
    // Exclusive of: UART_AUTOBAUD
    // Requires: None
    //
    //*****************************************************************************
    #define UART_FIXED_BAUDRATE     115200
    
    //*****************************************************************************
    //
    // Selects the clock enable for the UART peripheral module
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UARTx
    //
    //*****************************************************************************
    #define UART_CLOCK_ENABLE     SYSCTL_RCGCUART_R0
    
    //*****************************************************************************
    //
    // Selects the base address of the UART peripheral module
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_CLOCK_ENABLE
    //
    //*****************************************************************************
    #define UARTx                 UART0
    
    //*****************************************************************************
    //
    // Selects the clock enable for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_BASE, UART_RXPIN_PCTL and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_CLOCK_ENABLE  SYSCTL_RCGCGPIO_R0
    
    //*****************************************************************************
    //
    // Selects the base address for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_PCTL and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_BASE          GPIOA
    
    //*****************************************************************************
    //
    // Selects the port control value for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_BASE and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_PCTL          0x1
    
    //*****************************************************************************
    //
    // Selects the pin number for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_BASE and UART_RXPIN_PCTL
    //
    //*****************************************************************************
    #define UART_RXPIN_POS           0
    
    //*****************************************************************************
    //
    // Selects the clock enable for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_BASE, UART_TXPIN_PCTL and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_CLOCK_ENABLE  SYSCTL_RCGCGPIO_R0
    
    //*****************************************************************************
    //
    // Selects the base address for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_PCTL and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_BASE          GPIOA
    
    //*****************************************************************************
    //
    // Selects the port control value for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_BASE and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_PCTL          0x1
    
    //*****************************************************************************
    //
    // Selects the pin number for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_BASE and UART_TXPIN_PCTL
    //
    //*****************************************************************************
    #define UART_TXPIN_POS           1

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

    对不起 Charles、我缺少一些东西。 假设我为 UART1配置了一个新的二进制 boot_serial_uart_flash。 这很简单。 它如何到达闪存中的正确位置?

    是否还需要从空闪存开始?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉,Charles,但我遗漏了一些内容。 假设我为 UART1配置了一个新的二进制 boot_serial_uart_flash。 这很简单。 它如何到达闪存中的正确位置?

    这就是运行 script_1.txt 的原因。 当闪存为空时、基于 ROM 的引导加载程序将 通过 UART 端口将基于闪存的引导加载程序 boot_serial_uart_flash 加载到闪存中。   如果您愿意、可以使用 JTAG 轻松地对 boot_serial_uart_flash 进行编程、但我的理解是、您将无法在最终的生产电路板上获得 JTAG 访问权限。 因此、您将使用基于 ROM 的引导加载程序。 我们可以一次性将基于 ROM 的引导加载程序视为一个问题。 一旦闪存中包含了某些内容、基于 ROM 的引导加载程序将跳转到0x0、以运行您在闪存中拥有的任何程序、无论是基于闪存的引导加载程序还是应用程序。  

    是否还需要从空闪存开始?

    如上所述、首次使用 ROM 引导加载程序加载基于闪存的引导加载程序时、闪存必须首先为空。  

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

    需要说明的一点是、基于 ROM 的引导加载程序仅适用于 UART0、而不适用于其他 UART 端口。 因此、您将通过 UART0端口加载基于闪存的引导加载程序、在基于闪存的引导加载程序运行后、它将使用 UART1端口加载最终固件。 如前所述、您还可以使用 JTAG 加载基于闪存的引导加载程序、就像使用 CCS 或 Uniflash 加载任何应用程序一样、如 blinky 或 hello。  

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

    查尔斯,你刚刚发送了另一个答复,但它消失了。 我只看到您在第一次提到 UART0后又切换到了 UART1。 我的问题:我可以访问一个 UART、它可以是 UART0、也可以是 UART1。

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

    现在我看到了。

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

    我想可以使用 JTAG 对引导加载程序进行编程、并通过 UART1加载我的固件和后续固件版本。  

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

    尊敬的 Charles:

    我尝试 JTAG 刷写基于 UART 的引导加载程序(仍然使用 UART0)、目的是验证 使用 CCS 中的 JTAG 编译和加载的步骤序列。 加载前、 我使用 CCS 提供的 mass_erase 脚本擦除闪存。 接下来、我关闭了 CCS、重置并运行 script_2、因为如果一切都运行正常、BOoltoader 位于闪存中。 运气差。

    可能是什么问题?

    此致!

    Magda.

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

    您好!

    我使用 CCS 提供的 mass_erase 脚本擦除了闪存。

    由于你是在使用 JTAG 来下载代码、所以你实际上并不需要执行 mass_erase。 仅当您使用基于 ROM 的引导加载程序通过串行接口加载程序时、才需要擦除操作。 如果您打算使用 JTAG 来下载 CCS 中的代码、您只需像 blinky 或 hello 等程序那样下载代码。  

    擦除和整体擦除之间也有差异。 批量擦除不仅会擦除闪存、还会擦除所有非易失性寄存器和 EEPROM。 如果您要使用 ROM 引导加载程序通过 UART 或任何串行接口下载代码、只需进行定期擦除即可。 但是、如果您发现执行 mass_erase 更加方便、也没有问题。  

    接下来我关闭了 CCS,重置并运行 script_2,因为如果一切正常,BOoltoader 将在闪存中。 没有运气。

     -检查您尝试使用 JTAG 加载的闪存引导加载程序映像。 是 C:\ti\bsl-Scripter\ScriptExampleWindows\E4xx_uart\boot_uart_flash_msp-EXP432E401y.txt 吗?

     -接下来在 CCS 内存浏览器中检查闪存的内容。 您看到闪存引导加载程序映像从0x0开始吗?

     -接下来,您可以在运行 script_2.txt 之前重置设备吗?

     接下来检查 script_2.txt 中的 COM 端口。 是否在设备管理器中显示了正确的 COM 端口?

     -执行上述步骤没有问题

    请注意、今天是我公司的美国假期。 我的假期一直持续到周一下午。 我的答复可能会有延误。  

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

    有一个很好的长周末查尔斯和非常感谢你的所有帮助。 将在星期一联系。

    我正在执行您建议的所有步骤、但"擦除"除外。 运气差。 更进一步,我觉得每次我需要交换应用程序,UART! 引导加载程序需要位于闪存中的地址0x0处。 这意味着通过 UART0将其下载并写入闪存、或使用 JTAG 写入闪存。 在生产模式下、将无法访问 JTAG 连接器、并且只能访问一个 UART 端口、可 预选为0或1。 那么、我想在我的环境下 、使用 UART1是行不通的。 我将进一步介绍它。

    此致!

    Magda.

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

    校正:我意识到基于 UARt1的引导加载程序可以在存储器地址0x0处刷写一次并驻留在那里、因为应用程序从0x4000开始。 这应该起作用。

    此致!

    Magda.

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

    尊敬的 Charles:

    以下是我的状态:

    1. 在以下情况下收到错误消息"No Response Bytes received from BSL":

      a.编译和构建项目 boot_serial_uart_flash_msp_EXP432E401Y_nortos_ccs。

      b. JTAG 对闪存中的文件 boot_serial_uart_flash_msp_EXP432E401Y_nortos_ccs.out 进行编程、

      c.关闭 CCS、重置 LaunchPad  

     d.运行 script_2.txt

    2.在以下情况下成功:

      a. 我擦除闪存、

      b.重置 LaunchPad

      c.运行 script_1

       D.重置 LaunchPad

       e.运行 script_2.

    显然、ROM 引导加载程序在将 boot_serial_uart_flash_MSP_EXP432E401Y.txt 下载和写入闪存时会执行一些额外的步骤。 另外、这2个文件是否相同、只是格式不同- out 与 txt?  

    Magda.

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

    尊敬的 Magda:

     让我们确保您可以成功地使用 JTAG 来加载  C:\ti\bsl-Scripter\ScriptExampleWindows\E4xx_uart\boot_uart_flash_MSP-EXP432E401Y.txt、而不是您构建的.out 文件、因为我不知道您将什么更改为 bl_config.h 请执行以下操作:

    1.擦除闪存。 在 CCS 中、可以按如下方式进行擦除。 转到"Tools"->"On-Chip Flash"并点击"Erase Flash"按钮。 进入存储器窗口并查看0x0处的地址、其余部分全部为0xFFFFFFFF。  

    2.在 CCS 中,转到 Run->Load->Load Program 以使用 JTAG 加载 C:\ti\bsl-Scripter\ScriptExampleWindows\E4xx_UART\boot_uart_flash_msp-EXP432E401y.txt。 您也可以使用 Uniflash。  转到存储器窗口并确认闪存引导加载程序编程为0x0。  

    3.重置 LaunchPad。

    4.运行 script_2.txt。 请确保脚本中有正确的 COM 端口。  

    以上是我使用的步骤、它适用于我。  

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

    尊敬的 Charles:

    非常感谢! 你的步骤成功了。 我还重新导入了项目 boot_serial_uart_flash_msp_EXP432E401Y_nortos_ccs。我重新导入了项目、并重复了步骤。 它也起作用了。 不确定我是如何中断初始导入的-选中后、我将单个#define 恢复为 UART0。

    我实际上可以使用 UART0。

    最后、我有另一个问题:在运行 Blink_App2_MSP-EXP432E401Y 时、在按下 SW1按钮后、我尝试 调用一个脚本、擦除16kB 的闪存:如下所示:

    日志
    模式 E4xx COM6 UART 115200 DISABLE_AUTO_BAUD
    调试
    ERASE_SEGMENT_32 0x8000

    引导加载程序位于地址0x0、 Blink_App2_MSP-EXP432E401Y  位于 APP_BASE=0x400。 没有成功。

    如果没有 disable_auto_baud 属性、BSL 不确认命令 、并且显示的错误消息为"未从 BSL 接收到响应字节"。

    再次感谢您、

    Magda.

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

    尊敬的 Magda:

     有关详细信息、请参阅 BSL-scriptter 用户指南。  MSP432E 器件不支持 ERASE_SEGMENT_32以及相当多的其他命令。  

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

    再次感谢 Charles!

    实际上、我误读了规范、尝试了几件事情。 现在我注意到、如果选择了 UART 通信、则不支持擦除存储器。 和 TIDA-01547。 还有一个(希望有)最后一个问题:第3.1.11节提到了主存储器。 这个闪存存储器只是这个闪存存储器还是其中也包括 EEPROM 和易失性寄存器?

    好的。

    Magda.

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

    您好!

     主存储器只能是1MB 闪存。  

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

    非常感谢您的帮助!

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

    尊敬的 Charles:

    假设我使用 JTAG 或 Uniflash 来刷写 UART0引导加载程序和初始版本的固件。 需要更新时、 会向驻留固件应用程序发送一条命令以进行更新。 因此、FW 应用将跳转到引导加载程序。 接下来、运行 script_2、使用我的新 FW 文件的名称进行了修改。 如果在文件下载过程中中途下载电缆,谁也供电,会发生什么情况? 闪存有一个已部分下载的应用程序。 是否有在没有 JTAG 的情况下恢复的方法?  

    请注意、根据 引导加载程序(BSL) Scripter 文档、除非为 USB 配置了引导加载程序、否则我无法运行脚本来擦除 MSP432Exx 闪存。

    此致!

    Magda.

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

    尊敬的 Magda:

     您可以实现 CRC 校验。 如果固件更新未完成、引导加载程序将再次等待新映像。