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创建基于 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最易于实施、而选项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
您好 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
尊敬的 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波特。 您的脚本是什么样的?
这可能不相关、但如果您使用 USB 转 UART 适配器、请确保 PC COM 端口设置为偶校验。
尊敬的 Jace:
我们将尝试进行此操作、并告知您更新内容。
谢谢
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: 好的、我在示波器上看到的是第二个批量擦除命令、日志中的六个字节正是发送的字节。 但它不是奇偶校验。 请参阅以下文章。
尊敬的乔治:
太棒了、我们非常感谢您付出的时间和努力。 您提到的任何数据 [引用 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 需要偶校验。 我认为您需要在这里后退一步、因为您有很多可能影响您联系的因素。 我将执行以下操作:
编辑:忘记添加以下内容:当连接到 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
[引用用户="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)的位置。
我不知道发生了什么、但我认为您只需要一次一步就能使事情正常工作。 我不知道有什么其他方法可以找出问题所在。
尊敬的 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 已将此主题标记为已解决、他可能看不到您的后续行动。 如果他没有响应、您可能需要启动一个新线程。
乔治