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.

[参考译文] MSP-FET:MSP Flasher 段擦除- regex 错误

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1128202/msp-fet-msp-flasher-segment-erase---regex-error

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

您好!

 我在重新编程单个存储器段(MSP430的信息存储器)时遇到问题。

软件:MSP Flasher v1.3.2

硬件:MSP FET 闪存仿真工具

首先:

我 使用./MSP430Flasher -r [test.hex、info]-v -z [VCC]读取芯片的信息存储器

一切都很好! 该工具将整个信息存储器写入 test.hex 文件。

现在、我更改 了 test.hex 文件中的一些参数。 之后、我尝试使用./MSP430Flasher -w test.hex -v -z [VCC]-e ERASE_SEGMENT 将包含更改参数的 Intel Hex 文件写回芯片

MSP Flasher 的输出显示:

抛出'STD::regex_error'实例后调用终止

what()_ regex 错误

用户指南 MSP Flasher 用户指南(修订版 E)指出、要对存储器段进行重新编程、您必须提供 Intel Hex 或 TI-txt 文件。 我做到了。  

此致

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

    尊敬的 Julian:

    解析命令时出现 regex 错误。  

    由于您正在尝试写入信息存储器、因此您需要执行-u 触发器来解锁信息存储器以写入该段。

    MSP Flasher 用户指南 第3部分应能为您提供帮助、第7部分提供了示例命令。

    此致、

    Luke

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

    为什么使用十六进制二进制? TI txt 格式很简单、您可以在其中更改二进制文件中的任何字节。 在十六进制文件中、每行有校验和、如果一个字节发生更改、则必须更新同一行中的校验和。

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

    您好!

    我 按照您的建议 使用了附加参数-u、但我仍会遇到相同的错误。

    在第7节中、有一些示例、但其中没有一个示例采用-u 或-e 选项

    我还尝试先使用选项-u 解锁存储器、然后使用-e 和-w 写入存储器、但没有成功。

    此致

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

    您好、

    我已经有了一个使用 Intel hex 的有效程序。 这是我使用该格式的唯一原因。

    此致

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

    我查看了 MSPFlasher 的源代码、看起来好像使用 C++正则表达式库来解析十六进制文件。 这表明您的数据文件有问题。

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

    这也是我的猜测。

    但我甚至无法将.hex 文件写回我之前使用命令 ./MSP430Flasher -r [test.hex、info]-v -z [VCC]读出的信息存储器。

    该文件必须具有正确的语法和数据。

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

    尊敬的 Julian:

    只是简单的检查。

    您是否能够在主部分进行编程? 简单的 GPIO 切换示例是一个很好的使用示例。 我不知道您使用的是什么器  件、但您可以在 dev.ti.com 上的 Resource Explorer 中找到一组示例、或者、如果您提供了该器件、我将为您找到示例代码。

    读取信息后、您用于写入的命令是什么?  

    "但我甚至无法将.hex 文件写回我之前使用命令 ./MSP430Flasher -r [test.hex、info]-v -z [VCC]读出的信息存储器。" -您是不是以未经更改的版本写回、只是为了查看您是否未遇到该错误。

    此致、

    Luke

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

    是的、这是我的意图。 写入未更改的版本是检查我的"已修改"文件中的错误。

    器件:MSP430F2370

    编程器:MSP-FET 闪存仿真工具

    对主部分进行编程是非常好的。 因此、我将使用以下命令:  

    /MSP430Flasher -w /home/../v1.3.hex -v -z [VCC]

    用于读取信息存储器的命令:

    /MSP430Flasher -r [test.hex、info]-v -z [VCC]

    用于写入信息存储器的命令:

    /MSP430Flasher -w /home/../test.hex -v -z [VCC]-u -e ERASE_SEGMENT -u

     

    此致

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

    尊敬的 Julian:

    我完成了简单的 GPIO 切换编程、然后读写了相同的代码。 我在执行此操作时没有得到 regex 错误、下面是我执行的步骤和命令。

    主编程检查

    1. MSP430Flasher -n MSP430F2370 -r [output.txt、main]
      1. 此命令用于以 TI 格式读取以进行检查、没有错误
    2. MSP430Flasher -n MSP430F2370  -r [output.hex、main]
      1. 此命令用于以 Intel 十六进制格式读取以进行测试、没有错误
    3. MSP430Flasher -n MSP430F2370 -w output.txt -v -z [VCC]-e ERASE_ALL
      1. 此检查用于使用 TI 格式进行完全擦除和编程、没有错误
    4. MSP430Flasher -n MSP430F2370 -w output.hex -v -z [VCC]-e ERASE_ALL
      1. 此检查用于使用 Intel Hex 格式进行完全擦除和编程、没有错误

    信息编程检查

    1. MSP430Flasher -n MSP430F2370 -r [infoTest.txt、info]
      1. 此命令用于以 TI 格式读取信息部分、没有错误
    2. MSP430Flasher -n MSP430F2370 -r [infoTest.hex、info]
      1. 此命令用于读取 Intel Hex 格式的信息部分、没有错误
    3. MSP430Flasher -n MSP430F2370 -w infoTest.txt -u -v -z [VCC]-e ERASE_SEGMENT
      1. 此命令用于将 TI 格式专门编程到信息部分、从而保持主函数不变。 没有错误
        1. 请注意、在 hex 文件中、第一行指示要擦除的存储器段
    4. MSP430Flasher -n MSP430F2370 -w infoTest.hex -u -v -z [VCC]-e ERASE_SEGMENT
      1. 此命令用于使用 Intel Hex 格式进行编程。 没有错误

    我从信息部分的第一行中删除了一个十六进制数字。 MSPFlasher 以代码59退出并声明"error within Intel Hex File"

    当您获得"std::regex_error"时、您能否像下面的图像一样发送 MSP Flasher 输出的屏幕截图?

    此致、

    Luke

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

    你好、Luke、

    这是我将获得的输出:

    我有相同的参数、在读取后不会改变 test.hex 文件  

    /MSP430Flasher -r [test.hex、info]-v -z [VCC]

    我的 test.hex 文件如下所示

    :10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
    :10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
    :10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
    :10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
    :10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
    :10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
    :10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
    :10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
    :10108000FFFFFFFFFFFFFFFF7F66077FFFFFFFFF01
    :10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
    :1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
    :1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
    :1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
    :1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
    :1010E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
    :1010F000FFFFFFFFFFFFFFFF8B8F918E828D4687E3
    :00000001FF

    我不知道它是否会产生影响、但我正在使用 Linux debian 系统。

    此致

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

    尊敬的 Julian:

    您是否能够查看 Uniflash 进行编程?

    如果您希望继续使用命令行、Uniflash 具有命令行界面。  《Uniflash 快速入门指南》; 《Uniflash 特定于 MSP430的用户指南》

    我们的文档未提及此 regex 错误、并且我无法重现此错误。 除非校验和错误、否则您的 Intel hex 文件格式看起来是正确的、但这不会引发 regex 错误。 您输入的命令也与我的命令具有相同的结构 、除非解析与文件位置有关。 您是否曾尝试将十六进制文件移动到 ti/MSPFlasher_1.3.20文件夹中、然后执行该命令?

    同样、如果您继续获取 regex 错误、我建议移至 Uniflash。

    此致、

    Luke

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

    您好、Luke、

    MSP Flasher 的 Linux 版本似乎存在问题。

    在 Windows 上、一切正常。

    如果我在 Linux 上执行完全相同的操作、我会反复出现"regex error"。

    相同的步骤、相同的命令、相同 的软件版本。

    我将查看 Uniflash 并尝试使其正常工作。

    此致

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

    您好、Luke、

    我安装了 Uniflash 并尝试从器件中读取内存。

    基于 GUI 的 Uniflash 版本可让您选择将内存导出为 int-hex。 这正是我所需要的、它运行良好。

    命令行工具 dslite 是否也具有此选项? 我找不到一种将内存保存为 int-hex 的方法。

    当前我使用此命令读取存储器:

    dlite --mode memory -c MSP430F2370.ccxml -r 0x1080, 16 -o test.hex

    但 test.hex 文件的格式不合适。

    此致

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

    尊敬的 Julian:

    通过 Uniflash、命令行工具将输出 COFF 或二进制格式、并且没有 TI-TXT 格式或 Intel Hex 选项。 默认为二进制、因此从命令获取的文件可能是二进制版本(当我执行相同的命令时、它会为我提供二进制文件、无论文件类型扩展名如何)。 我将联系 Uniflash 团队、请求在 未来版本中添加 TI-TXT 格式和 Intel Hex 格式。

    如果您需要 Intel-Hex 格式、我建议在开发项目时继续使用 Uniflash 的 GUI 版本。 或将二进制输出文件转换为 Intel hex。

    很高兴 MSPFlasher 在 Windows 上工作、这就是为什么当您在 Linux 上遇到 regex 错误时、我可以让它在我的计算机上工作的原因。 遗憾的是、MSPFlasher 将不再接收更新(目前 在发布此帖子时)。

    此致、

    Luke

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

    问题的一部分是缺少良好的错误消息。 代码仅依赖于默认错误方案。 我在 C++编程中还没有放弃很多时间、但快速搜索会显示使用 regex 的 try/catch 异常系统的示例。 将其添加到代码中应该有助于缩小错误的具体原因。

    从我抓取 MSP430Flasher 的副本开始已经有一段时间了、所以我安装了最新的。 我注意到、它指出、除非您重新编译代码、否则擦除段不适用于 Linux。 由于您需要无论如何编译它、因此可以添加异常处理。

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

    您好、Luke、

    我仍在尝试使其适用于 Uniflash。

    我正在使用以下命令读取信息存储器:

    dlite --mode memory -c MSP430F2370.ccxml -r 0x10808 -o filename.bin

    输出:具有信息存储器的二进制文件

    如果我尝试使用以下命令将此二进制文件写回器件:

    dlite --mode load -c MSP430F2370.ccxml -f C:\ti\uniflash_8.0.0\filename.bin、0x1080

    一切都很好!

    但我的目的是修改二进制文件中的某些信息、然后将其写回。

    如果我更改二进制文件中的任何值、然后将其写回、则会显示:

    我该怎么做? 我必须添加任何内容吗? --mode 加载正确的命令吗?

     我显然更改了地址0x1080x1089和0x1090处的值、但这正 是我想要的。

    此致

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

    尊敬的 Julian:

    我将与我们的内部团队核实、看看他们是否对此有进一步的见解。 我确实看到闪存模式是加载模式的更复杂版本、这似乎允许您省略验证选项来跳过验证。 不过、我会谨慎使用、任何验证都不会导致未知后果、具体取决于您正在进行的编程、尤其是与非 main 混淆。

    我将于9月7日星期三向您提供更多信息。

    此致、

    Luke

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

    尊敬的 Julian:

    请使用--mode 闪存  

    当您写入信息存储器而不是主存储器时、  需要在命令中添加一个附加选项。 默认情况下、仅擦除主存储器。

    1.擦除主内存和信息内存

    添加-s MSP430DownloadOptions="擦除主内存和信息内存"

    擦除存储器中的特定段

    添加-s MSPDownloadOptions="按地址范围(在下面指定)"-s MSP430EraseStartAddress="0x1088"-s MSP430EraseEndAddress="0x1090"

    只需额外提示即可将 Uniflash GUI 转换为 CLI、在设置选项卡下、等效选项将为-s Id="value"

    此致、

    Luke

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

    您好、Luke、

    这适用于 Windows。

    同样、我需要一个适用于 Linux 的解决方案。

    如果我在 Linux shell 上使用相同的命令,我将收到符号“(”)的语法错误。  

    选项-s MSPDownloadOptions="按地址范围(在下面指定)"在 Linux shell 中不起作用。

    是否有其他方法可以使用这些选项?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="531025" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/MSP-low-power-microcontroller-forum/1128202/MSP-FET-MSP-Flloadasher-segure-erase----regex-error/4203465#4203465"]以下选项不能按引用"linux/srand=选项[引用"rom.address"。

    指定的 ID 不正确。 正确的 ID 是:MSP430DownloadOptions

    在传入字符串时、用单引号将其括起来。  

    示例:

    s MSP430DownloadOptions='"按地址范围(在下面指定)"'