联盛德W801系列1-flash保存数据例程:保存wifi配网信息

发布者:iota19最新更新时间:2022-08-08 来源: csdn关键字:联盛德  flash  保存数据 手机看文章 扫描二维码
随时随地手机看文章

1.W801内部flash资料

1.1 W801内部flash用途分区

W801的内部flash大小是2M 字节,物理地址是0x08000000-0x081FFFFF.

在CDK的例程中,flash内部各个地址段有特定的用途,看看这种《内部flash分区表》:

内部flash分区表

其中留给用户使用的范围就是“User Area”【0x081C0000 ~ (0x081FC000-1)】。


1.2 内部flash的擦除写入特性

擦除的最小单位是扇区,每个扇区4k 字节;同一个扇区的内容会同时被擦除,所以改变同个扇区的部分内容时,必须把其他内容临时保存后,一起重新写入。

这一点,库函数 int tls_fls_write(u32 addr, u8 *buf, u32 len) 已经帮我们做好,我们可以直接写入小于4k字节的内容,不用关心是否擦除同个扇区的其他内容。

在这里插入图片描述

2.利用SDK的demo快速测试flash相关函数

2.1 打开宏 DEMO_FLASH

在文件wm_demo.h中打开DEMO_FLASH


#define DEMO_ON 1

#define DEMO_OFF 0


//demo console

#define DEMO_CONSOLE DEMO_ON

.........

//flash demo

#define DEMO_FLASH (DEMO_ON && DEMO_CONSOLE)

在这里插入图片描述

2.2 串口命令测试flash

编译下载后,串口命令增加t-flash,如下图:

在这里插入图片描述

在串口输入“t-flash"就可以进测试。


3.保存用户参数

我在实际应用中,一共用了 8个字节的用户数据 + 33字节的wifi SSID + 65字节的wifi密码,共106字节。所以选用的地址范围是【0x081FB000 ~ 0x081FBFFF】,大小为一个扇区,4k 字节。


extern u8 airkiss_pwd[65];

#define wifiCfgByte airkiss_pwd[64] // 使用密码数组最后一个字节作为配网标记

extern u8 airkiss_ssid[33];

#define PARAM_FLASH_ADDR_BASE 0x1fb000 // 0x08200000 - 0x1000  最后4k,一个扇区

#define PARAM_FLASH_DATA_LEN 8

///============  开启配网需要相应的保存函数    

#if TLS_CONFIG_AIRKISS_MODE_ONESHOT

#define PARAM_FLASH_ADDR_WIFI_ID_LEN 33

#define PARAM_FLASH_ADDR_WIFI_PWD_LEN 65

#define PARAM_FLASH_ADDR_WIFI_ID_OFFSET  (PARAM_FLASH_DATA_LEN)

#define PARAM_FLASH_ADDR_WIFI_PWD_OFFSET (PARAM_FLASH_ADDR_WIFI_ID_OFFSET+PARAM_FLASH_ADDR_WIFI_ID_LEN)

#define PARAM_FLASH_ADDR_WIFI_CFG_OFFSET (PARAM_FLASH_ADDR_WIFI_PWD_OFFSET+PARAM_FLASH_ADDR_WIFI_PWD_LEN-1)


///==========传入参数为  wifi_info_storage_t ================

void WriteWifiParam(unsigned char configByte)

{

unsigned char write_buf[PARAM_FLASH_ADDR_WIFI_ID_LEN+PARAM_FLASH_ADDR_WIFI_PWD_LEN];

wifiCfgByte = configByte;

memcpy(write_buf,airkiss_ssid,sizeof(airkiss_ssid));

memcpy(write_buf+PARAM_FLASH_ADDR_WIFI_ID_LEN,airkiss_pwd,sizeof(airkiss_pwd));

tls_fls_write(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_ID_OFFSET, write_buf, sizeof(write_buf));

}

//

unsigned char ReadWifiParam(void)

{

tls_fls_read(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_ID_OFFSET, airkiss_ssid, sizeof(airkiss_ssid));

tls_fls_read(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_PWD_OFFSET, airkiss_pwd, sizeof(airkiss_pwd));

return wifiCfgByte;

}

#endif // TLS_CONFIG_AIRKISS_MODE_ONESHOT


在这里插入图片描述

上面的代码中,airkiss_ssid和airkiss_pwd是全局变量,看下面源码截图:


这一篇写到这里,下面讲一键配网的实用性操作,题目《联盛德W801系列2-WIFI一键配网,信息保存》。

关键字:联盛德  flash  保存数据 引用地址:联盛德W801系列1-flash保存数据例程:保存wifi配网信息

上一篇:联盛德W801系列2-WIFI一键配网,信息保存
下一篇:单片机进阶---HLK-W801硬件开发之焊接电路

推荐阅读最新更新时间:2024-11-09 00:48

讲讲STM32单片机Flash的读保护和写保护
如果你还不了解什么是STM32对其Flash的保护,那么今天就来给你讲解一下什么是STM32的Flash保护! 01、什么是Flash? STM32的FLASH组织结构,可能因不同系列、型号略有不同。比如大家熟悉的STM32F1中小容量一页大小只有1K,而F1大容量一页有2K。 还比如有些系列以扇区为最小单元,有的扇区最小16K,有的128K不等。 通常Flash包含几大块,这里以F40x为例: 主存储器:用来存放用户代码或数据。 系统存储器:用来存放出厂程序,一般是启动程序代码。 OTP 区域:一小段一次性可编程区域,供用户存放特定的数据。 选项字节:存放与芯片资源或属性相关的配置信息。 02、什么是STM32对内部Flas
[单片机]
讲讲STM32单片机<font color='red'>Flash</font>的读保护和写保护
为什么STM32的Flash地址要设置到0x08000000?
我们言简意赅的普及下这个知识点,争取让大家不伤脑细胞。 背景知识 M3,M4内核芯片上电复位后,要固定从0x0000 0000地址读取中断向量表,获取复位中断服务程序的入口地址后,进入复位中断服务程序,其中0x0000 0004存的是复位中断服务程序地址。 引出问题 既然ARM规定了M3,M4内核要从地址0x0000 0000读取中断向量表,而STM32设置Flash地址到0x0800 0000怎么办? STM32支持了个内存重映射功能,将地址0x0800 0000开始的内容重映射到首地址0x0000 0000中,这样就解决了从0x0000 0000读取中断向量表的问题。 那么新的问题来: (1) 你怎么保证0x08000
[单片机]
为什么STM32的<font color='red'>Flash</font>地址要设置到0x08000000?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved