Skip to content

1 文档介绍

1.1 文档范围及版本

本手册详细介绍了WIoTa终端模块及AP模组中FLASH中的静态数据的使用规则及相关接口。

静态数据版本分为AP、IoTE和Async,配置文件在最新的UC烧写工具版本中,本文档只介绍固件版本和静态数据版本的对应关系。

固件版本 静态数据版本
ap_v0.13 static_ap_v0.13.xlsx
ap_v0.14 static_ap_v0.14.xlsx
iote_v0.13 static_iote_v0.13.xlsx
iote_v0.14 static_iote_v0.14.xlsx
async_v0.02 static_async_v0.02.xlsx

async_v0.02与iote_v0.14的静态数据结构完全一致。

1.2 静态数据结构

最新整体结构图如下:

终端静态数据总长度728byte,基站静态数据总长度572byte。

结构 长度
静态数据头标志 2 byte
静态数据版本号 2 byte
总静态数据长度 4 byte
有效的静态数据长度 4 byte
只读数据长度 4 byte
CRC32值 4 byte
静态数据 基站:552 byte 终端:708 byte

在芯片FLASH中的起始位置如下表。
备份区及其操作对于用户来说不可见,不可操作。

类型 静态空间起始位置 静态空间大小 备份空间起始位置 备份空间大小
IoTE 0x7F000 4KB 0x7E000 4KB
AP 0x1FF000 4KB 0x1FE000 4KB

1.2.1 静态数据头结构

1.2.1.1 静态数据头标志

静态数据头标志在所有表之前。

类型 长度(字节) 内容
静态数据头标志 2 "UC"

1.2.1.2 静态数据版本

默认值1,随静态数据结构变动而变动。

1.2.1.3 总静态数据长度

基站侧默认值572 byte(v0.13版本为552bytes), 终端侧默认值728 byte(v0.13版本为724bytes),该值一旦确定便不会更改。

1.2.1.4 有效静态数据长度

有效静态数据长度是指实际的静态数据长度,基站侧默认值552 byte(v0.14版本为552bytes,v0.13版本为532bytes), 终端侧默认值708byte(v0.14版本为708bytes,v0.13版本为704bytes),该值一旦确定便不会更改。

1.2.1.5 只读静态数据长度

不可更改的成员的总长度。

1.2.2 静态数据

1.2.2.1 OTA静态信息表

OTA静态信息表,总长36bytes,其中未用到的空间为预留位。(v0.14版本为36bytes,v0.13版本为32bytes,区别详见下表,之前版本不再支持)

名称 长度(字节) 类型 默认值 用途 备注
baud_flag 1 数值 0 是否设置过uboot波特率 0/1
mode 1 字符串 ` uboot工作模式 小写字母'a'~'g'
uart_flag 1 数值 1 日志串口选择 0/1
log_flag 1 数值 0 日志开关 0/1
select_flag 1 数值 1 uboot提示开关 0/1,v0.14开始才有此参数
NA 3 0 预留 v0.14开始才有此参数
baud_rate 4 数值 115200 uboot波特率 >=0
file_size 4 数值 0 已下载文件文件大小 0~252k
record_address 4 数值 0 记录下载文件地址 reserved开始地址/ota开始地址
version 4 字符串 v1.0 uboot版本 0~4byte
bin_partition_size 4 数值 224k 镜像分区大小 224k~476k
reserved_partition_size 4 数值 128k 恢复区分区大小 0~252k
ota_partition_size 4 数值 124k OTA分区大小 0~252k

AP侧的OTA静态信息表,总长20bytes。 (v0.13版本无此表)

名称 长度(字节) 类型 默认值 用途 备注
baud_rate 4 数值 115200 uboot波特率 >=0
file_size 4 数值 0 已下载文件文件大小 0~704k
select_flag 1 数值 0 uboot提示开关 0/1
log_flag 1 数值 0 日志开关 0/1
uart_flag 1 数值 1 日志串口选择 0/1
empty_flag 1 空位 0 占位用的 ---
version 4 字符串 v1.0 uboot版本 0~4byte
baud_flag 1 数值 0 是否设置过uboot波特率 0/1
ota_flag 1 字符串 0 uboot工作模式 小写字母'a'~'g'
rt_ota_flag 1 字符串 0 uboot工作模式 小写字母'a'~'g'
reserved 1 空位 0 对齐位 ---

1.2.2.2 设备静态信息表

设备信息表,总长128bytes,其中未用到的空间为预留位。

名称 长度(字节) 类型 用途 备注
user_id 8 数值 用户ID 1~8byte
dev_name 16 字符串 设备名称 0~16byte
dev_serial 16 字符串 设备串号 0~16byte
soft_ver 16 字符串 软件版本号 0~16byte
manufacture_name 16 字符串 厂商名字 0~16byte
hardware_ver 16 字符串 硬件版本号 0~16byte
is_oscillator 1 数值 是否有源晶体 0/1,基站无此项
auto_connect/auto_run 1 数值 终端自动连接/基站自动运行 0/1
dtu_enable 1 数值 DTU开启状态 0/1
dtu_at_show 1 数值 DTU状态下是否显示AT格式 0/1
dtu_timeout 2 数值 DTU发送超时 0~65535
dtu_wait 2 数值 DTU等待时长 0~65535
dtu_exit 8 字符串 DTU退出字符串 1~8byte
NA 24 预留

1.2.2.3 子系统配置表

子系统配置表,总长64bytes,其中未用到的空间为预留位。

名称 长度(字节) 类型 默认值 用途 备注
apMaxPow 1 数值 22 基站的最大功率 可设置范围为:0 - 29dbm
idLen 1 数值 1 用户ID长度 0:16bit,1:32bit,2:48bit
pp 1 数值 1 pp配置,默认值为1,暂不支持修改 0:1,1:2,2:4
symbolLen 1 数值 1 symbol长度 0:128,1:256,2:512,3:1024
dlUlRatio 1 数值 0 下行上行比 0:1比1,1:1比2
subSysBt 1 数值 1 BT值 0:BT_1.2,1:BT_0.3
groupNum 1 数值 0 帧结构中的group数量 0:1,1:2,2:4,3:8
spectrumIdx 1 数值 3 指示所用频段 频谱idx,默认3即为470M-510M,详见频谱划分文档
systemId 4 数值 0x11223344 网络ID 网络配置信息,32bit
subSysId 4 数值 0x21456981 子系统ID 子系统ID,32bit
freqList 16 数值 0xFF、0xFF、…… 频点列表 可以连接的频点集合,每个字节代表一个频点
NA 32 0 预留

1.2.2.4 射频静态信息表

射频静态信息表,终端总长160bytes,基站总长度84byte,其中未用到的空间为预留位。

名称 长度(字节) 类型 默认值 用途 备注
temp_list 32 signed char -49,-37,-33,-29,-25,-20,-16,-12,
-6,1,8,15,22,31,43,55,
62,65,67,70,73,76,79,81,
84,89,94,99,104,109,114,119
温度列表 -50度 ~ 127度,AP没有此表!
dcxo_list 32 unsigned char 35,34,33,32,31,30,29,28,
29,30,31,32,33,34,35,36,
35,34,33,32,31,30,29,28,
27,27,27,27,27,27,27,27
dcxo列表 大于等于对应温度,则为该dcxo,AP没有此表!
powMin 1 signed char -16 最小功率 单位dbm
powNum 1 unsigned char 38 标志ramp_list表中有效数据数量 可根据最小功率和powNum推算出最大功率
tx_mode 1 unsigned char 3 功率模式,不同的功率模式,ramp_list也不同 0/1/2/3 四种功率模式,终端默认使用模式3,AP默认模式0
rf_reserved 1 数值 0 预留位 保证4字节对齐
ramp_list 80 数值 终端:0,2,4,7,10,14,17,20,26,28,
34,37,43,50,57,65,75,85,98,110,
117,140,159,179,200,229,260,290,322,361,
410,451,510,570,640,730,850,1023,1023,1023
基站:0,4,10,14,19,25,31,37,45,52,
61,72,82,94,108,123,141,160,182,207,
234,264,300,340,388,449,530,636,787,1023,
1023,1023,1023,1023,1023,1023,1023,1023,1023,1023
ramp列表 每个功率值对应一个ramp值
NA 12 0 预留 AP没有此项

1.2.2.5 校准动态信息表

校准动态信息表,总长64bytes,其中未用到的空间为预留位。 (AP侧无此表)

名称 长度(字节) 类型 默认值 用途 备注
dcxo 1 数值 0x20 dcxo校准值 0~63
aAgcIdx 1 数值 0xF 模拟agc档位 0~15
reserved 2 数值 0 预留位,为了4字节对齐
tempAdjust 1 数值 0 温度校准值 -20 ~ 20°C
dcxoDir 1 数值 0 dcxo校准偏移方向 0,1,2
dcxoAdjust 1 数值 0 dcxo校准偏移值 >= 0
tcxoDirection 1 数值 0 tcxo校准偏移方向 0,1,2
tcxoOffset 4 数值 0 tcxo校准偏移值 >= 0
NA 52 0 预留

1.2.2.6 用户定制数据表

用户定制数据表,总长256bytes,由用户自己管理和分配。

名称 长度(字节) 类型 默认值 用途 备注
user_data 256 0 用户定制数据 用户自己管理和分配

1.3 静态数据使用方法

FLASH中数据分为两个区,一个是静态区,一个是备份区,更新静态区数据时,先将所有数据写入备份区,再将所有数据写入静态区,防止在读写FLASH过程中突然断电。

出厂时,会初始化FLASH内静态空间的静态数据。芯片启动后,会先读取静态空间的静态数据,如果没有读到,会再去读取备份区的静态数据,如果还是没有读到,会使用内部全局变量的初始值来初始化FLASH内静态数据,如果读到了,会使用FLASH中静态数据初始化内部全局变量。

FLASH的静态数据更新由协议栈统一管理,协议栈启动后,每隔1小时自动将内部全局变量更新到备份区动态数据,每隔16小时自动将内部全局变量更新到静态区,协议栈关闭时,也会将内部全局变量更新到静态区。 协议栈处于关闭状态时,也提供了save接口直接更新FLASH。

用户暂不支持直接更改FLASH中静态数据,可使用已有各种接口修改对应的全局变量参数,然后再使用save接口将全局变量参数更新到FLASH中。

1.4 静态数据使用接口

包含头文件

#include "uc_wiota_static.h"

1.4.1 初始化静态数据

  • 目的
    初始化静态数据。
  • 语法
      void uc_wiota_static_data_init(void);
    
  • 描述
    先读取静态空间的静态数据,如果没有读到,会再去读取备份区的静态数据,如果还是没有读到,会使用内部全局变量的初始值来初始化FLASH内静态数据,如果读到了,会使用FLASH中静态数据初始化内部全局变量。
  • 返回值
    无。
  • 参数
    无。
  • 注意
    应在调用其他静态数据接口之前调用该接口进行初始化。

1.4.2 获取用户ID

  • 目的
    获取用户ID。
  • 语法
      void uc_wiota_get_userid(unsigned int *id, unsigned char *len);  /* 终端 */
      void uc_wiota_get_userid(unsigned char *id, unsigned char *len); /* 基站 */
    
  • 描述
    获取用户ID,终端用户ID唯一。
  • 返回值
    无。
  • 参数
    id: 用户ID,终端用户ID为数值型,基站用户ID为字符串。
    len:用户ID长度,基站用户ID最大长度为8字节。
  • 示例
    获取终端用户ID。
      unsigned int user_id[2] = {0};
      unsigned char len = 0
      uc_wiota_get_userid(user_id, &len);
    
    获取基站用户ID
      unsigned char user_id[9] = {0};
      unsigned char len = 0;
      uc_wiota_get_userid(user_id, &len);
    

1.4.3 获取设备名称

  • 目的
    获取设备名称。
  • 语法
      void uc_wiota_get_dev_name(unsigned char *name);
    
  • 描述
    获取设备的名称,最大长度为16个字节。
  • 返回值
    无。
  • 参数
    name: 设备名称。

1.4.4 获取设备序列号

  • 目的
    获取设备序列号。
  • 语法
      void uc_wiota_get_dev_serial(unsigned char *serial);
    
  • 描述
    获取设备的序列号,最大长度为16个字节。
  • 返回值
    无。
  • 参数
    serial: 设备序列号。

1.4.5 获取厂商名字

  • 目的
    获取厂商名字。
  • 语法
      void uc_wiota_get_manufacture_name(unsigned char *name);
    
  • 描述
    获取生产厂商的名字,最大长度为16个字节。
  • 返回值
    无。
  • 参数
    name: 生产厂商的名字。

1.4.6 获取硬件版本号

  • 目的
    获取硬件版本号。
  • 语法
      void uc_wiota_get_hardware_ver(unsigned char *hardware_ver);
    
  • 描述
    获取硬件版本号,最大长度为16个字节。
  • 返回值
    无。
  • 参数
    hardware_ver: 硬件版本号。

1.4.7 获取自动连接/运行标志

  • 目的
    获取自动连接/运行标志。
  • 语法
      unsigned char uc_wiota_get_auto_connect_flag(void); /* 终端 */
      unsigned char uc_wiota_get_auto_run_flag(void);     /* 基站 */
    
  • 描述
    获取自动连接/运行标志。
  • 返回值
    自动连接标志:0,终端开机不自动连接;1,终端开机自动连接。
    自动运行标志:0,基站开机不自动运行;1,基站开机自动运行。
  • 参数

1.4.8 获取DTU配置信息

  • 目的
    获取数据传输单元配置信息。
  • 语法
      void uc_wiota_get_dtu_config(dtu_info_t *cfg);
    
  • 描述
    获取频点列表,可以连接的频点集合,每个字节代表一个频点。
  • 返回值
    无。
  • 参数
    cfg: 数据传输单元配置信息。
  • 结构体
      typedef struct DtuInfoT
      {
        unsigned char  reserved[2];        /* reserved */
        unsigned char  dtu_status;         /* status: 0 or 1 */
        unsigned char  dtu_at_show;        /* show AT format: 0 or 1 */
        unsigned short dtu_timeout;        /* send timeout */
        unsigned short dtu_wait;           /* wait time */
        unsigned char  dtu_exit[8];        /* exit string */
        unsigned char  na[24];             /* undefined */
      } dtu_info_t;
    

1.4.9 获取频点列表

  • 目的
    获取频点列表。
  • 语法
      void uc_wiota_get_freq_list(unsigned char *list);
    
  • 描述
    获取频点列表,可以连接的频点集合,每个字节代表一个频点。
  • 返回值
    无。
  • 参数
    list: 频点列表。

1.4.10 获取用户定制静态数据首地址

  • 目的
    获取用户定制静态数据首地址。
  • 语法
      unsigned char* uc_wiota_get_user_info(void);    
    
  • 描述
    用户可更新其中的数据,目前仅限256字节,超出范围可能引起各种意外的bug!
  • 返回值
    用户定制数据的首地址。
  • 参数
    无。
  • 注意
    不能超出空间限制。

1.4.11 主动更新静态区数据

  • 目的
    主动更新静态区数据。
  • 语法
      void uc_wiota_save_static_info(void);    
    
  • 描述
    用户主动更新静态区数据。 使用方法可参考AT接口:AT+WIOTASAVESTATIC。
  • 返回值
    无。
  • 参数
  • 注意

1.4.12 擦除4KB的FLASH内容

  • 目的
    擦除4KB的FLASH内容,即将这4KB的FLASH的内容全部bit写成1
  • 语法
      unsigned int uc_wiota_flash_erase_4K(unsigned int flash_addr);    
    
  • 描述
    在写FLASH内容之前,需要先擦除FLASH,擦除规则只能是一次4KB。
  • 返回值
    result:操作结果,succ或者fail,与其他接口返回结果统一
      typedef enum {  
          UC_OP_SUCC = 0,  
          UC_OP_TIMEOUT,  
          UC_OP_FAIL,  
      }UC_OP_RESULT;  
    
  • 参数
    flash_addr:该地址为需要擦除的这4KB空间中的任意地址均可,为方便理解,一般选择4KB的起始地址,例如0x3F000。
  • 注意
    接口适用地址范围:

  • 终端侧:0x0~0x7E000,如果终端在同步状态下,需要先调用uc_wiota_suspend_connect,擦除、读写flash之后,再调用需要先调用uc_wiota_recover_connect !

  • 基站侧:0x0~0x1FE000,基站侧直接操作。

其余空间为代码空间,静态数据空间,不允许任意操作。

1.4.13 将数据写入FLASH指定位置

  • 目的
    将数据写入FLASH指定位置。
  • 语法
      void uc_wiota_flash_write(unsigned int* data_addr, unsigned int flash_addr, unsigned short length);    
    
  • 描述
    将数据写入flash指定位置
  • 返回值
    result:操作结果,同上。
  • 参数
    data_addr:数据起始地址,由用户申请内存空间
    flash_addr:需写入flash中的起始地址
    length:写入数据长度
  • 注意

接口适用地址范围:

  • 终端侧:0x0~0x7E000,如果终端在同步状态下,需要先调用uc_wiota_suspend_connect,擦除、读写flash之后,再调用需要先调用uc_wiota_recover_connect !

  • 基站侧:0x0~0x1FE000,基站侧直接操作。

其余空间为代码空间,静态数据空间,不允许任意操作。

1.4.14 读出FLASH指定位置内容

  • 目的
    读出FLASH指定位置内容。
  • 语法
      void uc_wiota_flash_read(unsigned int* data_addr, unsigned int flash_addr, unsigned short length);    
    
  • 描述
    读出FLASH指定位置内容
  • 返回值
    无。
  • 参数
    data_addr:数据起始地址,由用户申请内存空间
    flash_addr:需读取flash中的起始地址
    length:读取数据长度
  • 注意

接口适用地址范围:

  • 终端侧:0x0~0x7E000,如果终端在同步状态下,需要先调用uc_wiota_suspend_connect,擦除、读写flash之后,再调用需要先调用uc_wiota_recover_connect !

  • 基站侧:0x0~0x1FE000,基站侧直接操作。

其余空间为代码空间,静态数据空间,不允许任意操作。

Back to top