跳转至

NV 基础与快速操作

概述

本指南介绍 2131E NV 模块的数据组织方式、配置与预定义 Key、DebugKits 连接密钥设置、NV 备份与恢复以及常见问题的处理方法。

NV 基础

NV模块应用于用户在Flash中存储非易失性数据。NV中的每项数据以类似map的方式进行定义,数据项中包含唯一的索引Key和自定义数据类型的NVvalue。模块与NV的定义存储在匹配版本的 Hi2131E NV 配置包的 JSON 文件中,自定义数据类型在同一配置包的 nv_common.h 中定义。用户可通过 JSON 配置文件和业务代码设置 NV。

说明:

  • 通常情况下,在使用NV模块时需预先定义NV的ID、属性及结构类型,便于业务使用及工具解析。
  • 定义新的NV需要修改配置文件,如果存在自定义的结构类型,需要添加到“nv_common.h”文件,供NV模块使用。

准备工作

开始操作前,请准备匹配 2131E 软件版本的 SDK 交付包、待烧写单板、可用的串口连接和 DebugKits。下表路径均以 2131E SDK 交付包根目录为基准:

项目 路径或要求 用途
密钥生成工具 tools\DebugKits\mk_pwd_nv_tool.exe 生成连接密钥和盐值
NV 配置文件 匹配版本的 Hi2131E NV 配置包中的 common.json 配置 secure_conn 等 NV
NV 结构定义 同一配置包中的 nv_common.h 定义 NVvalue 使用的数据类型
NV 黑名单 nv_blacklist.h 中的 g_blacklist_array 配置不参与备份、恢复及备份区读取的 NV_ID

说明:本文示例命令以一站式 CLI 为主。实际开发可从以下三种环境中选择,推荐使用一站式 CLI。

开发环境 适用场景 使用指南
一站式 CLI(推荐) 快速完成目标选择、构建、烧录和串口监视 一站式 CLI 开发环境使用指南
HiSpark Studio for VS Code 图形化编辑、编译、烧录和调试 HiSpark Studio for VS Code 开发环境使用指南
WSL 与 Docker 在 Windows 上使用一致的 Linux 容器构建环境 WSL 与 Docker 环境使用指南

确认口令、盐值和 NV 配置符合相应取值要求后,再生成并烧写镜像。环境准备、镜像生成和烧写请参见开发环境快速入门,建议优先使用一站式 CLI 开发环境。执行恢复前应先完成有效备份;备份区在出厂状态下为空。

快速操作

设置 DebugKits 连接密钥

当前,DebugKits与芯片进行安全连接需要进行密钥验证。如图1所示。

说明: 注意连接过程中使用了用户名为“user”的登录用户名,此用户名不需要通过界面输入。注意SDK包内无预置口令,需手动自定义口令添加,建议定期更新预置口令。

图 1 DebugKits与芯片进行安全连接设置界面一

**图 1** DebugKits与芯片进行安全连接设置界面一

密钥的生成和验证需要通过预置NV进行设置。主要包括以下三个步骤:

  1. 生成连接密钥及盐值。

    工具文件:tools\\DebugKits\\mk\_pwd\_nv\_tool.exe

    通过命令行执行“mk_pwd_nv_tool.exe XXXXXX "test salt" ./test.bin”命令,可在命令窗口或“test.bin”中生成密钥和盐值,如图2所示。

    图 2 生成密钥和盐值

    **图 2** 生成密钥和盐值

    输入参数说明:

    • mk_pwd_nv_tool.exe:密钥生成工具。
    • XXXXXX:示例口令,即DebugKits连接时的输入密码。
    • "test salt":示例盐值(建议使用长度为 20 Byte 的真随机数)。
    • ./test.bin:输出路径。

    输出参数说明:

    • conn_vertify:连接密钥,用于板端芯片。
    • conn_salt:连接盐值,用于板端芯片。
    • salt_len:盐值长度,用于板端芯片。

    密钥生成设置说明:

    • 口令长度至少8个字符,最长不超过32个字符。
    • 口令必须包含至少两种字符的组合(小写字母、大写字母、数字、特殊字符)。
    • 盐值可任意设置,盐值长度不能为0,最长不超过20。
  2. 设置安全连接Key。

    设置安全连接 key 时,在匹配版本的 Hi2131E NV 配置包的 common.json 中新增一个名称为 secure_conn 的 NV。设置安全连接 key 即预置 secure_conn 的 NVvalue,其中 NVvalue 为步骤 1生成的连接参数,NV 配置格式如下:

    "secure_conn":{
        "key_id": "0x2006",
        "key_status": "alive",
        "structure_type": "secure_conn_t",
        "attributions": 1,
        "value": [[conn_vertify],[conn_salt],salt_len]
    },
    

    安全连接 Key 配置示例

    **安全连接 Key 配置示例**

  3. 烧写NV进行密钥连接。

    通过镜像烧写,将重新生成包含安全连接密钥Key的NV镜像烧写到单板中,可使用新密钥进行DebugKits连接。

    图 3 DebugKits与芯片进行安全连接设置界面二

    **图 3** DebugKits与芯片进行安全连接设置界面二

备份与恢复 NV

恢复出厂设置主要提供一种NV异常恢复机制,主动将芯片的NV区恢复为初始备份状态。当芯片的NV区出现异常,即不能访问和修改时,可以通过AT命令使NV区的数据全部清除并恢复至原始出厂状态。备份区在出厂状态数据为空,需要用户主动进行备份,否则执行恢复出厂设置时,可能会导致NV恢复为空。

恢复出厂设置主要包含NV备份和NV恢复两个流程。

注意: 恢复出厂设置时,仅恢复和备份区重复的NV,新增NV不删除。

NV 备份

AT命令:AT&W0

AT&W0

应用核启动后,保持设备处于非入网的业务关机状态,发送 AT&W0,使芯片开始备份当前NV区的所有NV数据;参数 0 表示配置文件编号。命令返回“OK”,表示全量NV备份已完成。该命令不应在短时间内反复执行,最大备份次数为255次;全擦除模式下修改版本后,备份次数会被重置。备份区的数据以最近一次成功备份时的NV区数据为模板。

图 1 NV备份指令

**图 1** NV备份指令

NV 恢复

AT命令:AT&F0

AT&F0

当NV区发生异常,无法对其进行操作时,可以发送 AT&F0 进行恢复出厂设置;参数 0 表示将AT设置命令重置为出厂设置。恢复操作会将芯片复位,NV区的所有数据将会被擦除,并以备份区的数据为模板进行恢复。

图 2 NV恢复指令

**图 2** NV恢复指令

说明:

  • NV恢复出厂设置优先级最高,恢复时当前NV区的永久Key也会被擦除。
  • NV区备份时,蜂窝通信业务应处于关机、非入网状态,应用核保持启动以接收AT命令。量产后不应再使用备份功能。