发新帖本帖赏金 0.50元(功能说明)我要提问
返回列表
打印
[开源硬件]

【ESP8266 Non-OS SDK开发探坑之四】-用户非易失参数安全存储...

[复制链接]
1424|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
straka|  楼主 | 2018-9-9 12:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Starting with ESP8266 — Light a LED
Starting with ESP8266 (2)–Touch to control relay status-circuit design & electronic components selection
Starting with ESP8266(3) — Touch to control Relay-Programming & PCB design
由于ESP8266系统可以自动保存系统参数到flash完成上电自动选择wifi工作模式和wifi连接参数等,但用户有时也需要保存一些非易失的数据,这就需要用户将信息写入flash,如果进一步考虑,写入flash的时候必须整扇区(4kb)擦除,然后再写入,所以存在一定的时长,如果为了数据完整性、安全性考虑,就必须考虑写入的时候突然掉电的风险。官方对这个问题是有说明的。见文档:
https://www.espressif.com/zh-hans/support/download/documents?keys=&field_type_tid%5B%5D=14
ESP8266 Flash 读写说明
本文先讨论了用户参数存放区域问题,然后调用系统api进行数据安全读写。
【由于字数限制,代码等详细信息见原博客,见谅啊】
http://www.straka.cn/blog/start-esp8266-4-flash-parameter-securely-save-load/
首先根据官方的文档
ESP8266 SDK 入门指南
或者结合博文【ESP8266开发入坑1—-点亮LED】提到的flash布局说明,
不支持云端升级(即NON-FOTA)的用户数据在eagle.irom0text.bin之后,而改文件的大小和保存地址在指南里有:
结合这两个文件,我们就可以计算出用户参数区的首地址:
比如512-non-fota,用户数据区首地址 = eagle.irom0text.bin的首地址 0x10000 + 大小 368*1024 = 0x6C000,
而实际用的是扇区数而不是字节地址数,所以需要0x6C000/4096 = 0x5C,
这里计算注意16-10进制转换。同理可以计算出fota布局下的用户参数区地址。
而用户参数区的大小除了首地址外还需要结尾地址决定,这个其实就是RF-CAL区的首地址,也就是blank.bin的存放地址。
我这里都算好了,并利用 user_rf_cal_sector_set里对flash布局的swtich顺便完成了该地址计算:
好了,有了参数保存地址,我们再看看参数的保存和加载吧。
官方SDK API文档有说明其保护机制:
https://www.espressif.com/sites/default/files/2C-ESP8266_Non_OS_SDK_API_Reference__CN.pdf
这个官方有API的我就不造轮子了,如果有更多要求的可以自己实现。
这里我就定义了通用方法放到FlashParam头和实现文件中

[color=rgb(51, 51, 51) !important]




代码见:
https://github.com/atp798/BlogStraka/tree/master/ESP8266_NONOS_SDK-2.2.1-WebServer/
原博客:
http://www.straka.cn/blog/start-esp8266-4-flash-parameter-securely-save-load/

打赏榜单

小小电子爱好者 打赏了 0.50 元 2018-09-09
理由:很认真的玩8266

相关帖子

发新帖 本帖赏金 0.50元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一枚软件狗,欢迎访问我的博客: www.straka.cn

17

主题

46

帖子

2

粉丝