正常情况下,芯片的烧录方式有:
- 开发状态下,通过VSCODE直接烧录;
- 在线烧录时(连接PC),可用downloader工具来烧录(二合一的batch.bin);
- 出厂烧录时,可使用AGM官方的DapLink实现脱机烧录。
这里的“脱机烧录”是指:先通过downloader工具把bin从PC存储到Daplink上,然后再单独使用Daplink就可以对目标芯片进行烧录(可以省掉PC)。
如果开发者希望在出厂烧录环节,不使用dap-link,而是通过自己开发的其他单片机,来对目标板进行烧录,那么可以参考本文的方案。
本文提供的样例中,烧录机是用100pin的407开发板,对目标板(100pin的407开发板)进行烧录的演示。目标板通过串口0烧录。
烧录机的源码开放的,可移植的。
具体使用该源码时,请根据自己的情况,在看懂的情况下进行相应调整。
.
使用限制:
这种方案下,不支持对bin的加密(但支持flash_lock保护)。
.
基础信息:
1. 在对芯片出厂烧录时,其实需要烧录3部分内容:
code的bin、logic的bin、optionFlash部分的信息
其中“optionFlash部分的信息”是默认的。而code的bin和logic的bin,需要事先准 备好。
2. 烧录工作是由两部分配合完成的:
烧录机、目标芯片
其中目标板在运行ROM程序时(BOOT0拉高),会进入“烧录模式”。这种模式下,就是在while(1)等待烧录机发送不同的命令(烧录过程中的各种子命令)。
而烧录机,首先会控制目标芯片进入烧录模式,然后再把准备好的code.bin和logic.bin 分成两次烧录进去。
3. 开发者只需要关注“烧录机”部分的控制逻辑。
目标芯片端的ROM程序已经固化在芯片中,开发者不用关注。
4. 这个样例是从SDK下的examples/uart_master,改动少许而来。
是对“烧录机”代码的说明和使用的示范。
开发者可参考说明,在理解的基础上,根据自己的需求继续调整。
.
“烧录机”的使用逻辑(参照代码):
1. 烧录机和目标板之间的连线:
烧录机在VE里定义出来4根连线:UART0_TX、UART0_RX、TO_RESET、TO_BOOT0;
其中UART0_TX、UART0_RX,是要连接到目标板的串口0的RX和TX;
TO_RESET,是控制目标板的reset口;
TO_BOOT0,是控制目标板的boot0;
除了以上4根线,还需要两块板子共地的连线。(共5根线)
上边的TO_RESET和TO_BOOT0,用于控制目标板进入烧录状态。如果自己的治具里已 经能让目标板进入烧录状态,这两根线可以忽略。
2. 烧录机上电后,在main函数中只是board_init和初始化按键中断。
然后等待按键消息。
3. 烧录机根据按键,分别烧录准备好的bin。
这部分参考main.c的Button_isr函数。
样例中,按键SW_23,会烧录目标板的code.bin和logic.bin(非压缩格式);
按键SW_24,会烧录目标板的logic.bin(压缩格式);
4. 烧录完成后lock芯片。
.
代码简要说明:
1. Main.c:
在main()中仅完成初始化,
在Button_isr()中烧录目标芯片的code.bin和logic.bin;
这部分注意使用到的3个bin:example.inc、config.inc、config_compress.inc。
其中:
example.inc:是目标芯片最终要烧录的code.bin
config.inc:是目标芯片最终要烧录的logic.bin(非压缩)
config_compress.inc:是目标芯片的压缩格式的logic.bin(只是测试用)
如果开发者要使用这个框架,只需要替换config.inc和example.inc这两个bin即可。
2. uartMaster.c:
该.c中是对整个烧录过程交互的函数封装。
主要的对外接口是:装载ram程序、烧录code.bin、烧录logic.bin、启动及结束烧录。
实现细节可不用太关注。
这部分用到的几个bin:sram_decomp.inc、dfu_uart.inc、agrv32_fpga_decomp.inc。
这部分的3个bin,都使用demo中自带的即可。开发者不要更换。
注意:这个.c的封装支持对logic压缩和非压缩的自动判别。如果logic没有压缩,默 认是烧录到芯片的最后100K开始的地方,如果logic有压缩,则烧录到最后48K开始的 地方。如果目标程序有配置过logic烧录地址,这里也请自行修改到该位置。
3. Port.c:
这个.c较为简单,是方便移植到其他芯片时的串口对接部分。
更多信息,参考代码中的注释(以及工程readme.md的说明)。
如果验证的目标板是407开发板,使用样例工程(不必更换code.bin和logic.bin)可直接看到烧录后的闪灯变化。
上述使用到的code.bin和logic.bin,都是通过.inc内嵌进来的。
bin转换到inc,可使用bin2char.exe工具来转换。
.
这里对应的“烧录机”源码,从网盘上获取:
地址:https://pan.baidu.com/s/1rJiAJHQQCp8WPGSPwCLm1Q?pwd=1234 下的 \烧录相关\自行烧录芯片的参考\
.