WIOTA同步终端数据保存
概述
这里主要介绍终端(IoTE)的用户数据保存方法。
DEMO所在工程目录路径:PS/app/test/wiota_save_data_demo.c
默认该DEMO为关闭状态,可通过menuconfig命令打开,具体过程为:
1. 在wiota_dev_customer工程根目录下,点击鼠标右键,执行ConEmu Here打开命令窗口。
2. 执行menuconfig命令,进到编译配置界面。
3. 依次选择 wiota PS→enable wiota test func→wiota 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 PS→enable 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,防止误写 |