Air001基于Keil环境开发,使用airisp串口命令行烧录

Air001基于Keil环境开发,使用airisp串口命令行烧录


✨有人会有这样的疑惑,使用Keil平台开发,为什么不直接使用CMSIS-DAP直接烧录,还要使用串口方式来去单独烧录,不是我不想,目前使用合宙官方的Air103芯片版本的DAP-LINK v2烧录器对该Air001芯片烧录兼容性不如意,在使用DAP-LINK在烧录时,频繁出现烧录报错弹窗提示的情况。而使用airisp串口烧录不存在这个问题。

  • AirISP 量产烧录工具下载和介绍:https://arduino.luatos.com/airisp/
    • 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烧录报错信息

Air001基于Keil环境开发,使用airisp串口命令行烧录_第1张图片

Programming Failed!
Cannot access Memory (@ 0xe000edf0, Read, Acc Size: 4 Byte)
Error: Flash Download failed - "Cortex-M0+"

具体的原因,不知道是芯片自身的问题还是烧录器固件的问题。个人猜测很有可能是由于程序过大,导致写入时,程序临时转存空间被占用,导致写入报错。因为在测试烧录简单的,点灯程序没有问题,往往出现在大一点的程序烧录时出现此情况比较多。

  • 在Keil开发环境下,如果使用DAP-LINK工具调试,下载Air001不顺利的情况下,该工具是一个折衷的选择,虽然不是那么的方便,起码能让单片机跑起来。

在Keil中ASF转BIN文件实现方法

  • 在Keil软件界面-target设置-User选项
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第2张图片
  • 根据个人安装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 这是要转换的原始目标文件名以及文件位置。
  • 注意勾选对应的选项:
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第3张图片
  • 添加好命令行后,程序编译即可生成所需的BIN文件。
    在这里插入图片描述
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第4张图片

HEX转BIN方法实现以及工具

  • HEX转BIN工具使用的是 安富莱电子开源项目中所提供的转换工具:https://gitee.com/armfly/H7-TOOL_STM32H7_App/tree/master/Project/MDK-ARM(uV5)
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第5张图片
  • 下载下来就是这个工具:
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第6张图片
  • 修改一下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批处理即可生成。生成的为止在上一层目录,这个具体位置可以自己修改批处理内容来定。
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第7张图片

‍使用airisp串口命令行烧录

  • 工具下载地址:https://github.com/Air-duino/AirISP/releases/latest

  • 个人调用的是Arduino安装的Air001固件自带的airisp进行烧录。

  • ⚡使用此方法,需要提前让Air001进入ISP模式。(https://wiki.luatos.com/chips/air001/mcu.html#id4
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第8张图片

  • 新建一个批处理来执行对应的烧录命令。

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 烧录目标文件位置
  • 具体的命令行参考上面的源码文档相关信息。

Air001基于Keil环境开发,使用airisp串口命令行烧录_第9张图片

  • 执行批处理或者使用CMD直接调用命令行:
    Air001基于Keil环境开发,使用airisp串口命令行烧录_第10张图片

你可能感兴趣的:(Air001)