正常情况下,芯片的烧录方式有:

  1. 开发状态下,通过VSCODE直接烧录;
  2. 在线烧录时(连接PC),可用downloader工具来烧录(二合一的batch.bin);
  3. 出厂烧录时,可使用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 下的 \烧录相关\自行烧录芯片的参考\

        .