VM区域系统配置部分

Overview

提供VM区域syscfg配置项操作部分相关API说明,syscfg配置项一般使用于记忆存储用户配置信息,具体软件代码见 bsp/include/vm.h

  • 配置项ID分配说明

  1. 配置项ID号根据存储区域进行分配;

  2. [0]: 配置项ID号0为配置项工具保留ID号;

  3. [ 1 ~ 59]: 共59项, 预留给用户自定义, 只存于VM区域;

  4. [ 60 ~ 99]: 共40项, sdk相关配置项, 只存于VM区域;

  5. [100 ~ 255]: 共156项, sdk相关配置项, 可以存于VM区域, sys_cfg.bin(作为默认值) 和 BTIF区域;

  6. [512 ~ 700]: 共188项, sdk相关配置项, 只存于sys_cfg.bin;

  • 存储区域说明

  1. 存储区域有3个: 1)VM区域; 2)sys_cfg.bin; 3)BTIF区域。

  2. VM区域运行期写入,重新烧录清除,支持多次读写操作。BIN区域烧录期写入,只支持读操作。BTIF运行期写入,重新烧录清除,支持多次读和一次写操作。

  3. 读写的优先级为BIN > VM > BTIF。

  • ID号分配方案

  1. 与APP CASE 相关的ID (1 ~ 59),预留给用户自定义;

  2. lib库保留ID(wifi,蓝牙, Third party platform) (范围: 60 ~ 237);

  3. 用于PC端的sys_cfg.bin(512 ~ 700);

  4. VM_INDEX_DES_MAX通过app_cfg.mk进行配置,默认256;

  • 读写接口使用注意事项

  1. 不能在中断里调用写(write)接口;

  2. 读配置项返回的数据已成功通过了crc校验,不用再进行二次校验。

  3. 调用本读写接口时应该习惯性判断返回值来检查read/write动作是否执行正确;

  4. 关于vm模块初始化,因为FLASH有一部分不支持page单元读写。因此在操作page单元的vm模块,在初始化设置了使用page模式,会尽量使用page单元进行擦写。但是因为用户需求的vm_len大于使用page单元操作的vm_bit_map最大数据长度限制,则会在vm模块初始化强制切换到sector模式。

应用实例

示例演示:

  • 读取 VM_USER_SART 配置项,如果没有内容则报错, 否则打印配置项内容

  • 写入VM_USER_SART 配置项内容

  • 复位

example:

  • 打开 bsp/AC638N/AC638N.cbp``工程,添加 ``apps/example/vm/vm_test.c

  • AC638N.cbp 工程的main.c的主函数user_main中调用测试文件 vm_tesr.c 中的 c_main 函数即可。

常见问题

  • 除开系统中已用的配置项索引, 在VM区域用户可用的配置项索引范围是什么?

    答:可以通过查看 bsp/include/vm_id.h 得知用户使用的范围是从 VM_USER_SART 到 CFG_USER_DEFINE_ENDVM_USER_MAX,即21-127。

  • 配置项最大配置长度是多少? 答:65535字节。

API参考

Functions

VM_ERR vm_eraser(void)

vm数据全部清除

Returns:

VM_ERR:错误值

s32 vm_read(vm_hdl hdl, u8 *data_buf, u16 len)

vm读函数,读取对应id的存储值

Parameters:
  • hdl – id号

  • data_buf – 读取数据存放buf

  • len – 读取长度,要和写进去的长度一致

Returns:

读取的长度值:与len一致表示读取成功,其他错误返回值请看VM_ERR

s32 vm_write(vm_hdl hdl, u8 *data_buf, u16 len)

vm写函数,读取对应id的存储值

Parameters:
  • hdl – id号

  • data_buf – 要写入数据的存放buf

  • len – 写长度

Returns:

写入的长度值:与len一致表示写入成功,其他错误返回值请看VM_ERR