✨有人会有这样的疑惑,使用Keil平台开发,为什么不直接使用CMSIS-DAP直接烧录,还要使用串口方式来去单独烧录,不是我不想,目前使用合宙官方的Air103芯片版本的DAP-LINK v2烧录器对该Air001芯片烧录兼容性不如意,在使用DAP-LINK在烧录时,频繁出现烧录报错弹窗提示的情况。而使用airisp串口烧录不存在这个问题。
https://arduino.luatos.com/airisp/
.\AirISP -h
Description:
AirISP 是一个flash烧录工具
Usage:
AirISP [command] [options]
Options:
-c, --chip <chip> 目标芯片型号,auto/air001
-p, --port <port> 串口名称
-b, --baud <baud> 串口波特率
-t, --trace 启用trace日志输出 [default: False]
--connect-attempts <connect-attempts> 最大重试次数,小于等于0表示无限次,默认为10次 [default: 10]
--before <before> 下载前要执行的操作 [default: default_reset]
--after <after> 下载后要执行的操作 [default: hard_reset]
--version Show version information
-?, -h, --help Show help and usage information
Commands:
chip_id 获取芯片ID
get 获取ISP版本和支持的命令列表
get_version 获取ISP版本和芯片读保护状态
write_flash <address> <filename> 向flash刷入固件
read_unprotect 关闭读保护
read_protect 开启读保护
https://github.com/Air-duino/AirISP/releases/tag/1.2.6.0
Programming Failed!
Cannot access Memory (@ 0xe000edf0, Read, Acc Size: 4 Byte)
Error: Flash Download failed - "Cortex-M0+"
具体的原因,不知道是芯片自身的问题还是烧录器固件的问题。个人猜测很有可能是由于程序过大,导致写入时,程序临时转存空间被占用,导致写入报错。因为在测试烧录简单的,点灯程序没有问题,往往出现在大一点的程序烧录时出现此情况比较多。
C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o ./Objects/Serial_printf.bin ./Objects/Serial_printf.axf
C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe
这是要调用的程序位置--bin -o ./Objects/Serial_printf.bin
这是需要生成的目标文件名以及文件位置。 ./Objects/Serial_printf.axf
这是要转换的原始目标文件名以及文件位置。https://gitee.com/armfly/H7-TOOL_STM32H7_App/tree/master/Project/MDK-ARM(uV5)
CopyHex_h7_tool.bat
后缀的批处理文件内容就可以直接使用了copy Objects\Serial_printf.hex ..\app0.hex
hex2bin ..\app0.hex
copy Objects\Serial_printf.hex
拷贝相对路径下的.hex
到hex2bin软件的上一层目录下并重新命名为app0.hex
。hex2bin ..\app0.hex
执行该文件转BIN文件。工具下载地址:https://github.com/Air-duino/AirISP/releases/latest
个人调用的是Arduino安装的Air001固件自带的airisp进行烧录。
⚡使用此方法,需要提前让Air001进入ISP模式。(https://wiki.luatos.com/chips/air001/mcu.html#id4
)
新建一个批处理来执行对应的烧录命令。
cmd /k "C:\Users\Administrator\AppData\Local\Arduino15\packages\AirM2M\tools\AirISP\1.2.5.0/AirISP.exe --chip "auto" --port COM5 --baud 115200 --before default_reset --after hard_reset write_flash -e -p 0x08000000 "D:\HEZHOU\luatos-soc-air001-master\luatos-soc-air001-master\ModuleDemo\USARTx/app0.bin"
C:\Users\Administrator\AppData\Local\Arduino15\packages\AirM2M\tools\AirISP\1.2.5.0/AirISP.exe
所调用的程序位置。--chip "auto"
自动识别目标芯片。--port COM5
连接电脑的串口工具端口号。--baud 115200
烧录时选择的波特率。--after hard_reset write_flash -e -p 0x08000000
烧录地址。D:\HEZHOU\luatos-soc-air001-master\luatos-soc-air001-master\ModuleDemo\USARTx/app0.bin
烧录目标文件位置
- 具体的命令行参考上面的源码文档相关信息。