|
|
本帖最后由 coolzlp003 于 2026-1-31 13:51 编辑
汉朔价签使用的是MSP430G2553,要对该板子进行编程和烧录,按照网上大部分教程
都需要安装CCS或则IAR,然后生成Ti-Txet格式,再使用 launchpad 进行烧录,
或则使用CH340,USB转串口,进行BSL烧录,该软件 仅支持TXT格式的文件烧录,甚是不便
由于CSS、IAR还需要下载安装,有些麻烦,一番学习后,改为用vscode+mps430-elf-gcc,实现编译固件
但是gcc只能编译成,elf格式,或则hex文件,并不能直接编译成ti-txt格式用上述的软件下载
于是花了很多时间去测试和尝试 mspdebug、msp430proxy++、msp430flasher、等命令行工具,
也许是我姿势不对,不管怎么折腾,就是进不了BSL模式进行下载,折腾了很多天
在一切尝试都失败了,想放弃掉,偶然搜到一个工具 python-msp430-tools (基于python2的)
①转换成txt格式,使用上述工具进行烧录,根据readme里教程,解压缩,
然后进到解压缩目录文件夹下,安装 python setup.py install --user
安装结束可以查看帮助,输入msp430-convert --help,查看由elf或则hex转换格式 ti-txt格式命令
测试转换 msp430-convert -i elf -f titext -o ./Build/blink.txt ./Build/blink.elf
发现可以转换成txt格式,于是用上面的工具烧录测试,烧录后并没led闪烁,相反导致电脑死机蓝屏,测试好多次都是这样
百思不得其解,于是就打开 之前msp430flasher里一个烧录测试的txt文件,进行对比,突然发现,使用msp430-convert转换的txt
每16字节结束最后位置少了个空格,于是找到源文件内的python-msp430-tools-0.9.2\msp430\memory\titext.py,复制源码,喂给豆包,
把需要告诉它,很快找到问题症结,修改后代码替换原有代码
def save(memory, filelike):
"""output TI-Text to given file object"""
for segment in sorted(memory.segments):
filelike.write('@{:04x}\n'.format(segment.startaddress).encode('ascii'))
data = bytearray(segment.data)
for i in range(0, len(data), 16):
# 核心修改:在拼接的字节字符串末尾添加一个空格,再换行
hex_line = ' '.join(['{:02x}'.format(x) for x in data[i:i + 16]]) + ' '
filelike.write('{}\n'.format(hex_line).encode('ascii'))
filelike.write(b'q\n')
然后重新安装python setup.py install --user,再进行转换,可以一切正常了
②在上述的转换命令能正常使用后,想着能不能直接使用 msp430-bsl进行烧录
于是使用如下命令 :msp430-bsl --port COM19 --speed 9600 --control-delay=0.5 --invert-reset -e -P -V -r blink.hex -vv
[color=rgba(0, 0, 0, 0.85)][backcolor=rgba(0, 0, 0, 0.04)] [color=rgba(0, 0, 0, 0.85)]1.报错 TypeError: unicode strings are not supported, please encode to bytes: '\x80'
错误代码及源码喂给豆包,
# 原错误代码(bsl.py 开头)
BSL_SYNC = '\x80'
CMD_FAILED = '\x70'
DATA_FRAME = '\x80'
DATA_ACK = '\x90'
DATA_NAK = '\xA0'
# 修正后代码(加b前缀,转为bytes类型)
BSL_SYNC = b'\x80'
CMD_FAILED = b'\x70'
DATA_FRAME = b'\x80'
DATA_ACK = b'\x90'
DATA_NAK = b'\xA0'
还有其余地方一并修改掉,修改后保存,重新安装
2 再次进行烧录,已经没有上面的报错了,但是出现另外一个错误。
msp430-bsl --port COM19 --speed 9600 --control-delay=0.5 --invert-reset -e -P -V -r blink.hex -vv
Debug is False
Verbosity level set to 3
Python version: 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)]
pySerial version: 3.5
action list:
<bound method BSL.mass_erase of <msp430.bsl.target.SerialBSLTarget object at 0x00000230D47FA910>> ()
<bound method Target.program_file of <msp430.bsl.target.SerialBSLTarget object at 0x00000230D47FA910>> ()
<bound method Target.verify_by_file of <msp430.bsl.target.SerialBSLTarget object at 0x00000230D47FA910>> ()
<bound method SerialBSLTarget.reset of <msp430.bsl.target.SerialBSLTarget object at 0x00000230D47FA910>> ()
<bound method SerialBSLTarget.reset of <msp430.bsl.target.SerialBSLTarget object at 0x00000230D47FA910>> ()
INFO:BSL:Opening serial port 'COM19'
INFO:BSL:ROM-BSL start pulse pattern
An error occurred:
'device type not known 2553/0203'
Cleaning up after error...
INFO:BSL:closing serial port
将 \msp430\target.py 及错误代码 喂给豆包,说是已经识别出 设备ID 0x2553/ BSL版本号 0x0203,需要在设备清单里添加
查看 Ti官方手册里的 BSL说明 如下
于是在 target .py里添加相关信息
# known device list
DEVICEIDS = {
# CPUID BSLVER family
(0x1132, None): F1x, # F1122, F1132
(0x1232, None): F1x, # F1222, F1232
(0xf112, None): F1x, # F11x, F11x1, F11x1A
(0xf123, 0x0140): F1x, # F21x1
(0xf123, None): F1x, # F122, F123X
(0xf143, None): F1x, # F14x
(0xf149, None): F1x, # F13x, F14x(1)
(0xf169, None): F1x, # F16x
(0xf16c, None): F1x, # F161x
(0x2553, None): F2x, # 新增:MSP430G2553(核心适配点)
(0xf227, None): F2x, # F22xx
(0xf249, None): F2x, # F22xx
(0xf26f, None): F2x, # F24x
(0xf413, None): F4x,
(0xf427, None): F4x, # FE42x, FW42x, F41(5,7), F42x0
(0xf439, None): F4x, # FG43x
(0xf449, None): F4x, # F43x, F44x
(0xf46f, None): F4x, # FG46xx
}
再次执行安装命令,接着使用 msp430-bsl --port COM19 --speed 9600 --control-delay=0.5 --invert-reset -e -P -V -r blink.hex -vv
开始跑BSL烧录进度了~~~,修复基于python3,非常好用的工具,可以 适配windows、macos、以及linux下均可正常使用
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|