AT+SYSMFG 命令示例
本文档提供使用 AT+SYSMFG 命令操作 manufacturing nvs 用户分区的详细示例。
介绍
概述
manufacturing NVS 分区包含多个命名空间,每个命名空间包含若干键值对,用于存储不同类型的配置信息。常用的命名空间包括:
命名空间 |
描述 |
相关 AT 命令 |
|---|---|---|
|
出厂参数(模组名称、Wi-Fi 配置、UART 配置等) |
参见 出厂参数配置介绍 |
|
SSL 客户端证书 |
|
|
SSL 客户端私钥 |
|
|
SSL 客户端 CA 证书 |
|
|
SSL 服务器证书 |
|
|
SSL 服务器私钥 |
|
|
SSL 服务器 CA 证书 |
|
|
MQTT 客户端证书 |
|
|
MQTT 客户端私钥 |
|
|
MQTT 客户端 CA 证书 |
|
|
HTTPS 客户端证书 |
|
|
HTTPS 客户端私钥 |
|
|
HTTPS 客户端 CA 证书 |
|
|
WPA2-Enterprise 客户端证书 |
|
|
WPA2-Enterprise 客户端私钥 |
|
|
WPA2-Enterprise 客户端 CA 证书 |
|
|
WebSocket 客户端证书 |
|
|
WebSocket 客户端私钥 |
|
|
WebSocket 客户端 CA 证书 |
|
|
低功耗蓝牙服务配置 |
查询当前固件实际支持的所有命名空间:
命令:
AT+SYSMFG?响应:
+SYSMFG:"factory_param" +SYSMFG:"client_cert" +SYSMFG:"client_key" +SYSMFG:"client_ca" +SYSMFG:"server_cert" +SYSMFG:"server_key" +SYSMFG:"server_ca" ... +SYSMFG:"mqtt_cert" +SYSMFG:"mqtt_key" +SYSMFG:"mqtt_ca" OK
备注
不同芯片和固件版本支持的命名空间可能不同。
本文档中所有示例的命令响应内容仅供参考,实际输出可能因芯片型号、固件版本和配置而异。
命名空间结构
每个命名空间是键值对的集合。不同命名空间的键命名约定不同:
证书相关命名空间(
client_cert、client_key、client_ca、server_cert、server_key、server_ca):使用<base_name>.<index>格式(例如client_cert.0、client_cert.1)来存储多套证书。factory_param命名空间:使用描述性键名(例如module_name、uart_port、country_code)。ble_data命名空间:使用cfg加索引的格式(例如cfg0、cfg1、cfg2)。
数据类型
AT+SYSMFG 命令中的 <type> 参数表示数据类型:
1:u8(8 位无符号整数,范围:0-255,例如:UART 端口号、信道号)
2:i8(8 位有符号整数,范围:-128 至 127,用于有符号配置值)
3:u16(16 位无符号整数,范围:0-65535,例如:GPIO 引脚编号)
4:i16(16 位有符号整数,范围:-32768 至 32767)
5:u32(32 位无符号整数,范围:0-4294967295)
6:i32(32 位有符号整数,范围:-2147483648 至 2147483647,例如:UART 波特率 115200)
7:string(文本字符串,例如:模组名称 “MINI-1”、国家代码 “CN”、低功耗蓝牙服务配置)
8:binary(二进制数据,例如:证书、私钥)
其他重要说明
长度参数说明:响应中的
<length>参数含义因数据类型而异:对于数值类型(类型 1-6):
<length>表示该数值的字符串表示的字符数。例如,i32 类型的波特率值 115200 显示为 6 个字符,因此 length 为 6。对于字符串和二进制类型(类型 7-8):
<length>表示实际的字节数。
二进制数据传输:写入二进制数据(类型 8)时,命令返回
>并等待您发送<value>参数中指定的确切字节数。数据持久化:写入 manufacturing NVS 的数据在设备重启后仍然保留,直到被明确擦除。
偏移读取:您可以使用偏移和长度参数从键中读取部分数据,这对处理大数据块很有用。
编译时与运行时:虽然某些数据(如低功耗蓝牙服务)可以在编译时通过修改源 CSV 文件并重新生成
mfg_nvs.bin进行自定义,但AT+SYSMFG命令允许您在运行时更新某些值,无需重新编译。参考资料:有关非易失性存储 (NVS) 概念和其他 NVS 操作的更多信息,请参考 ESP-IDF NVS 文档。
出厂参数配置
factory_param 命名空间存储设备的基本出厂参数,如 Wi-Fi 配置、UART 配置和模组信息。ESP-AT 在初始化过程中会读取这些参数,它们影响设备的默认运行行为。详情请参考 出厂参数配置介绍。
重要
修改出厂参数后,执行 AT+RST 或 AT+RESTORE 命令以重启设备,使更改生效。
查询所有出厂参数
命令:
AT+SYSMFG=1,"factory_param"响应:
+SYSMFG:"factory_param","version",2 +SYSMFG:"factory_param","module_name",7 +SYSMFG:"factory_param","max_tx_power",2 +SYSMFG:"factory_param","country_code",7 +SYSMFG:"factory_param","start_channel",1 +SYSMFG:"factory_param","channel_num",1 +SYSMFG:"factory_param","uart_port",2 +SYSMFG:"factory_param","uart_baudrate",6 +SYSMFG:"factory_param","uart_tx_pin",6 +SYSMFG:"factory_param","uart_rx_pin",6 +SYSMFG:"factory_param","uart_cts_pin",6 +SYSMFG:"factory_param","uart_rts_pin",6 +SYSMFG:"factory_param","sys_store",1 OK
模组名称操作
读取模组名称:
命令:
AT+SYSMFG=1,"factory_param","module_name"响应:
+SYSMFG:"factory_param","module_name",7,6,MINI-1 OK
写入新的模组名称:
命令:
AT+SYSMFG=2,"factory_param","module_name",7,<name_length>响应:
OK >返回
>后,发送模组名称字符串。例如,发送 “MY-MODULE-01”。数据发送后的响应:
OK
验证配置是否生效:
命令:
AT+SYSMFG=1,"factory_param","module_name"响应:
+SYSMFG:"factory_param","module_name",7,12,MY-MODULE-01 OK模组名称已成功更新为 “MY-MODULE-01”。
UART 配置操作
读取 UART 端口:
命令:
AT+SYSMFG=1,"factory_param","uart_port"响应:
+SYSMFG:"factory_param","uart_port",2,1,1 OK
读取 UART 波特率:
命令:
AT+SYSMFG=1,"factory_param","uart_baudrate"响应:
+SYSMFG:"factory_param","uart_baudrate",6,6,115200 OK
更新 UART TX 引脚:
命令:
AT+SYSMFG=2,"factory_param","uart_tx_pin",6,17响应:
OK备注
重启后,需要切换硬件连接到新引脚或通过新的 UART 配置发送 AT 命令来验证修改是否生效。
最大发射功率操作
读取最大发射功率:
命令:
AT+SYSMFG=1,"factory_param","max_tx_power"响应:
+SYSMFG:"factory_param","max_tx_power",2,2,78 OK
更新最大发射功率:
命令:
AT+SYSMFG=2,"factory_param","max_tx_power",2,60响应:
OK关于可以设置的 Wi-Fi 最大发射功率值,请参考 AT+RFPOWER 命令中
<wifi_power>参数的取值范围。
重启设备使配置生效:
命令:
AT+RST响应:
ready
验证配置是否生效:
命令:
AT+SYSMFG=1,"factory_param","max_tx_power"响应:
+SYSMFG:"factory_param","max_tx_power",2,2,60 OK最大发射功率已成功更新。
使用 AT+RFPOWER 命令进一步验证:
命令:
AT+RFPOWER?响应:
+RFPOWER:60 OK最大发射功率现在为 60 (60 × 0.25 dBm = 15 dBm)。
国家代码操作
读取国家代码:
命令:
AT+SYSMFG=1,"factory_param","country_code"响应:
+SYSMFG:"factory_param","country_code",7,2,CN OK
更新国家代码:
命令:
AT+SYSMFG=2,"factory_param","country_code",7,2响应:
OK >收到
>后,发送国家代码(例如 “US”、”JP”、”EU”)。数据传输后的响应:
OK
重启设备使配置生效:
命令:
AT+RST响应:
ready
验证配置是否生效:
命令:
AT+SYSMFG=1,"factory_param","country_code"响应:
+SYSMFG:"factory_param","country_code",7,2,US OK国家代码已成功更新为 “US”。
更新信道数量为 11(美国标准):
命令:
AT+SYSMFG=2,"factory_param","channel_num",1,11响应:
OK
重启设备使配置生效:
命令:
AT+RST响应:
ready
使用 AT+CWCOUNTRY 命令验证国家码和信道配置:
命令:
AT+CWCOUNTRY?响应:
+CWCOUNTRY:0,"US",1,11 OK响应说明:
0:国家码策略(0 表示使用默认国家码配置)
"US":国家代码
1:起始信道 (start_channel)
11:信道数量 (channel_num)配置已成功生效,设备现在使用美国的国家代码和信道配置。
系统存储模式操作
sys_store 参数控制系统是否将配置更改自动存储到 flash。此参数与 AT+SYSSTORE 命令的功能相关。
读取当前系统存储模式:
命令:
AT+SYSMFG=1,"factory_param","sys_store"响应:
+SYSMFG:"factory_param","sys_store",1,1,1 OK
sys_store的值:
0:不自动存储配置到 flash(相当于AT+SYSSTORE=0)
1:自动存储配置到 flash(相当于AT+SYSSTORE=1,默认值)
更改系统存储模式为不自动存储:
命令:
AT+SYSMFG=2,"factory_param","sys_store",1,0响应:
OK
重启设备使配置生效:
命令:
AT+RST响应:
ready
验证配置是否生效:
命令:
AT+SYSMFG=1,"factory_param","sys_store"响应:
+SYSMFG:"factory_param","sys_store",1,1,0 OK
使用 AT+SYSSTORE 命令进一步验证:
命令:
AT+SYSSTORE?响应:
+SYSSTORE:0 OK系统存储模式已成功更改为不自动存储(
0表示关闭自动存储)。
更改后的影响:
当 sys_store 设置为 0 后,配置更改(如 Wi-Fi 设置或其他支持自动存储的命令)不会自动保存到 flash,重启后会恢复为之前保存的配置。受影响的命令详见 AT+SYSSTORE。
如果需要在 sys_store=0 模式下保存特定配置,可以使用 AT+SYSSTORE 命令临时启用存储,执行配置命令后再关闭。
添加自定义键值对
除了预定义的出厂参数外,您还可以在 factory_param 命名空间中添加自定义键值对来存储应用特定的配置数据。
本示例演示如何添加一个自定义键值对,例如存储设备序列号:
添加自定义字符串类型键值对:
命令:
AT+SYSMFG=2,"factory_param","device_sn",7,16响应:
OK >返回
>后,发送设备序列号(例如 “SN202601050001”)。数据发送后的响应:
OK
读取自定义键值对:
命令:
AT+SYSMFG=1,"factory_param","device_sn"响应:
+SYSMFG:"factory_param","device_sn",7,16,SN202601050001 OK
添加数值类型的自定义键值对:
命令:
AT+SYSMFG=2,"factory_param","hw_version",6,1001响应:
OK这将存储硬件版本号 1001。
查询所有键值对(包括自定义的):
命令:
AT+SYSMFG=1,"factory_param"响应:
+SYSMFG:"factory_param","version",2 +SYSMFG:"factory_param","module_name",7 ... +SYSMFG:"factory_param","device_sn",7 +SYSMFG:"factory_param","hw_version",6 OK
删除自定义键值对:
命令:
AT+SYSMFG=0,"factory_param","device_sn"响应:
OK
备注
自定义键名应避免与预定义的键名冲突(如
module_name、uart_port等)建议使用有意义的键名,便于后续维护
自定义键值对在重启后保持持久化
过多的键值对可能影响性能,建议仅存储必要的配置信息
修改
factory_param中的值后,建议重启设备以确保应用程序正确读取新值
PKI 配置
PKI(公钥基础设施)配置用于创建、管理、分配、存储和撤销数字证书,以及管理公钥加密。ESP-AT 支持为多种功能配置证书,包括 SSL 客户端/服务器、MQTT 客户端、HTTPS 客户端等。所有证书的配置方法完全相同,均通过 AT+SYSMFG 命令操作对应的命名空间实现。更多详情请参考 PKI 配置介绍。
不同功能的命名空间映射:
功能 |
证书/密钥命名空间 |
|---|---|
SSL 客户端 |
|
SSL 服务器 |
|
MQTT 客户端 |
|
HTTPS 客户端 |
|
WebSocket 客户端 |
|
WPA2 Enterprise 客户端 |
|
备注
您可以通过 AT+SYSMFG? 命令查询当前固件支持的所有命名空间,以确认您需要的证书命名空间是否可用。
本节以 SSL 证书为例说明证书配置的完整流程。其他功能的证书配置(如 MQTT、HTTPS)可参照相同方法,仅需根据上表修改对应的命名空间名称即可。
SSL 客户端证书
client_cert、client_key 和 client_ca 命名空间存储用于安全连接的 SSL 证书和密钥。这三个命名空间可以协同工作以实现 SSL 认证(单向或双向认证)。
查询证书信息
读取客户端证书命名空间中的所有键值对:
命令:
AT+SYSMFG=1,"client_cert"响应:
+SYSMFG:"client_cert","client_cert.0",8 +SYSMFG:"client_cert","client_cert.1",8 OK同样,您可以查询 client_key 和 client_ca 命名空间:
AT+SYSMFG=1,"client_key" AT+SYSMFG=1,"client_ca"
读取特定的证书或密钥:
命令:
AT+SYSMFG=1,"client_cert","client_cert.0"响应:
+SYSMFG:"client_cert","client_cert.0",8,1164,<value> OK
配置证书
写入客户端证书:
命令:
AT+SYSMFG=2,"client_cert","client_cert.0",8,1164响应:
OK >返回
>后,发送证书数据(1164 字节)。数据发送完成后,系统返回:OK
写入客户端密钥:
命令:
AT+SYSMFG=2,"client_key","client_key.0",8,<key_length>响应:
OK >返回
>后,发送密钥数据。数据发送完成后,系统返回:OK
写入 CA 证书:
命令:
AT+SYSMFG=2,"client_ca","client_ca.0",8,<ca_length>响应:
OK >返回
>后,发送 CA 证书数据。数据发送完成后,系统返回:OK
使用证书
将客户端证书、密钥(双向认证时还需客户端 CA 证书)写入 manufacturing NVS 分区后,您可以使用它们建立安全的 SSL 连接。以下是示例:
确保证书已写入 manufacturing 分区:
客户端证书存储在
client_cert命名空间客户端密钥存储在
client_key命名空间客户端 CA 证书存储在
client_ca命名空间
配置 SSL 连接使用 manufacturing 分区证书:
命令:
AT+CIPSSLCCONF=3,0,0
响应:
OK
这将配置 SSL 客户端使用 manufacturing 分区中的证书(索引为 0)。
连接到 Wi-Fi:
命令:
AT+CWJAP="your_ssid","your_password"
响应:
OK
建立到服务器的 SSL 连接:
命令:
AT+CIPSTART="SSL","example.com",8883
响应:
CONNECT OK
SSL 连接将使用 manufacturing 分区中的证书进行身份验证。
备注
有关 SSL 配置的更多详细信息,请参阅 AT+CIPSSLCCONF 命令文档。
擦除证书
擦除特定的证书:
命令:
AT+SYSMFG=0,"client_cert","client_cert.0"响应:
OK
擦除命名空间中的所有键值对:
命令:
AT+SYSMFG=0,"client_cert"响应:
OK
您可以使用相同的命令擦除 client_key 和 client_ca 数据。
SSL 服务器证书
server_cert、server_key 和 server_ca 命名空间存储设备作为 SSL 服务器所需的证书和密钥。这三个命名空间可以协同工作以启用安全的服务器端 SSL 连接(单向或双向认证)。
查询证书信息
读取服务器证书命名空间中的所有键:
命令:
AT+SYSMFG=1,"server_cert"响应:
+SYSMFG:"server_cert","server_cert.0",8 +SYSMFG:"server_cert","server_cert.1",8 OK同样,您可以查询 server_key 和 server_ca 命名空间:
AT+SYSMFG=1,"server_key" AT+SYSMFG=1,"server_ca"
读取特定的服务器证书或密钥:
命令:
AT+SYSMFG=1,"server_cert","server_cert.0"响应:
+SYSMFG:"server_cert","server_cert.0",8,<length>,<value> OK命令:
AT+SYSMFG=1,"server_key","server_key.0"响应:
+SYSMFG:"server_key","server_key.0",8,<length>,<value> OK
配置证书
写入服务器证书:
命令:
AT+SYSMFG=2,"server_cert","server_cert.0",8,<cert_length>响应:
OK >返回
>后,发送证书数据。数据传输后的响应:
OK
写入服务器密钥:
命令:
AT+SYSMFG=2,"server_key","server_key.0",8,<key_length>响应:
OK >返回
>后,发送密钥数据。数据传输后的响应:
OK
写入 CA 证书:
命令:
AT+SYSMFG=2,"server_ca","server_ca.0",8,<ca_length>响应:
OK >返回
>后,发送 CA 证书数据。数据传输后的响应:
OK
使用证书
将服务器证书、密钥(双向认证时还需服务器 CA 证书)写入 manufacturing NVS 分区后,您可以基于这些证书创建 SSL 服务器。以下是一个完整的示例:
确保服务器凭证已写入 manufacturing 分区:
服务器证书位于
server_cert命名空间服务器密钥位于
server_key命名空间服务器 CA 证书位于
server_ca命名空间(可选,仅在需要客户端认证时使用)
启用多连接模式:
命令:
AT+CIPMUX=1
响应:
OK
启动 SSL 服务器:
如果只需要服务器单向认证(服务器向客户端提供证书):
命令:
AT+CIPSERVER=1,8883,"SSL"
响应:
OK
如果需要双向认证(服务器和客户端相互验证证书):
命令:
AT+CIPSERVER=1,8883,"SSL",1
响应:
OK
其中最后一个参数
1表示启用 CA 验证,服务器将使用 manufacturing 分区中的 CA 证书验证客户端证书。
设备现在在端口 8883 上监听 SSL 连接,SSL 服务器将自动使用 manufacturing 分区中的服务器证书和密钥。
当客户端连接时,SSL 握手将使用 manufacturing 分区中的服务器证书和密钥进行身份验证。
备注
SSL 服务器会自动从 manufacturing 分区(manufacturing partition)读取
server_cert和server_key命名空间中的证书和密钥,无需额外配置。如果在 AT+CIPSERVER 命令中启用了 CA 验证(
<CA enable>= 1),服务器还会从server_ca命名空间读取 CA 证书来验证客户端证书,实现双向认证。有关 SSL 服务器配置的更多详细信息,请参阅 AT+CIPSERVER 命令文档。
擦除证书
擦除特定的服务器证书:
命令:
AT+SYSMFG=0,"server_cert","server_cert.0"响应:
OK
擦除命名空间中的所有键:
命令:
AT+SYSMFG=0,"server_cert"响应:
OK
您可以使用相同的命令擦除 server_key 和 server_ca 数据。
GATTS 配置
ble_data 命名空间存储低功耗蓝牙 GATTS(Generic Attribute Profile Server)服务配置。该命名空间包含以 cfg0、cfg1、cfg2 等形式组织的各个 GATT 服务配置项,其中每个配置项表示 GATT 表中的一个属性(服务、特征或描述符)。更多详情请参考 低功耗蓝牙服务源文件介绍。
重要
使用
AT+SYSMFG命令修改ble_data命名空间时,需要在未初始化 BLE 的前提下执行。如果 BLE 已初始化,请先执行AT+BLEINIT=0关闭 BLE。在使用
AT+SYSMFG读取或写入ble_data命名空间之前,请先阅读 低功耗蓝牙服务源文件介绍 文档,了解低功耗蓝牙服务配置的结构和格式。
查询配置信息
读取配置项
读取 ble_data 命名空间中的所有配置项:
命令:
AT+SYSMFG=1,"ble_data"响应:
+SYSMFG:"ble_data","cfg0",7 +SYSMFG:"ble_data","cfg1",7 +SYSMFG:"ble_data","cfg2",7 +SYSMFG:"ble_data","cfg3",7 ... +SYSMFG:"ble_data","cfg30",7 OK
读取特定的 BLE 配置项(例如
cfg2表示 GATT 服务表中的一行):
命令:
AT+SYSMFG=1,"ble_data","cfg2"响应:
+SYSMFG:"ble_data","cfg2",7,23,2,16,0xC300,0x01,1,1,30 OK响应格式:
响应数据表示 GATT 表中的以下字段:
2: index(索引)
16: uuid_len(UUID 长度,以位为单位)
0xC300: uuid(UUID)
0x01: perm(权限)
1: val_max_len(最大值长度)
1: val_cur_len(当前值长度)
30: value(值)
配置服务
修改现有 BLE 特征的 UUID
此示例展示如何在运行时将特征的 UUID 从 0xC300 修改为 0xC500。
查询当前配置:
命令:
AT+SYSMFG=1,"ble_data","cfg2"响应:
+SYSMFG:"ble_data","cfg2",7,23,2,16,0xC300,0x01,1,1,30 OK当前 UUID 为
0xC300。
写入 UUID 为
0xC500的新配置:
命令:
AT+SYSMFG=2,"ble_data","cfg2",7,23响应:
OK >发送数据:
2,16,0xC500,0x01,1,1,30响应:
OK
查询配置项验证 UUID 是否修改成功:
命令:
AT+SYSMFG=1,"ble_data","cfg2"响应:
+SYSMFG:"ble_data","cfg2",7,23,2,16,0xC500,0x01,1,1,30 OKUUID 已成功更改为
0xC500。
重新初始化低功耗蓝牙并创建服务以应用更改:
命令:
AT+BLEINIT=2响应:
OK
查询服务以验证:
命令:
AT+BLEGATTSSRV?响应:
+BLEGATTSSRV:1,1,0xA002,1 +BLEGATTSSRV:1,2,0xA003,1 OK
查询特征以验证 UUID 更改:
命令:
AT+BLEGATTSCHAR?响应:
+BLEGATTSCHAR:"char",1,1,0xC500 +BLEGATTSCHAR:"char",1,2,0xC301 +BLEGATTSCHAR:"char",1,3,0xC302 +BLEGATTSCHAR:"char",1,4,0xC303 +BLEGATTSCHAR:"char",1,5,0xC304 +BLEGATTSCHAR:"char",1,6,0xC305 +BLEGATTSCHAR:"char",1,7,0xC306 +BLEGATTSCHAR:"char",1,8,0xC307 +BLEGATTSCHAR:"char",2,1,0xC400 +BLEGATTSCHAR:"char",2,2,0xC401 OK第一个特征现在显示 UUID 为
0xC500而不是0xC300。
添加新的自定义 BLE 服务
此示例展示如何在运行时添加一系列新的 BLE 服务,而不修改现有的服务配置。假设我们要添加一个自定义服务(UUID: 0xA100),包含一个可读写的特征(UUID: 0xB100)。
查询当前最后一个配置项的索引:
命令:
AT+SYSMFG=1,"ble_data"响应示例:
+SYSMFG:"ble_data","cfg0",7 +SYSMFG:"ble_data","cfg1",7 ... +SYSMFG:"ble_data","cfg30",7 OK假设当前最后一个配置项是
cfg30,我们将从cfg31开始添加新服务。
添加主服务声明(Primary Service Declaration):
命令:
AT+SYSMFG=2,"ble_data","cfg31",7,26响应:
OK >发送数据:
31,16,0x2800,0x01,2,2,A100数据格式说明:
31:配置项索引
16:UUID 长度(16 位)
0x2800:Primary Service Declaration UUID
0x01:权限(可读)
2:最大值长度(2 字节,用于存储服务 UUID)
2:当前值长度
A100:自定义服务的 UUID响应:
OK
添加特征声明(Characteristic Declaration):
命令:
AT+SYSMFG=2,"ble_data","cfg32",7,24响应:
OK >发送数据:
32,16,0x2803,0x01,3,1,02数据格式说明:
32:配置项索引
16:UUID 长度
0x2803:特征声明
0x01:权限(可读)
3:最大值长度
1:当前值长度
02:设置权限为读响应:
OK
添加特征值(Characteristic Value):
命令:
AT+SYSMFG=2,"ble_data","cfg33",7,31响应:
OK >发送数据:
33,16,0xB100,0x11,20,8,12345678数据格式说明:
33:配置项索引
16:UUID 长度
0xB100:特征值的 UUID(与特征声明中的 UUID 一致)
0x11:权限(读+写:ESP_GATT_PERM_READ (0x01) + ESP_GATT_PERM_WRITE (0x10) = 0x11)
20:最大值长度(允许最多 20 字节的数据)
8:当前值长度(初始值为 8 字节)
12345678:初始值(8 字节数据)响应:
OK
查询新添加的配置项验证:
命令:
AT+SYSMFG=1,"ble_data","cfg31"响应:
+SYSMFG:"ble_data","cfg31",7,26,31,16,0x2800,0x01,2,2,A100 OK命令:
AT+SYSMFG=1,"ble_data","cfg32"响应示例:
+SYSMFG:"ble_data","cfg32",7,24,32,16,0x2803,0x01,3,1,02 OK命令:
AT+SYSMFG=1,"ble_data","cfg33"响应示例:
+SYSMFG:"ble_data","cfg33",7,31,33,16,0xB100,0x11,20,8,12345678 OK
重新初始化低功耗蓝牙并创建服务以应用更改:
命令:
AT+BLEINIT=2响应:
OK
查询服务验证新服务已添加:
命令:
AT+BLEGATTSSRV?响应示例:
+BLEGATTSSRV:1,1,0xA002,1 +BLEGATTSSRV:1,2,0xA003,1 +BLEGATTSSRV:1,3,0xA100,1 OK新添加的服务 UUID
0xA100已出现在服务列表中。
查询特征验证新特征已添加:
命令:
AT+BLEGATTSCHAR?响应示例:
+BLEGATTSCHAR:"char",1,1,0xC300 +BLEGATTSCHAR:"char",1,2,0xC301 ... +BLEGATTSCHAR:"char",3,1,0xB100 OK新添加的特征 UUID
0xB100已出现在特征列表中(属于服务 3,特征索引 1)。
备注
BLE 服务配置要点:
添加新服务时,确保使用的
cfg索引不与现有配置冲突一个完整的 BLE 服务至少需要三个配置项:主服务声明、特征声明、特征值
如需特征描述符(如 Client Characteristic Configuration Descriptor),需添加额外配置项
特征属性值可组合使用,常用属性包括:0x01(广播)、0x02(读)、0x04(无响应写)、0x08(写)、0x10(通知)、0x20(指示)、0x40(认证签名写)、0x80(扩展属性)
数据格式与生效:
每个
cfg项对应 gatts_data.csv 文件中 GATT 服务表的一行数据格式:
index,uuid_len,uuid,perm,val_max_len,val_cur_len,value通过
AT+SYSMFG写入的配置需重新初始化 BLE(AT+BLEINIT)后生效更多 GATT 表结构详情,请参阅 如何自定义低功耗蓝牙服务
自定义数据存储
除了预定义的命名空间(如 factory_param、client_cert、server_cert 等)之外,您还可以创建自定义命名空间来存储自己的应用数据。这对于存储需要在重启后保留的少量持久化数据非常有用,例如自定义配置、用户偏好设置或设备特定的参数。
创建和使用自定义命名空间
本示例演示如何创建一个名为 my_app_ca 的自定义命名空间来存储应用特定的证书或配置数据。
创建新命名空间并写入数据:
命令:
AT+SYSMFG=2,"my_app_ca","my_app_ca.0",8,100响应:
OK >返回
>后,发送您的二进制数据(100 字节)。数据发送完成后,系统返回:OK命名空间
my_app_ca现已创建,其中包含一个键my_app_ca.0,存储了您的数据。
查询自定义命名空间:
命令:
AT+SYSMFG=1,"my_app_ca"响应:
+SYSMFG:"my_app_ca","my_app_ca.0",8 OK
从自定义命名空间读取数据:
命令:
AT+SYSMFG=1,"my_app_ca","my_app_ca.0"响应:
+SYSMFG:"my_app_ca","my_app_ca.0",8,100,<data> OK响应包含数据类型(8 表示二进制)、长度(100 字节)和实际数据。
向同一命名空间添加更多键:
命令:
AT+SYSMFG=2,"my_app_ca","my_app_ca.1",7,20响应:
OK >发送数据:
MyCustomConfigValue1响应:
OK
查询命名空间中的所有键:
命令:
AT+SYSMFG=1,"my_app_ca"响应:
+SYSMFG:"my_app_ca","my_app_ca.0",8 +SYSMFG:"my_app_ca","my_app_ca.1",7 OK
创建另一个命名空间存储应用配置参数:
如果您需要存储配置参数(而非证书数据),建议创建单独的命名空间以保持语义清晰。
命令:
AT+SYSMFG=2,"my_app_config","timeout",6,5000响应:
OK这将在
my_app_config命名空间中存储一个 i32 类型的配置值(类型 6),键名为 “timeout”,值为 5000。
读取配置参数:
命令:
AT+SYSMFG=1,"my_app_config","timeout"响应:
+SYSMFG:"my_app_config","timeout",6,4,5000 OK
擦除特定的键:
命令:
AT+SYSMFG=0,"my_app_ca","my_app_ca.1"响应:
OK
擦除整个命名空间:
命令:
AT+SYSMFG=0,"my_app_ca"响应:
OK
备注
自定义命名空间最佳实践:
自定义命名空间可用于存储任何类型的持久化数据
根据需求选择合适的数据类型:数值类型(1-6)用于数字,字符串(7)用于文本,二进制(8)用于证书或二进制数据
建议按用途分离命名空间:例如将证书数据(
my_app_ca)与配置参数(my_app_config)分开存储,便于管理和维护命名空间名称应具有描述性,清楚表明其用途(如
my_app_certs、my_app_settings)键名可以是任意字符串,但建议使用有意义的名称以便识别
所有自定义数据在重启后保持持久化,直到被明确擦除
自定义命名空间独立于系统命名空间,不会影响 AT 固件功能
创建自定义命名空间并存储数据后,可以使用
AT+SYSMFG?查询,在命名空间列表中看到它