烧录下载

FAQ1 烧录方式及选择建议

思澈科技公司当前量产的系列芯片均支持 JLINK(SWD)串口 两种方式烧录,选择建议如下:

  • 研发阶段:推荐 JLINK 调试,烧录可选 JLINK 或串口

  • 生产阶段:推荐串口(成本低、稳定性好)

芯片系列

调试接口

研发烧录接口

生产推荐烧录接口

SF32LB55X

JLink(SWD)

JLink(SWD) / 串口3

串口3

SF32LB58X

JLink(SWD)

JLink(SWD) / 串口4

串口4

SF32LB56X

JLink(SWD) / 串口1

JLink(SWD) / 串口4

串口4

SF32LB52X

JLink(SWD) / 串口1

串口1

串口1

备注

SF32LB52X系列芯片由于 SWIO和SWCLK两个管脚在上电时默认复用为UART1的TX/RX功能,所以默认是通过UART1进行调试和烧录,如果想用JLINK(SWD)调试,需要软件代码修改管脚复用后才可使用。SF32LB52X使用串口调试需要借助UsartServer工具,参考 UsartServer使用说明


FAQ2 烧录工具如何选择

Solution方案提供 Butterfli 工具支持研发人员日常编译烧录,提供 Impeller 工具支持产线生产,提供 ImgDownUart.exeImgDownUart.dll 支持客户做二次开发。

工具

用途

Butterfli.exe

Solution 编译烧录工具,烧录 IMG, 写 MAC/SN 等 (针对开发)

Impeller.exe

产线烧录校准工具,16通道,烧录/晶体校准/写 MAC/SN 等

ImgDownUart.exe

供客户二次开发,通过命令行调用,烧录/晶体校准/写 MAC/SN 等

ImgDownUart.dll

供客户二次开发,加载动态库,烧录/晶体校准/写 MAC/SN 等

RambinDown.dll

供客户二次开发,下载ramrun的镜像文件到目标板,主要用于算法及加密KEY烧录


FAQ3 是否必须在boot模式烧录

产线烧录环境为保证稳定性要求bootmode管脚拉高,非产线环境烧录时,除了SF32LB55X / SF32LB58X系列用串口烧录必须先进入boot模式,其他场景烧录可以不用进入boot模式,遇到烧录异常时再进入boot模式排查。


FAQ4 如何进入boot模式

SF32LB55X / SF32LB56X / SF32LB58X系列芯片通过拉高bootmode管脚进入boot模式,SF32LB52X系列芯片需要借助Sifli_Trace工具(在工具接收子窗口勾选52X_BOOT,连接串口,然后重启板子,打印enter boot mode flow success表示进入了boot模式)。


FAQ5 串口烧录如何选择波特率

思澈芯片串口烧录方案中,6M波特率是经过大量产线验证的,在选用的串口芯片支持能力下,可以尽可能设置高一点的波特率。如果无法确认串口芯片最大支持的波特率,可以通过设置1M – 2M – 3M – 6M来实验确认。



FAQ8 如何读取/擦除坏块保护区

NAND FLASH会把后面1/32的空间用来做坏块保护区,正常的驱动是无法直接操作该区域的。有些场景需要读取坏块保护区数据做分析,或者擦除坏块保护区继续使用,例如烧录时log中提示坏块保护区初始化异常或者坏块保护区满导致失败的场景。

操作坏块保护区,主要是选择关闭坏块管理功能的驱动即可:

  • 使用JLink(SWD)时选择对应平台设备带NOBBM的,该设备配置的驱动即为关闭坏块管理功能的驱动。

  • 使用串口时可以用Butterfli工具操作坏块保护区,参考 Butterfli使用说明-FLASH读写


FAQ9 如何读取OTP保存的内容

串口烧录驱动程序中有读取OTP的finsh命令,所以可以下载驱动到板子中运行后通过命令读取,最简单的操作方式是使用Impeller工具,具体步骤如下:

  • 按照烧录的环境连接好板子

  • Impeller工具选择校准功能,校准48M晶体,参数设置页面不要勾选 “下载完重启”;

  • 执行校准,没有校准金机的情况向校准会失败,这个不会影响,因为驱动已经运行起来;

  • 打开串口调试工具(SiFli_Trace工具即可),连接烧录用的串口,发送finsh命令:

    • otp_factory_read 这个命令是查询当前定义保存在OTP一些信息

    • otp_read 0 1 查询OTP区域1的数据

    • otp_read 0 2 查询OTP区域2的数据

    • otp_read 0 3 查询OTP区域3的数据


FAQ10 烧录工具如何二次开发

客户可以基于 ImgDownUart.exeImgDownUart.dll 进行二次开发,定制自己的UI程序。

  • ImgDownUart.exe使用介绍

    该工具是使用C代码开发的控制台应用程序,可以通过命令行调用,具体介绍参考随工具发布的说明文档,主要提供如下功能:

    展开细节
    - 全芯片擦除功能  
      ImgDownUart.exe --func 3 --device SF32LB52X --port COM8 --baund 1000000 --loadram 1 --log log.txt  
    - 区块擦除功能  
      ImgDownUart.exe --func 2 --device SF32LB52X --port COM8 --baund 1000000 --loadram 1 --raddr 0x14000000 --rlen 0x100000 --log log.txt  
    - 文件列表烧录功能  
      ImgDownUart.exe --func 0 --device SF32LB52X --port COM8 --baund 3000000 --loadram 1 --postact 0 --compare --verify --file "ImgBurnList0.txt" --log log.txt  
    - 单个文件烧录功能  
      ImgDownUart.exe --func 0 --device SF32LB52X --port COM8 --baund 3000000 --loadram 1 --postact 0 --compare --verify --raddr 0x14000000 --image "flash2.bin" --log log.txt  
    - 指定Flash物理地址修改字符 传入HEX转换的字符  
      ImgDownUart.exe --func 15 --device SF32LB52X --port COM8 --baund 1000000 --loadram 1 --fish "7 0x14000000 123456789ABCDE" --log log.txt  
    - 指定Flash物理地址修改字符 传入字符串  
      ImgDownUart.exe --func 16 --device SF32LB52X --port COM8 --baund 1000000 --loadram 1 --fish "7 0x14000000 zBu+CEV" --log log.txt  
    - 指定范围读取  
      ImgDownUart.exe --func 1 --device SF32LB52X --port COM8 --baund 1000000 --loadram 1 --raddr 0x14000000 --rlen 0x100000 --file "d:\123.bin" --log log.txt  
    - 48M晶体校准功能  
      ImgDownUart.exe --func 8 --device SF32LB52X --port COM6 --baund 1000000 --loadram 1 --fish "ble_crystal_cali 30 6 0x71764129 1600 200 400 3" --log log.txt  
    - 读取UID  
      ImgDownUart.exe --func 12 --device SF32LB52X --port COM29 --baund 1000000 --loadram 2 --fish efuse_uid_read --log log.txt  
    - 写入MAC  
      ImgDownUart.exe --func 12 --device SF32LB52X --port COM29 --baund 1000000 --loadram 2 --fish "otp_factory_write 1 c80012345678" --log log.txt  
    
  • ImgDownUart.dll使用介绍
    该动态库是使用C代码实现,具体介绍参考随动态库发布的说明文档,主要提供如下API接口:

    展开细节
    - 加载烧录驱动  
      int LoadDriver(char* devName, char* port, char* driver, R_dllCallDebug tracehook);  
    - 48M晶体校准  
      int CrystalCali(char* port, int califreq, R_dllCallDebug tracehook);  
    - IMG烧录功能  
      int DownloadImg(char* port, int baund, T_IMG_LIST* imglist, R_dllCallDebug tracehook);  
    - 写入FLASH otp数据  
      int WriteOtp(char* port, u8 opcode, u8 len, u8 *pData, R_dllCallDebug tracehook);  
    - 读取FLASH otp数据  
      int ReadOtp(char* port, u8 opcode, u8 len, u8 *pMem, R_dllCallDebug tracehook);  
    - 读取Flash数据  
      int ReadFlash(char* port, int baund, u32 addr, u32 len, u8* pMem, R_dllCallDebug tracehook);  
    - 擦除flash数据  
      int EraseFlash(char* port, u32 addr, u32 len, R_dllCallDebug tracehook);  
    - 获取芯片的UID  
      int GetUid(char* port, u8* uid, R_dllCallDebug tracehook);  
    - 用户自定义TRACE回调函数  
      typedef  void (*R_dllCallDebug)(char* msg);  
    

FAQ11 获取支持的FLASH型号

驱动文件夹中会附带一个 readme.txt 文件,记录驱动发布时间及支持的 NAND/NOR FLASH 的型号,这些FLASH型号都是调试过驱动的,部分型号在客户量产产品上使用过,所以建议选择这些型号的FLASH。


FAQ12 如何新增FLASH型号

如果客户选择的FLASH型号不在当前驱动支持的列表中,需要客户自行将该型号的FLASH添加到烧录驱动以及固件代码中,可参考 FLASH添加指南


FAQ13 特殊数据保存位置

一些特殊数据,如ATE校准数据、算法加密KEY、生产校准数据、MAC地址、SN等是保存在特殊位置的,如下表所示:

6.tools/png/burn_003.png

备注

表中红色部分数据是存放在NAND FLASH/EMMC的普通地址区域的,这些区域在正常烧录固件IMG时只要地址不冲突是不会被擦除的,但是全擦除时是会被擦除掉的。如果想擦除烧录的固件内容又不想擦除这些特殊数据,建议用产线工具Impeller的擦除非产线数据区的功能。除了红色数据部分,存放在EFUSE的数据只能写入1次,OTP或者FLASH普通数据区域支持多次擦除写入。


FAQ14 固件包外发烧录处理

有客户为提高生产效率,会在PCBA贴片前将需要烧录在外部存储器的固件外发烧录,然后再将烧录好的存储芯片贴到PCBA板上。

针对客户外发烧录需求,思澈公司会提供如下资源:

  • ImgStamp工具,该工具将同一个存储器上的img拼接为1个bin文件,具体参考工具包里面的使用说明。

  • 如果是外发烧录的存储器是NAND FLASH,还需要提供方案中NAND FLASH坏块保护相关资料,确保坏块替换规则一致。


FAQ15 烧录驱动获取

  • 串口烧录驱动 串口烧录驱动会随烧录工具发布,一般是放在工具路径下的file文件夹中,文件夹中还会有一个readme.txt文件,记录驱动编译的时间以及支持的flash型号。

  • JLink烧录驱动 Jlink烧录驱动在 SDK代码包\tools\flash\jlink_drv 文件夹下,将JLinkDevices.xml拷贝到JLink安装路径下,将该路径下所有子文件夹中的elf文件拷贝到 JLink安装路径\Devices\SiFli 文件夹。


FAQ16 串口烧录常见问题分析方法

烧录时可能因各种问题导致失败,可以根据log进行基本定位,正常的串口烧录流程如下所示:

备注

Impeller工具查看 工具路径\log\channel\日期\chanx_日期.txt
Butterfli工具查看 工具路径\ImgDownUart_log.txt

烧录流程中首先要下载烧录驱动到目标板,然后再执行烧录流程。LB55X/LB58X下载烧录驱动是工具同rom代码交互实现的,LB52X/LB56X下载烧录驱动是工具通过debug模块直接写入的,这两种方式下载烧录驱动流程不同,后面烧录的流程是一样的。

LB52X/LB56X 串口烧录 log 信息
```
workpath: D:\svn_tool\Impeller_x30_2022_m5\Release, toolpath: D:\svn_tool\Impeller_x30_2022_m5\Release
cur version 3.8, driver_external/internal_20251030
uart COM19 open success 
//---------------------------- 1.1 到此说明串口正常打开
RAM_PATCH: D:\svn_tool\Impeller_x30_2022_m5\Release\file\ram_patch_52X.bin
SIG_PUB: D:\svn_tool\Impeller_x30_2022_m5\Release\file\sig_pub.der
channel DownLoadUart start 
uart COM19 open success 
EnterDebugMode success: curbaund (1000000)
//---------------------------- 1.2 到此说明串口调试功正常打开
WriteMemSingle success: 0xf000edf0 0xa05f0003
ReadMemSingle success: 0xf000ee08 0x00000000
WriteMemSingle success: 0xf000ee08 0x00010000
WriteMemSingle success: 0xf000edfc 0x01000001
WriteMemSingle success: 0xf000ed0c 0x05fa0004
ReadMemSingle success: 0xf000edf0 0x02030003
ReadMemSingle success: 0xf000edf0 0x00030003
WriteMemSingle success: 0xf000edfc 0xa05f0003
WriteMemSingle success: 0xf000edfc 0x01000000
[R] PC: 0x000007d4  MSP: 0x20001020

DownLoadFileRam start
use driver: D:\svn_tool\Impeller_x30_2022_m5\Release\file\ram_patch_52X.bin
DownLoadFileRam over: PASS
//---------------------------- 1.3 到此说明烧录驱动下载成功
WriteMemSingle success: 0x5000202c 0xfffffc00
WriteMemSingle success: 0x50002030 0x00000000
[R] PC: 0x000007d4  MSP: 0x20001020
[R] PC: 0x2005a550  MSP: 0x20043920
[R] BMR: 0x00000001

fid:00000000 mtype:00000000 did:00000000
fid:00000085 mtype:00000020 did:00000018
fid:00000000 mtype:00000000 did:00000000

Serial:c2,Chip:4,Package:3,Rev:3  Reason:00000000
\ | /
- SiFli Corporation
/ | \     build on Oct 30 2025, 2.4.0 build 4f1f8907
2020 - 2022 Copyright by SiFli team
curent ver 20251030, otpbase 0x12000000
psram size:0x800000 addr:0x60000000
//---------------------------- 1.4 到此说明完成所有初始化,进入主函数
burn_speed 3000000 1000
burn_speed 3000000 1000
OK
//---------------------------- 1.5 到此说明修改波特率成功,后面流程用新波特率交互

//---------------------------- 2 以下是烧录流程
downloadfile: d:\007_watch_eh_lb523_nor_Keil\ota_manager.bin  addr: 0x120ae000  len: 377128 Byte
burn_erase_write 0x120ae000 0x5c128
burn_erase_write 0x120ae000 0x5c128
addr:0x120ae000 base:0x12000000 size:0x1000000 sector:0x1000 page:0x0 id:0x182085
ext_flash -1, g_base_addr 0x0, g_base_size 0x0
//---------------------------- 2.1 检测对应的flash/emmc信息,NOR/NAND flash 要有id号,为0表示未识别到
RX_WAIT:0 0
[0] run thread 0 addr:0x120ae000 len:0x20000
RX_WAIT:1 1
[1] run thread 1 addr:0x120ce000 len:0x20000
RX_WAIT:0 2
[2] run thread 0 addr:0x120ee000 len:0x1c128
OK
burn_verify 0x120ae000 0x5c128 0x43330e70
burn_verify 0x120ae000 0x5c128 0x43330e70
addr:0x120ae000 base:0x12000000 size:0x1000000 sector:0x1000 page:0x0 id:0x182085
V: 0x43330e70 vs 0x43330e70, TIMR:0xff DCR:0x800000
OK
download_image_simple_thread success 
//---------------------------- 2.2 到此说明该镜像文件烧录完毕
otpwrite: otp_factory_write 1 c80013140010
otp_factory_write 1 c80013140010
FACTORY_CFG_ID_MAC write ok with 6
OTP_FACTORY_WRITE_PASS
OTP_FACTORY_WRITE_PASS
//---------------------------- 2.3 到此说明写MAC成功,其他磁轭OTP的操作类似
burn_speed 1000000 1000
burn_speed 1000000 1000
OK
//---------------------------- 2.4 修改波特率为默认的1000000
DownLoadUart success 
DownLoadUart() pass
FINAL_PASS
```
LB55X/LB58X 串口烧录 log 信息
```
workpath: D:\svn_tool\Impeller_x30_2022_m5\Release, toolpath: D:\svn_tool\Impeller_x30_2022_m5\Release
cur version 3.8, driver_external/internal_20251030
uart COM12 open success 
//---------------------------- 1.1 到此说明串口正常打开
RAM_PATCH: D:\svn_tool\Impeller_x30_2022_m5\Release\file\ram_patch.bin
SIG_PUB: D:\svn_tool\Impeller_x30_2022_m5\Release\file\sig_pub.der
channel DownLoadUart start 
uart COM12 open success 
download D:\svn_tool\Impeller_x30_2022_m5\Release\file\sig_pub.der 
dfu_recv 296
dfu_recv 296
[I/DBG] command 3
[I/DBG] OK
download_boot_patch_sigkey over: success 
//---------------------------- 1.2 到此说明sig_pub.der下载成功
download D:\svn_tool\Impeller_x30_2022_m5\Release\file\ram_patch.bin 
dfu_recv 330
dfu_recv 330
[I/DBG] command 1
[I/DBG] OK
msh >
dfu_recv 550
dfu_recv 550
[I/DBG] command 2
[I/DBG] 512 
[I/DBG] OK
......
msh >
dfu_recv 2
dfu_recv 2
[I/DBG] command 4
//---------------------------- 1.3 到此说明烧录驱动下载完
Serial:c2,Chip:1,Package:0,Rev:80  Reason:00000000
\ | /
- SiFli Corporation
/ | \     build on Oct 30 2025, 2.4.0 build 4f1f8907
2020 - 2022 Copyright by SiFli team
curent ver 20251030
OK
download_boot_patch success 
//---------------------------- 1.4 到此说明烧录驱动运行进入主程序
burn_speed 3000000 1000
burn_speed 3000000 1000
OK
//---------------------------- 1.5 到此说明修改波特率成功,后面流程用新波特率交互

//---------------------------- 2 以下是烧录流程
downloadfile: d:\007_watch_eh_lb523_nor_Keil\ota_manager.bin  addr: 0x120ae000  len: 377128 Byte
burn_erase_write 0x120ae000 0x5c128
burn_erase_write 0x120ae000 0x5c128
addr:0x120ae000 base:0x12000000 size:0x1000000 sector:0x1000 page:0x0 id:0x182085
ext_flash -1, g_base_addr 0x0, g_base_size 0x0
//---------------------------- 2.1 检测对应的flash/emmc信息,NOR/NAND flash 要有id号,为0表示未识别到
RX_WAIT:0 0
[0] run thread 0 addr:0x120ae000 len:0x20000
RX_WAIT:1 1
[1] run thread 1 addr:0x120ce000 len:0x20000
RX_WAIT:0 2
[2] run thread 0 addr:0x120ee000 len:0x1c128
OK
burn_verify 0x120ae000 0x5c128 0x43330e70
burn_verify 0x120ae000 0x5c128 0x43330e70
addr:0x120ae000 base:0x12000000 size:0x1000000 sector:0x1000 page:0x0 id:0x182085
V: 0x43330e70 vs 0x43330e70, TIMR:0xff DCR:0x800000
OK
download_image_simple_thread success 
//---------------------------- 2.2 到此说明该镜像文件烧录完毕
otpwrite: otp_factory_write 1 c80013140010
otp_factory_write 1 c80013140010
FACTORY_CFG_ID_MAC write ok with 6
OTP_FACTORY_WRITE_PASS
OTP_FACTORY_WRITE_PASS
//---------------------------- 2.3 到此说明写MAC成功,其他磁轭OTP的操作类似
burn_speed 1000000 1000
burn_speed 1000000 1000
OK
//---------------------------- 2.4 修改波特率为默认的1000000
DownLoadUart success 
DownLoadUart() pass
FINAL_PASS
```

log 分析方法如下:

  • 如果按照上面描述找不到log文件,或者log文件内容为空,则大概率是调用烧录工具路径下的ImgDownUart.exe失败(可以直接双击ImgDownUart.exe,会提示异常无法打开),这种现象是缺失工具运行环境导致的,可参考 开发环境配置-安装Visual C++可再发行程序包 安装运行环境。

  • 如果 log中流程没有走到 1.1 步骤,则说明串口被占用或者串口号错误,这种情况需要关闭其他软件对串口的占用。

  • 如果 log中流程没有走到 1.2 步骤,则说明串口交互不成功,首先检查bootmode管脚是否拉高,LB58X/LB55X系列芯片必须拉高bootmode,LB52X/LB56X系列芯片遇到交互不成功的时候也需要拉高。

  • 如果 log中流程没有走到 1.3 步骤,则说明串口驱动镜像文件下载失败,这种现象最大的可能是串口环境稳定性不好,比如连线过长或者有干扰或者串口电平不匹配等。

  • 如果 log中流程没有走到 1.4 步骤,则说明串口驱动在运行的时候出现异常,这种现象一般都出现在目标板的最初烧录调试,跟目标板的硬件相关,比如功率电感、晶体等器件不符合要求,布线不符合要求、有器件漏焊接或者配件错误等,此种情况首先需要请硬件同事分析目标板,可以使用JLink读取异常时的PC指针信息给FAE做协助分析,或者请FAE提供驱动调试bin做进一步分析。

  • 如果 log中流程没有走到 1.5 步骤 (如果烧录的速率设置为1000000不会有修改波特率的步骤),即修改波特率之后没有打印OK信息,则说明使用的串口芯片不支持该波特率,这种情况直接将波特率设置为1000000再进行验证。

  • 流程进入烧录步骤之后,在 2.1步骤 需要确认烧录地址的存储器信息,对于NAND/NOR FLASH, 此处会打印 idsize等信息,对于 EMMC/SD NAND等,此处会显示 size信息,如果没有这些必要的信息,则说明驱动代码未识别到存储器,这种可能的原因有如下几个,请逐一排查:

    • 检查存储器件的焊接是否正常,测量供电是否打开。

    • 对于 NAND/NOR FLASH,首先确认该型号是否在驱动的支持列表中(工具路径下file文件夹的readme.txt文件),如果不在列表中请参考FLASH配置指南添加。

    • 如果外置存储器有特殊供电控制,需要拉高某一个PIN脚或者使用思澈30147电源芯片需要特殊配置,请使用 工具路径下file文件夹下的 BurnDriverEx 工具修改,使用方法参考BurnDriverEx使用说明

    • 如果是LB55X/LB58X 通过SDIO1控制的EMMC/SD NAND,因为SDIO1的PIN脚又两种复用配置方式,请使用 工具路径下file文件夹下的 BurnDriverEx 工具修改,使用方法参考BurnDriverEx使用说明

  • 流程进入烧录步骤之后,烧录过程中出现异常,可能出现的情况如下:

    • NAND FLASH 场景,log信息中有擦除失败或者写入失败信息,可能是坏块保护区异常,可以使用Butterfli工具擦除整片FLASH包括坏块保护区(选择NO BBM),再烧录验证,参考Butterfli使用说明-FLASH读写

    • SD NAND 场景,可能出现读写速度很慢导致流程超时异常,工具再每个交互步骤都有时间限制,这种现象可以在失败的时候通过串口工具发送 help 命令,看目标板是否有信息输出,如果有则基本确定是这种问题,需要联系FAE做进一步调试。

    • 擦写完成后最终校验失败,这种情况可能是FLASH不支持驱动设置的主频或者FLASH本身存在异常,这种现象可以使用Butterfli工具读取写入的数据与原始数据作对比,在做进一步确认,参考Butterfli使用说明-FLASH读写

    • 同一片存储设备烧录多个镜像时,有镜像成功,有镜像烧录失败,则需要确认失败镜像烧录的地址是否超过存储设备的size。


FAQ17 如何抓取串口交互数据

通过串口交互的工具,无论是烧录还是执行其他功能,分析问题最直接的就是看串口数据,可以安装一个串口监控软件,如Bus Hound等。Bus Hound用法如下:

../../_images/burn_0031.png ../../_images/burn_0041.png ../../_images/burn_0051.png