Air001基于Keil环境开发,使用airisp串口命令行烧录
- 有人会有这样的疑惑,使用Keil平台开发,为什么不直接使用CMSIS-DAP直接烧录,还要使用串口方式来去单独烧录,不是我不想,目前使用合宙官方的Air103芯片版本的DAP-LINK v2烧录器对该Air001芯片烧录兼容性不如意,在使用DAP-LINK在烧录时,频繁出现烧录报错弹窗提示的情况。而使用airisp串口烧录不存在这个问题。
- 📑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
📋DAP-LINK烧录报错信息
Programming Failed!
Cannot access Memory (@ 0xe000edf0, Read, Acc Size: 4 Byte)
Error: Flash Download failed - "Cortex-M0+"
🔖具体的原因,不知道是芯片自身的问题还是烧录器固件的问题。
🛠在Keil中ASF转BIN文件实现方法
- 🌿在Keil软件界面-target设置-User选项
- 🍁根据个人安装Keil软件路径,调整下面的命令行:
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
这是要转换的原始目标文件名以及文件位置。
- 🚩注意勾选对应的选项:
- 🔧添加好命令行后,程序编译即可生成所需的BIN文件。
📐HEX转BIN方法实现以及工具
- 🌿HEX转BIN工具使用的是 安富莱电子开源项目中所提供的转换工具:
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文件。
- 🎋
- 🌿双击执行.bat批处理即可生成。生成的为止在上一层目录,这个具体位置可以自己修改批处理内容来定。
🏳🌈使用airisp串口命令行烧录
-
📍工具下载地址:
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
烧录目标文件位置
- 🔖具体的命令行参考上面的源码文档相关信息。
- 🌿执行批处理或者使用CMD直接调用命令行: