我通过CH582的OTA后台式升级后,想在备份区存储历史数据,想问一下贵公司按照后台式升级所划分的四个存储区,备份区如何进行读写操作?能否提供示例代码?
邮箱:个人信息保护,已隐藏
我通过CH582的OTA后台式升级后,想在备份区存储历史数据,想问一下贵公司按照后台式升级所划分的四个存储区,备份区如何进行读写操作?能否提供示例代码?
邮箱:个人信息保护,已隐藏
①参考FLASH例程进行数据读写;
②Backup的方式是有对应的备份,建议先参考一下例程。
我参考了flash示例代码写了两个读写函数,跑代码时,出现了蓝牙连接后自动断开的问题,排除了一下发现屏蔽这个函数:FLASH_ROM_READ(current_location_addr, TestBuf, 8)程序能正常跑。下面是我仿照示例代码后的程序:
需要怎么改动?
①提供一下蓝牙断开的原因;
②确定擦除的地方是否为蓝牙协议栈或者其他重要代码占用的地方,防止擦除的地方有问题;
③蓝牙保持连接是需要在连接间隔到来的时候发送数据,可理解为心跳包。如果出现某个任务的时间过长导致蓝牙本身的任务无法来得及执行,则可以出现蓝牙断开的情况。可以拉个io查看操作任务的时间,并需要将蓝牙连接间隔配置为最长任务的时长的两倍。
我通过串口调试助手进行调试,蓝牙断开原因不被打印出来,也不知道什么原因让它断开的原因不能被打印出来,我也添加了打印连接断开状态的原因代码,而且代码正常跑通时,蓝牙调试助手主动断开时能打印它的连接断开的原因。
这是我放开FLASH_ROM_READ(current_location_addr, TestBuf, 8)这段代码后蓝牙异常时串口打印情况(打印不出连接断开的原因):
这是我蓝牙调试助手的实时日志:
我屏蔽掉FLASH_ROM_READ(current_location_addr, TestBuf, 8)这段代码后程序能正常跑,也能正常连接和收发数据,蓝牙调试助手主动断开时也能正常打印连接断开的原因。
屏蔽的代码段:
蓝牙调试助手主动断开时也能正常打印连接断开的原因:
①擦除按照4KB(倍数)擦除;
②将蓝牙的连接间隔拉大,reason8是超时断开。
蓝牙BLE从机Peripheral讲解一(广播间隔和连接间隔) - SweetTea_lllpc - 博客园 (cnblogs.com)
③too large noti,检查noti的打开和发送数据量,参考:
蓝牙BLE从机Peripheral讲解十二(MTU) - SweetTea_lllpc - 博客园 (cnblogs.com)