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.

[参考译文] MSP430F5325:基于 MSP430F5x 闪存的定制 UART 引导加载程序

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/675857/msp430f5325-msp430f5x-flash-based-custom-uart-boot-loader

器件型号:MSP430F5325
主题中讨论的其他器件: MSP-FET

您好!

我们计划为 MSP430F5325创建基于 UART 的自定义引导加载程序。 我们不能使用任何 JTAG 线路、只能使用其 UART TX 和 RX 引脚 P3.3和 P3.4。 因此、我们计划创建基于闪存的定制引导加载程序、该加载程序从 UART 获取 bin 映像并加载到应用程序区域。

基本上、我们计划使用 UART 创建一个代码、以获取日期并将其刷写到应用领域中。 这将用作引导加载程序代码、更新后将跳转到应用程序区域。

BL 的链接器文件将仅位于闪存位置 :origin = 0x4400、length = 0xBB80、而我们的应用程序代码链接器文件将仅位于 FLASH2 :origin = 0x10000、length = 0x4400。

我们已经看到一些 BSL 脚本编写器和自定义 BSL 示例、因此请告诉我们如何在应用中使用这些示例、看起来它在 JTAG 中使用了一些我们无法在应用中使用的引脚。 因此、请告诉我们您对上述方法的看法、并告知我们是否存在任何风险。

谢谢

Rahul

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

    您好!

    这里有几个选项。 MSP430F5325已经有一个基于 UART 的 BSL (基于定时器的 UART 实施)。 为此、它使用引脚 P1.1和 P1.2。 为了起诉 BSL、必须调用它。 这种方法的典型方法是在 TEST 和 RST 引脚上执行一个进入序列。 您还可以 通过应用程序中的软件条目进入 BSL。 然后、您可以对应用程序进行编程、 以通过一系列 GPIO 切换或 UART 上的特定数据流来调用 BSL。 还有一些其他选项、我将在下面进行概述。 话虽如此、有多种方法允许您使用 BSL、但您的应用空间却不能超过一半。

    1. 使用当前片上的 UART BSL、并通过软件条目调用。 使用应用程序中的某些标准(UART 流、GIPO 切换等)触发软件条目
    2. 自定义 BSL 以使用 UART 模块(P3.3和 P3.4)并执行第1点中描述的相同软件条目。
    3. 修改 MSPBOOT 以执行从闪存的应用端执行的所有操作。
    4. 自定义 BSL 以使用 UART 模块、并将进入序列修改为自定义序列(更改 BSL 调用函数)。

    为了便于实施、我列出了选项、其中选项1最易于实施、而选项4最难实施。 但是、选项3占用的资源最多、如果您尝试对 BSL 和应用使用相同的 UART 线路、则选项1可能会比较棘手。 选项2可能是您最好的选择、也是最干净的解决方案。

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

    您好!

    感谢您立即做出宝贵的响应。 另外、请告诉我您对以下内容的看法、

    那么、对于选项2、我们是否可以使用相同的 BSL 脚本程序窗口应用程序从 PC 发送图像文件?
    我们还可以使用简单的 TTL 到 USB 转换器将 MSP430 UART 转换为 USB 并将其连接到 PC 吗?
    在选项2中、如果您能告诉我们是否有任何文档或代码可用于自定义 BSL 并使用自定义的 BSL 更新现有代码、那将非常有帮助?

    谢谢
    Rahul

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

    Rahul、

    要使用 BSLScripter、您需要进行测试和 RST 连接才能调用 BSL。  如果这些引脚 A 不可用、则无法使用 BSLScripter。 如果您只更改外设接口 BSL 及其支持的接口(UART/I2C)、BSLScripter 仍将在这方面工作、但其他自定义将不起作用(也称为更改调用序列)。

    客户以前已经使用过 TTL 转换器。 如果您有一种在 TEST 和 RST 上执行进入序列的方法、我认为这一点没有问题。 我相信 客户在使用流量控制管路时已经取得了成功。

    所有定制 BSL 文档和代码均可在中找到  。 在这里、您可以找到 创建定制 BSL 应用手册及其关联的定制软件包 BSL430。

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

    您好!

    感谢您的回答、我们将检查这些链接。

    但是、我们这里的问题是、我们可以使用 TEST 和 RST 引脚或 JTAG 作为引导加载程序的初始加载、但一旦将其交付给客户、他就无法使用 JTAG 或 TEST 和 RST 引脚、这对他们不可用。 它们只能使用引脚 P3.3和 P3.4并将其连接到 PC。 只有这些引脚、客户才需要更新其固件。 因此、客户无法使用 TEST 和 RST 引脚或 JTAG 调用任何序列。 那么、我们能否定制 BSL 以将进入序列从 TEST 和 RST 引脚更改为某个按钮组合? 因此、在启动时、如果按下该按钮、它将转至 BSL 并等待来自 PC 的映像文件、然后加载到应用程序区域并跳转到应用程序区域。 请告诉我您对此有何看法。

    此外、如果我们无法使用 BSLScripter、我假设我们还需要创建一个 Windows 应用程序、以便通过 COM 端口将我们的映像文件发送到 MSP。 是这样吗? 或者、请告知我们是否有任何其他解决方案可通过 COM 端口将图像文件从 PC 发送到 MSP?

    谢谢
    Rahul

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

    可以、您可以将 BSL 调用方法更改为所需的任何方法。 实际上、在我们具有基于 USB 的 BSL 的 USB 器件上、它会在启动后立即寻找 PUR 引脚为高电平、以便引导至 BSL 模式。

    我只是得到确认、BSLScripter 实际上无法知道该器件是否处于 BSL 模式(因此它不会检查)。 这意味着、如果您有一种调用 BSL 的替代方法、如果您在通过 BSLScripter 发送命令之前确保器件处于 BSL 模式、则应该能够使用它。 如果您要使用它支持的标准外设接口(也称为 UART 或 I2C)、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jace、

    谢谢、听起来不错。 因此、基本而言、如果我们将 BSL 调用方法更改为自定义方法、那么我们可以使用相同的 Windows BSL 脚本程序员仅使用 MSP430F5325的 P3.3和 P3.4引脚通过 UART 更新固件。

    根据我们的理解、以下是步骤、如果我们错了或漏掉了任何步骤、请纠正我们的错误、

    我们需要更改 MSP430F5325的 MSPBoot_UART_F5529代码及其.cmd 文件以获得正确的内存位置。
    2.此代码将首先检查引导是否被强制,因此根据我们的需要自定义引导强制部分。
    如果强制执行引导、它将初始化 UART 引脚、以便根据我们的需求进行更改、然后检查来自 UART 的数据。  使用 JTAG 将此代码加载到 MSP430F5325。
    4.然后启动自定义引导顺序,并使用 UART 引脚 P3.3和 P3.4将器件连接到 PC 。 使用 Windows BSL Scripter 应用程序加载应用程序代码。
    然后 、BSL 将跳转到应用程序区域。

    请告诉我们我们的理解是否正确、或者我们是否遗漏了任何步骤。

    谢谢
    Rahul

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

    BSL 安全或 BSL 调用检查函数是在器件启动时调用的第一个函数(请检查文档以了解确切的序列)。 因此、如果您只是更改此函数如何知道如何在 BSL 模式下引导的机制、则不必编写您所讨论的任何检查。 然后、您只需交换外设接口代码即可使用 HW UART、BSL 将正常工作、尽管使用了不同的调用方法和 HW UART 接口。 如何执行此操作在自定义 BSL 文档及其参考文献中列出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jace:

    我们创建了一个 MSPBoot UART 单映像代码及其应用代码、并使用 Windows BSL Scripter 应用程序进行了尝试、但 BSL Scripter 似乎生成了9601波特率、以调用引脚序列来激活 MSP-FET 和 Rocket 硬件上的 BSL。 在我们的情况下无法实现这一点、因为它仅使用 TX 和 RX 线路、并且我们使用的 COM 端口可能无法自定义波特率。 在本例中、它在设置 COM 端口时显示错误、因此我们更改了 UartComm.h 文件中的以下内容

    静态常量 uint32_t invert_430_BSL_ADD = 1;

    更改为

    静态常量 UINT32_t Invoke_430_BSL_ADD = 0;

    现在、我们可以看到 Windows 应用程序正在运行、但它显示了一些标头错误、并且未更新固件、

    请告诉我们出错的地方。

    谢谢

    Rahul

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

    Rahul、

    "9601"波特率只是转换 HW (也称为 Rocket 或 MSP-FET)执行调用序列的代码。 当实际通信完成时、UART 仍将设置为9600波特。 您的脚本是什么样的?

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

    正如您在我的上述帖子的图像中看到的、我们使用的是命令行、

    BSL-Scripter.exe -n 5xx -initComm [COM1、UART、9600]-b -e ERASE_ALL -w App_Simple_F5325_UART_Single_Img.txt -v -z [SET_PC、0x4402]

    关于"9601"波特率、如果我们不像我在上一篇文章中提到的那样更改该值、它在设置串行通信时显示错误、并且仅在更改后才开始工作。

    在进一步调试时、我们发现 MSP430通过 UART 接收来自 PC 应用程序的0x80 0x21 0x00 0x11数据、其中0x80可以是标头、而下一个字节它正在检查长度。 但它看起来像代码所示的最大长度

    /*! 数据有效载荷的最大大小= 16个数据+ 1个 CMD + 3个 ADDR */
    #define PAYLOAD_MAX_SIZE (16+1+3)

    我们将从 PC 应用程序获取0x21。 这可能是我们获得的原因

    [ACK_ERROR_MESSAGE]数据包大小超出最大缓冲区大小!

    启动时出错。

    请告诉我们这里的问题所在。

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

    仅命令行很难调试、也不是复制到多个单元的最简单方法。 使用脚本可以控制要执行的确切事务。 它还允许您更好地控制加载图像的时序。 请参阅自定义 BSL 软件下载中的脚本示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这可能不相关、但如果您使用 USB 转 UART 适配器、请确保 PC COM 端口设置为偶校验。

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

    尊敬的 Jace:

    我们将尝试进行此操作、并告知您更新内容。

    谢谢

    Rahul

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

    我们假设奇偶校验错误、则所有字节都将错误。 但我们看到0x80作为第一个字节、我们认为它将是标头。 我们的理解是否正确? 无论如何、我们也会尝试更改奇偶校验、如果您能让我们知道如何在 BSL 脚本编写器应用程序中更改该校验、这将非常有用。

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

    我认为0x80告诉您奇偶校验设置不正确。  0x80的字节末尾将有一个"1"的偶校验位、但该值与停止位相同。  因此、1可以是奇偶校验位、也可以不是奇偶校验位、 而 只是一个长停止位或两个停止位。

    我对 G2553和 BSLDEMO 的所有经验都很丰富、因此我无法为您提供有关 F5xx 部件和脚本解释器的很多建议。  但我很好奇、在发送0x80后、下一个字节是非法值。  一个可能的解释是接收到0x80后接收器的波特率被错误设置。  G2553的 BSL 也需要一个0x80、并使用它来实际计算波特率。  也许您的 F5325也是如此、但处理器时钟错误、或者其他一些错误正在改变波特率。  如果延伸0x21 (00100001)、它可以是具有偶校验位的0x2 (P00000010)或0x4 (P00000100)。  

    嗯、我猜是这样。  但是、如果您可以捕获 Scripter 在示波器或逻辑分析仪上发送的内容并查看其实际内容、那将会很有趣。  我认为甚至无需连接 F5325即可进行该测试。  脚本编写器可能会以9600波特发送初始数据包、而不知道是否有侦听的内容。

    我不知道您是否可以在 Scripter 中更改奇偶校验。  它可能使用火箭或 MSP-FET 所期望的任何东西。  但您应该能够在 Device Manager (设备管理器)中启动 COM 端口并在其中设置奇偶校验。

    编辑: 在 Scripter 中更改奇偶校验似乎是错误的。  模式命令中似乎有一个奇偶校验选项、用于设置偶校验。  否则、它默认为无奇偶校验。  但是、如果您使用脚本、则会出现这种情况。  我看不到从命令行设置偶校验的方法。  --initComm 似乎没有该选项。

    Edit2:  我尝试了与 您所做的类似的操作、但没有连接 MSP 器件、并获得了以下详细日志文件:

    --------------------------------------
    BSL Scripter 3.3.0
    用于 BSL 编程的 PC 软件
    2018年4月04日18:52:54
    --------------------------------------
    BSL-scripter -i [COM4、UART、9600]-d -n 5xx -b -e ERASE_ALL
    打开 verbose!
    设备:5xx
    初始化通信参数:[COM4、UART、9600]
    RX_PASSWORD
     [80][21][00][11][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff] [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff](关闭)
     [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF]
     [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff]
     [ACK_ERROR_MESSAGE]未知的 ACK 值!
    批量擦除
     [80][01][00][15][64][A3]
     [ACK_ERROR_MESSAGE]未知的 ACK 值!

    因此、32字节密码的长度字节可能是正确的。  但我在示波器上看到的情况与此不同。  0x80看起来是一样的、但之后它看起来是不同的。  我将看到我是否可以解决它。

    编辑3: 好的、我在示波器上看到的是第二个批量擦除命令、日志中的六个字节正是发送的字节。  但它不是奇偶校验。  请参阅以下文章。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从我的示波器捕获中、看起来一切都是正确传输的、只不过它绝对不是奇偶校验。 我尝试进入设备管理器并将 COM 端口参数设置为偶校验、但脚本解释器无论如何都不传输奇偶校验。 我认为没有办法使它从命令行条目发送偶校验。

    但是、如果您将输入更改为脚本文件、并将"奇偶校验"添加到模式行、它将以偶校验的形式传输。 我强烈怀疑这就是您的问题所在。 BSL 需要偶校验、但没有奇偶校验、因此在0x80之后、字节可能会被错误解释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

     太棒了、我们非常感谢您付出的时间和努力。 您提到的任何数据 [引用 user="George Hug"]

    初始化通信参数:[COM4、UART、9600]
    RX_PASSWORD
     [80][21][00][11][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff] [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff](关闭)
     [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ [FF]
     [FF][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff][ff]
     [ACK_ERROR_MESSAGE]未知的 ACK 值!
    批量擦除
     [80][01][00][15][64][A3]
     [ACK_ERROR_MESSAGE]未知的 ACK 值!

    [/报价]

    正是我们在这里看到的。 我们尝试使用脚本文件并更改奇偶校验、但仍面临一些问题。 现在、我们可以看到这样的数据、

    和输出

    --------------------------------------
    BSL Scripter 3.3.0
    用于 BSL 编程的 PC 软件
    2018年4月06日11:01:28
    --------------------------------------
    输入文件脚本为:C:/Users/20126005/Desktop/Debug/script_5xx_uart.txt
    模式5xx UART COM1 9600奇偶校验
    //提供错误的密码
    //mass Eraseof the memory
    RX_PASSWORD .\pass32_default.txt
    阅读 txt 文件:C:\Users\20126005\Desktop\Debug\pass32_default.txt
    RX_DATA_BLOCK .\blinkLED_f5325.txt
    阅读 txt 文件:C:\Users\20126005\Desktop\Debug\blinkLED_f5325.txt
    [ACK_ERROR_MESSAGE]校验和不正确!
    [ACK_ERROR_MESSAGE]标头不正确!
    [ACK_ERROR_MESSAGE]标头不正确!
    写入164字节所需的时间:0.222秒
    数据写入速度:0.7213(kb/s)
    SET_PC 0x4402

    请告诉我们出错的地方。

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

    尊敬的 Jace:

    我们还尝试了脚本文件、但仍面临一些问题。 脚本文件如下所示、

    日志

    模式5xx UART COM1 9600奇偶校验

    RX_PASSWORD .\pass32_default.txt

    RX_DATA_BLOCK .\blinkLED_f5325.txt

    SET_PC 0x4402

    我们得到的输出是

    --------------------------------------

    BSL Scripter 3.3.0

    用于 BSL 编程的 PC 软件

    2018年4月06日11:01:28

    --------------------------------------

    输入文件脚本为:C:/Users/20126005/Desktop/Debug/script_5xx_uart.txt

    模式5xx UART COM1 9600奇偶校验

    //提供错误的密码

    //mass Eraseof the memory

    RX_PASSWORD .\pass32_default.txt

    阅读 txt 文件 :C:\Users\20126005\Desktop\Debug\pass32_default.txt

    RX_DATA_BLOCK .\blinkLED_f5325.txt

    阅读 txt 文件 :C:\Users\20126005\Desktop\Debug\blinkLED_f5325.txt

    [ACK_ERROR_MESSAGE]校验和不正确!

    [ACK_ERROR_MESSAGE]标头不正确!

    [ACK_ERROR_MESSAGE]标头不正确!

    写入164字节所需的时间:0.222秒

    数据写入速度:0.7213(kb/s)

    SET_PC 0x4402

    请检查随附的文件以了解更多详细信息、并告知我们您的意见。

    谢谢

    Rahul

    e2e.ti.com/.../blinkLED_5F00_f5325.txte2e.ti.com/.../pass32_5F00_wrong.txt

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

    35个无符号字符的列表对我来说很奇怪。  该列表中的某些内容似乎来自闪烁文本文件、但该文件中的许多字节在35列表中缺失。  您是如何捕获该列表的?

    似乎奇偶校验设置正确、但很难判断波特率是否完全匹配。

    您是否对原始 BSL 及其用于 TX 和 RX 的引脚执行了这些测试?  否则、最好先使其正常工作。  但我不得不说,我不知道是什么问题。

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

    Rahul、

    您在这里会遇到标头和校验和错误。 这可能意味着波特率问题或奇偶校验问题。 BSL 需要偶校验。 我认为您需要在这里后退一步、因为您有很多可能影响您联系的因素。 我将执行以下操作:

    • 首先、确保您的定制 BSL 能够与标准 BSL 接口正常工作。 这意味着将 BSLScripter 与 MSP-FET 或 BSL Rocket 结合使用、并使用标准 测试+ RST 输入序列。这样、您就知道从 PC 到器件的所有内容都很好、并且可以测试您的自定义 BSL 接口。 它还将为您提供 BSLScripter 的工作脚本
    • 接下来、将您的自定义进入序列添加到 BSL、并确保标准桥接器仍可进行通信。 这将测试您的进入序列是否正常、BSLScripter 仍可以与您的自定义进入序列进行通信。
    • 然后、将 MSP-FET 或 BSL Rocket 替换为 USB 转 UART 桥接器、以测试此接口是否与 BSL 正确配合使用。 您可能需要调整脚本、正如 George 在此时指出的那样。

    编辑:忘记添加以下内容:当连接到 MSP-FET/BSL Rocket 时、您需要将 UART TX/RX 与目标相匹配、因为 MSP-FET/BSL Rocket 针对您连接的对象进行了标记。 这是典型 UART 连接的不同形式、其中主机 TX ->从机 RX 和主机 RX <-从机 TX。

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

    尊敬的乔治:

    我们在 msp430bsl 代码 UART 接收部分创建了一个全局缓冲区、仅用于检查数据接收情况。 然后、在运行 Windows 应用程序后、我们只需暂停代码并检查缓冲区中是否存在接收到的数据包。

    我们尝试了像 putty/TeraTerm 这样的正常 Windows 串行端口应用程序、并尝试发送一些字节。 然后、我们验证了缓冲区、并获得了我们从 Windows 串行应用程序发送的确切值。 因此、我们假设 MSP UART 和时钟配置正确。

    请告诉我您的想法。

    谢谢

    Rahul

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

    感谢您的指导。 我们将完成您提到的步骤、并让您了解更新。

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

    [引用用户="Rahul TT"]

    尊敬的乔治:

    我们在 msp430bsl 代码 UART 接收部分创建了一个全局缓冲区、仅用于检查数据接收情况。 然后、在运行 Windows 应用程序后、我们只需暂停代码并检查缓冲区中是否存在接收到的数据包。

    我们尝试了像 putty/TeraTerm 这样的正常 Windows 串行端口应用程序、并尝试发送一些字节。 然后、我们验证了缓冲区、并获得了我们从 Windows 串行应用程序发送的确切值。 因此、我们假设 MSP UART 和时钟配置正确。

    请告诉我您的想法。

    谢谢

    Rahul

    [/报价]

    以下是 您在之前的帖子中包含的"闪烁"固件文件的前24个字节、以及实际传输的"无符号"值的屏幕截图的前13个字节:

    ------ 81 00 00 34 B0 13 48 44 0C 43 B0 13 18 44 B0 13 42 44 FF 3F 03 43 F1 03

    80 10 02 ------  34 B0 13--- 43 B0 13--- B0 13--- 43 F1

    我不知道 Scripter 如何实际发送数据、但您的捕获中似乎缺少了大量数据。  我认为80 10是接收数据的命令、但接下来 应该是02 44 00、用于获取 TI-txt 文件中的数据(@4402)的位置。

    我不知道发生了什么、但我认为您只需要一次一步就能使事情正常工作。  我不知道有什么其他方法可以找出问题所在。

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

    此主题目前具有解决此问题所需的所有信息。 现在、调试过程是从先前线程中概述的已知起始点逐步构建您的特定解决方案、以查看问题所在。 因此、我将把这个线程标记为"TI 认为已解决"并关闭这个线程。 如果出现的新问题未通过此处的信息解决、您可以回复该主题以重新打开它、或创建一个新主题、指出新问题并引用此主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jace:

    我们已通过使用 Windows 应用程序从 PC 发送手动十六进制命令来确认自定义引导加载程序的工作情况。 我们可以看到、自定义引导加载程序正在响应我们的 Windows 串行应用程序、并且能够更新固件。

    因此、我们创建了一个 Windows 命令行应用程序、该应用程序执行类似于 TI Windows 应用程序的操作、能够更新 LED 闪烁固件、并且工作正常。

    但现在、如果我们使用一些基于 ISR 的代码、我们将面临一些问题。 当一个中断发生时、应用程序代码被重新启动。 我们假设它与代理矢量表有关。

    请告诉我您对此有何看法、如果您能帮助我们为应用代码设置中断矢量表及其 ISR、将会非常有帮助。

    谢谢

    Rahul

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

    您好、George、

    根据您的建议、我们已经完成了这些命令、并尝试为我们的闪烁图像文件发送手动创建的十六进制命令。 通过执行此操作、我们能够更新固件、并且自定义引导加载程序正在响应我们的命令。

    因此、我们创建了一个 Windows 命令行应用程序、该应用程序的功能类似于 TI Windows BSL 应用程序、并且能够更新固件。 但是、我们在基于中断的应用 程序代码中遇到了一些问题。 当中断发生时、它将重新启动、这可能是由于与中断代理矢量表相关的原因。  

    请告诉我您对此有何看法、如果您能让我们知道如何为我们的应用代码设置中断矢量表、那将会很有帮助。

    谢谢

    Rahul

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

    您好、Rahul、

    您的"代理矢量表"是否是从0xFFE0开始的实数矢量表的中间跳转表?  我过去曾提到过该选项、它是一种使用密码的方式、不会更改。  中断矢量始终指向跳转表中的相同位置、但跳转表的内容可能会随固件版本而变化。  跳转表由四字节长的分支指令组成。  因此、如果您使用所有中断、跳转表总共将是64字节、 但当然、您只需为应用程序将使用的所有中断提供一个表。  这个系统的一个示例是在我的 Github repo 中、但我恐怕它在汇编器中、而不是 C:

    github.com/.../2553-Jump-Table

    Jace 比我更清楚、但在中断上重新启动可能意味着中断矢量仍然为0xFFFF、或者可能会尝试向量进入非法位置。

    如果您可以为具有中断重启问题的简单"闪烁"应用发布代码、也许我们可以找出原因。  更好的方法是刷写该应用程序后的十六进制转储、该应用程序在0xFFE0处同时显示代理表和原始矢量表。  这将显示编译器实际生成的内容。

    我希望这对您有所帮助。  由于 Jace 已将此主题标记为已解决、他可能看不到您的后续行动。  如果他没有响应、您可能需要启动一个新线程。

    乔治

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

    如果您在中断上获得重置,则您要么没有初始化中断,要么使用代理 IV 表,您正在重定向到内存的不可访问部分,这将是导致重置的安全或内存违反。 您可以检查 SYS 复位寄存器以确定复位的原因。

    话虽如此、您实际上并不需要为自定义 BSL 使用代理 IV 表。 由于此问题超出了问题的初始范围、我建议使用此主题制作新主题(代理 IV 矢量问题)。 我将此帖子标记为 TI 认为已解决、并在自定义 BSL 问题的初始问题已解决时关闭。