BT PAN OTA示例
源码路径:example/bt/pan_ota
支持的平台
sf32lb52-lcd_n16r8
sf32lb52-lchspi-ulp
sf32lb52-nano_a128r16
概述
本例程演示通过蓝牙连接手机的PAN协议后,通过Finsh命令向特定服务器注册设备,获取固件版本,并支持通过OTA方式进行固件升级。
添加 CA 证书
存放签名机构根证书
external/mbedtls_288/certs/default目录中存储着常用的 CA 证书文件certs目录下存储着用户增加的 CA 证书文件
如果 certs/default 目录下没有包含用户需要的 CA 根证书文件
则需要用户将自己的 PEM 格式的 CA 证书拷贝到“certs”根目录下。(仅支持 PEM 格式证书,不支持 DER 格式证书)
添加证书与DigiCert_Global_Root_CA2.crt并列存放

证书格式说明
PEM 格式证书PEM 格式证书 通常是以 .pem 和 .cer 后缀名结尾的文件。
使用文本编辑器打开后,文件内容以
-----BEGIN CERTIFICATE-----开头,以-----END CERTIFICATE-----结尾。DER 格式证书DER 格式证书 是二进制文件类型。
查看配置
查看proj.conf里如果开了PKG_USING_MBEDTLS_USER_CERTS,就会把certs根目录下的所有文件都合并到ports/src/tls_certificate.c

例程的使用
连接之前最好确保手机已经打开网络共享,如果在BT连接以后才打开共享网络,可以通过finsh命令”pan_cmd conn_pan”重新连接PAN从而连接到网络
IOS打开网络共享。IOS需要确保装备了SIM卡,打开个人网络热点即可:

不同安卓打开网络共享的路径不同,但都是在个人热点共享里面找到蓝牙网络共享并打开。安卓可以在连接WiFi基础上打开蓝牙共享网络:

例程开机会打开蓝牙的Inquiry scan和psage scan,用手机等设备可以搜索到本机并发起连接,本机的蓝牙名称默认是sifli_pan。
手机开启网络共享下,PAN协议才会连接成功,可以从log里面找到”pan connect successed”的打印。并且确保手机本身可以上网的情况下,再执行命令
本例程支持OTA功能,可以实现固件的远程升级。在使用OTA功能前,需要在SConstruct文件中添加以下配置:
if GetDepend('USING_DFU_PAN'): AddDFU_PAN(SIFLI_SDK)
OTA功能提供了以下命令:
check_dynamic_cmd- 注册设备到OTA服务器并检查新固件版本,有新版本则会设置更新标志位reset_to_dload_cmd- 检查更新标志位,重启设备进入OTA下载模式show_version_cmd- 显示当前固件版本信息
硬件需求
运行该例程前,需要准备:
一块本例程支持的开发板(支持的平台)。
手机。
布置好版本文件在服务器上,并对应build_ota_query_url下构建的URL
编译和烧录
切换到例程project目录,运行scons命令执行编译:
> scons --board=eh-lb525 -j32
切换到例程project/build_xx目录,运行[uart_download.bat],按提示选择端口即可进行下载:
$ ./uart_download.bat
Uart Download
please input the serial port num:5
关于编译、下载的详细步骤,请参考快速入门的相关介绍。
例程的预期结果
例程可以通过连接手机的PAN协议,执行命令后能正确注册设置至服务器,查询版本能返回json格式的版本信息。
注意: dfu_pan_query_latest_version()会获取服务器返回的json数据,并将固件结构体写入flash地址,以便后面直接下载,json如下,其中v1.1.bin是占位符文件,需要与固件文件放在一起,并与当前文件夹名称一致
{
"result": 200,
"message": "成功",
"data": [
{
"name": "v1.1",
"thumb": null,
"zippath": "https://xxx.xxx.com/download?path=example/SF32LB52_LCD_N16R8_TFT_CO5300/sf32lb52-lcd-n16r8/v1.1/v1.1.bin",
"files": [
{
"file_id": 391,
"file_name": "main.bin",
"file_size": 4087608,
"crc32": "0x1026622b",
"addr": "0x12460000",
"region_size": "0x00680000",
"note": null,
"name": "main.bin",
"url": "https://xxx.xxx.com/download?path=example/SF32LB52_LCD_N16R8_TFT_CO5300/sf32lb52-lcd-n16r8/v1.1/main.bin"
},
{
"name": "v1.1.bin",
"url": "https://xxx.xxx.com/download?path=example/SF32LB52_LCD_N16R8_TFT_CO5300/sf32lb52-lcd-n16r8/v1.1/v1.1.bin",
"addr": "",
"size": "",
"crc32": "",
"region_size": "",
"note": ""
}
]
}
]
}
连接好pan之后:
执行”check_dynamic_cmd”命令后,会打印如下信息:

执行”reset_to_dload_cmd”命令后,会打印如下信息:
升级进度,也可通过屏幕UI观察进度
执行”show_version_cmd”命令后,会打印如下信息:
表示从 v1.0 成功升级到 v1.1

异常诊断
参考文档
更新记录
版本 |
日期 |
发布说明 |
|---|---|---|
0.0.1 |
12/2025 |
初始版本 |