Skip to content

WIOTA同步终端数据保存

概述

这里主要介绍终端(IoTE)的用户数据保存方法。

DEMO所在工程目录路径:PS/app/test/wiota_save_data_demo.c

默认该DEMO为关闭状态,可通过menuconfig命令打开,具体过程为:

1. 在wiota_dev_customer工程根目录下点击鼠标右键执行ConEmu Here打开命令窗口
2. 执行menuconfig命令进到编译配置界面
3. 依次选择 wiota PSenable wiota test funcwiota sync iote data save test
4. 退出并保存

成功打开后,在rtconfig.h里有如下宏定义:

#define WIOTA_TEST_DEMO
#define WIOTA_SAVE_DATA_DEMO

同时,AP侧也需要开启对应的模式,以配合测试,具体过程为:

1. 在wiota_ap_customer工程根目录下点击鼠标右键执行ConEmu Here打开命令窗口
2. 执行menuconfig命令进到编译配置界面
3. 依次选择 wiota PSenable wiota test func
4. 退出并保存

成功打开后,在rtconfig.h里有如下宏定义:

#define WIOTA_TEST_DEMO

DEMO流程

主流程

主流程

如图所示,DEMO主要包括三部分,WIoTa初始化数据保存和发送数据到AP。WIoTa初始化好后,再进行循环的数据保存和数据发送测试(为保护flash寿命,单次测试里,只循环10次)。

下面主要对发送数据到AP作详细说明。

发送数据到AP

主流程

如图所示,发送数据到AP是一个循环的操作,每次发送前都先获取连接状态和收发统计信息等用户数据(静态数据),再将用户数据到FLASH指定地址进行写操作,然后到指定的地址读取保存的数据,通过这些数据判断是否发生错误状态。同时进行WIoTa的收发,以验证数据保存和WIoTa的兼容特性。

数据保存细节

静态数据区定义

IOTE的flash总空间为512k,静态数据区占8k,起始地址504k,结束地址512k,由系统内部进行管理。

保存方式

用户数据保存有两种,分别是保存到静态数据用户区和自定义用户区,可根据需要选择使用。

静态数据用户区

在系统的静态数据区里,有一块256bytes大小的空间可以用来保存用户数据。使用方式如下:

uint8_t *user_info_p = uc_wiota_get_user_info();    //获取空间的内存映射地址
memcpy(user_info_p, save_data_p, save_data_size);   //写用户数据到内存地址
uc_wiota_save_static_info();                        //主动回写内存数据到flash
自定义用户区

除去code占用空间和系统静态数据区后,剩余的空间都可以规划为用户数据区。此demo的测试地址可以选择存静态数据的起始地址的前面4K或者8K的空间用来测试,这里我们选择的是4K,即起始地址500k (0x7D000),结束地址504k。使用方式如下:

uc_wiota_suspend_connect();                         //暂停与ap的同步
uc_wiota_unlock_flash_all();                        //解锁flash
uc_wiota_flash_erase_4K(addr);                      //4k对齐擦除
uc_wiota_flash_write(data_p, addr, data_size);      //往flash写入数据
uc_wiota_lock_flash_all();                          //锁住flash,防止误写
uc_wiota_flash_read(data2_p, addr, data_size);      //从flash读取数据
uc_wiota_recover_connect();                         //恢复与ap的同步

使用的API接口列表

序号 函数名 功能
1. uc_wiota_init() WIoTa协议栈的初始化
2. uc_wiota_set_freq_info() 设置频点
3. uc_wiota_run() 启动WIoTa协议栈
4. uc_wiota_register_recv_data_callback() 被动接收数据接口注册
5. uc_wiota_connect() 连接同步ap
6. uc_wiota_get_state() 查询WIoTa当前状态
7. uc_wiota_reset_stats() WIoTa统计信息重置
8. uc_wiota_get_user_info() 获取用户定制静态数据首地址
9. uc_wiota_save_static_info() 主动保存用户数据
10. uc_wiota_suspend_connect() 暂停与ap的同步
11. uc_wiota_recover_connect() 恢复与ap的同步
12. uc_wiota_flash_erase_4K() 擦除4KB的FLASH内容
13. uc_wiota_flash_write() 将数据写入FLASH指定位置
14. uc_wiota_flash_read() 读出FLASH指定位置内容
15. uc_wiota_get_all_stats() WIoTa统计信息获取
16. uc_wiota_send_data() 发送数据
17. uc_wiota_exit() 关闭WIoTa协议栈
18. uc_wiota_unlock_flash_all() 解锁flash
19. uc_wiota_lock_flash_all() 锁住flash,防止误写
Back to top