一、Falsh布局

  • ⽬前 ESP8266EX 模组采⽤的 demo Flash 为 SPI Flash,ROM【硬盘,用来存储和保存数据】 ⼤⼩:2
    MB,封装为SOP8 (208 mil)。
  • (SPI Flash 就是通过串行的接口进行操作的flash存储设备)
  • (SOP8是指8PIN(8个引度脚)器件的贴片封装形式)

FlashDemo Studio:FlashDemo Studio是一款非常强大的 Flash
演示制作工具,它可以让你在没有任何编程知识的情况下创建专业的演示和指南。它的操作非常简单,没有复杂的界面,你只需在几分钟的时间就可以将你的示范或演示文稿准备就绪。新版本重建了内置的 CD 烧录器,除能完美支持 Windows Vista 外,还加入了对 DVD R/RW的烧录、写入速度、快速抹除、弹出并关闭刻录机托盘等一些新功能的支持。

  • ESP- 12F模组的外部Flash = 4MB = 4096KB = 32Mbit

  • 4MB Flash = 0x000 000 ~0x3FF FFF

  • 扇区编号: 0x000 ~ 0x3FF [Flash扇区==4KB]|

二、Flash扇区

1、定义:扇区(磁盘上划分的区域)
2、磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。

3、磁盘的每一面被分为很多条磁道,即表面上的一些同心圆,越接近中心,圆就越小。而每一个磁道又按512个字节为单位划分为等分,叫做扇区,在一些硬盘的参数列表上你可以看到描述每个磁道的扇区数的参数,它通常用一个范围标识,例如373~746,这表示,最外圈的磁道有746个扇区,而最里面的磁道有373个扇区,因此可以算出来,磁道的容量分别是从186.5KB到373KB(190976B–381952B)
4、磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。在磁盘上,DOS操作系统是以“簇”为单位为文件分配磁盘空间的。硬盘的簇通常为多个扇区,与磁盘的种类、DOS 版本及硬盘分区的大小有关。每个簇只能由一个文件占用,即使这个文件中有几个字节,决不允许两个以上的文件共用一个簇,否则会造成数据的混乱。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易,但也造成了磁盘空间的浪费,尤其是小文件数目较多的情况下,一个上千兆的大硬盘,其浪费的磁盘空间可达上百兆字节。

三、Flash示意图

Non——FOTA(不支持云端升级的Flash)

①[eagle. flash. bin]系统程序:存放运行系统必要的固件;
②[eagle. irom0. text. bin]系统程序:存放用户编写的程序;
③[用户数据] :存放用户的参数/数据;
④[RF_ CAL参数] :存放系统自动保存校准后的RF(射频)参数;
⑤[默认F参数] :存放默认的F参数信息(将[esp_ int_ data _default. bin]下载至该区);
⑥[系统参数] :存放系统参数信息(将[blank.bin]下载至该区)
FOTA(不支持云端升级的Flash)

四、Flash管脚图


在 Pin21 SD_CLK 管脚上串联⼀个串联电阻连接到 Flash CLK
管脚上。此电阻的作⽤主要为降低驱动电流,减⼩串扰和外部⼲扰,调节时序等。初始串联电阻⼤⼩为 200 Ω。

五、FPI Flash接口

1、spi_ flash_ erase_ sector

  • 功能:擦除Flash的某个扇区。
  • 函数定义:SpiFlashOpResult spi_ flash_ erase_ sector (uint16 sec)
  • 参数:uint16 sec-扇区号,从扇区0开始计数,每扇区4KB
  • 返回值:SpiFlashOpResult

2、spi_ flash_ write

  • 功能:将数据写入Flash。请先调用spi flash_ erase_ sector 擦除待写区域,再写入数据。
  • 函数定义:SpiFlashOpResult spi_ flash_ write (uint32 des_ addr ,uint32 *srC_ addr, uint32 size)
  • 参数:uint32 des_ addr - 写入Flash的地址,起始位置。
    uint32 *src_ addr- 写入Flash的数据指针。
    Uint32 size - 写入数据长度,单位: byte。
  • 返回值:SpiFlashOpResult

3、spi_ flash_ read

  • 功能:从Flash读取数据。
  • 函数定义:SpiFlashOpResult spi_ flash_ read(uint32 src_ addr,uint32 * des_ addr, uint32 size)
  • 参数:uint32 src_ addr -写入Flash的地址,起始位置。
    uint32 *des_ addr- 写入Flash的数据指针。
    Uint32 size -写入数据长度,单位: byte。
  • 返回值:SpiFlashOpResult

4、system_param_save_with_protect

  • 功能:使⽤带读写保护机制的⽅式,写⼊数据到 Flash。Flash 读写必须 4 字节对⻬。
    Flash 读写保护机制:使⽤ 3 个 sector(4 KB 每 sector)保存 1 个 sector 的数据,sector 0 和sector 1 互相为备份,交替保存数据,sector 2 作为 flag sector,指示最新的数据保存在 sector 0 还是 sector 1。
  • 函数定义
bool system_param_save_with_protect  (uint16 start_sec,  void    *param, uint16  len
)
  • 参数
    uint16 start_sec:读写保护机制使⽤的 3 个 sector 的起始 sector 0 值。
    例如,IOT_Demo 中可使⽤ 0x3D000 开始的 3 个 sector(3×4 KB)建⽴读写保护机制,则参数 start_sec 传 0x3D。 • void *param:写⼊数据的指针
    uint16 len:数据⻓度,不能超过 1 个 sector ⼤⼩,即 4×1024
  • 返回
    true:成功
    false:失败

5、system_param_load

  • 功能:使⽤带读写保护机制的⽅式,写⼊数据到 Flash。Flash 读写必须 4 字节对⻬。
    Flash 读写保护机制:使⽤ 3 个 sector(4 KB 每 sector)保存 1 个 sector 的数据,sector 0 和sector 1 互相为备份,交替保存数据,sector 2 作为 flag sector,指示最新的数据保存在 sector 0 还是 sector 1。
  • 函数定义:
bool system_param_load   (uint16 start_sec,  uint16  offset,void *param, uint16  len
)
  • 参数
    uint16 start_sec:读写保护机制使⽤的 3 个 sector 的起始 sector 0 值。
    例如,IOT_Demo 中可使⽤ 0x3D000 开始的 3 个 sector(3×4 KB)建⽴读写保护机制,则参数 start_sec 传 0x3D,请勿传⼊ 0x3E 或者 0x3F。 • uint16 offset:需读取数据,在 sector 中的偏移地址
    void *param:读取数据的指针
    uint16 len:数据⻓度,不能超过 1 个 sector ⼤⼩,即 offset+len ≤ 4*1024
  • 返回
    true:成功
    false:失败

6、spi_flash_erase_protect_enable

  • 功能 :使能 flash 擦写保护。使能后,将保护 flash 不会误操作擦写了正在运⾏的应⽤程序。
  • 函数定义 :bool spi_flash_erase_protect_enable(void)
  • 参数 :⽆
  • 返回:
    True: 设置成功
    False: 设置失败

7、spi_flash_erase_protect_disable

  • 功能 :关闭 flash 擦写保护功能。
  • 函数定义: bool spi_flash_erase_protect_disable(void)
  • 参数 :⽆
  • 返回
    True: 设置成功
    False: 设置失败

六、示例

向外部FIash [0x77 000]地址起【写入"1~16"】
从外部FIash [0x77 000] 地址起,读出16个数据

//宏定义
#def ine       ProjectName      "Flash"    // 工程名宏定义
//全局变量u16 N_ Data_ FLASH_ SEC = 0x77; //存储数据的扇区编号u32 A_ W_ Data[16] = {1,2,3,4,5,6,7,8,9, 10, 11,12, 13, 14, 15, 16}; // 写入Flash的数据u32 A_ R_ Data[16] = {0}; //缓存读F lash的数据void ICACHE_ FLASH_ ATTR user_ init (void)
{u8 C_loop = 0;uart_ init(115200, 115200); // 初始化串口波特率os_ delay_ us (10000) ;//等待串口稳定os_ printf("\t Pro ject: \t%s\r\n",Pro jectName) ;os_ pr intf("\t SDK version:\t%s", system_ get_ sdk_ _version()) ;
//向[0x77 000]地址起,写入16个数据(每个数据占4字节)spi_ flash_ erase_ sector (0x77); // 擦除0x77扇区  参数== [扇区编号]
//向Flash写数据(参数1= [字节地址不、参数2=写入数据的指针(无符号32位整型指针、参数3=数据长度)spi_ flash_ _wr ite (0x77*4096, (uint32 *)A_ W_ _Data, sizeof(A_ W_ _Data)) ;
//从[0x77 000] 地址起,读出16个数据(每个数据占4字节)spi_ flash_ read (0x77*4096,(uint32 *)A_ R_ Data, sizeof(A_ W_ Data));
//串口打印读出的数据
for (C_ loop=0; C_ loop<16; C_ loop++)
{os_ printf("Read Data = %d \r\n",A_ R _Data[C_ loop]) ;delay_ ms(10) ;
}

现象(此次处就是简单的实现一个读写的功能)

打开串口,复位8266得上图结果。由上图结果可得。串口打印处得数据就是我们向flash中写入得数据。由此可得,我们向flash中写数据得功能实现了。并且从flash中读数据得功能也实现了。

学习日记——ESP8266读写外部Flash(2020.5.26)相关推荐

  1. ESP-8266读写外部Flash

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.W25Q32-Flash 1.官方说明 2.引脚排列 3.特殊引脚说明 1.串行数输入输出和IOS (DI DO和 ...

  2. 学习日记——ESP8266程序下载(2020.5.11)

    一.Falsh布局 ⽬前 ESP8266EX 模组采⽤的 demo Flash 为 SPI Flash,ROM[硬盘,用来存储和保存数据] ⼤⼩:2 MB,封装为SOP8 (208 mil). (SP ...

  3. STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)

    文章目录 一.前言 二.硬件电路 三.CubeMX 3.1.Clock Configuration 3.2.QUADSPI Parameter Settings 3.3.QSPI GPIO Setti ...

  4. CSR8675学习笔记:从外部Flash读取bin文件

    为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...

  5. STM32学习笔记:读写内部Flash。

    首先我们需要了解一个内存映射:    stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起始地 ...

  6. STM32F103_SPI读写外部FLASH

    目录 1.SPI简介 1. SPI协议简介 2.SPI物理层的特点 2.1.SPI 的内部简明图 2.2.物理层 3.SPI的协议层 3.1.SPI基本通讯过程 3.2. 通讯的起始和停止信号 3.3 ...

  7. STM32学习笔记:读写内部Flash(介绍+附代码)

    一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...

  8. STM32H743+CubeMX-QSPI+DMA读取外部FLASH(W25Q128JVSQ)

    文章目录 一.前言 二.硬件电路 三.CubeMX 3.1.Parameter Setting 3.2.GPIO Settings 3.3.MDMA Settings(重点) 3.4.CubeMX生成 ...

  9. QCC300x笔记(5) -- 外部Flash的读写操作

    哈喽大家好,这是该系列博文的第五篇~ 篇~ <<[系列博文索引]快速通道 > 1.    QCC300X 外部Flash的读写         QCC300x是使用外部Flash片子 ...

最新文章

  1. java操作excel常用的两种方式
  2. 程序员必备的20个软件
  3. FindFirstFile FindNextFile 以及_WIN32_FIND_DATA结构
  4. P3651-展翅翱翔之时【贪心,环套树】
  5. SpringBoot运行原理初探
  6. python邮件的图片放在哪里_用python保存电子邮件中的嵌入图像
  7. 关于json返回日期格式化的解决方案
  8. MyBatis学习(二)使用注解开发、Mybatis 执行流程、一对多多对一的结果集映射
  9. osm数据下载 python_用Python编写小工具下载OSM路网数据
  10. 使用Bigemap下载地图生成GST(Mapinfo格式)地图包
  11. 行为模型、价值模型、市场模型
  12. AltiumDesigner绘制PCB(一)
  13. 微信公众平台注册流程
  14. 免费学术资源(转自施一公博客)
  15. 突发!华为确认53岁高管丁耘骤逝!执掌最大营收业务,东南大学毕业,在职已超26年...
  16. 新版淘客订单API【需token】
  17. 《鹿鼎记》中归家三侠击杀的是真太后还是假太后
  18. (转)windows 7兼容软件列表搜集加转帖
  19. 本年盈余与预算结余差异表的分析(一)
  20. vue对象属性为null_vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题...

热门文章

  1. vs读取txt文件 中文乱码
  2. [博客记录页]名博记录页,不定时更新
  3. python循环体执行的次数与其他不同的是_下面的Python循环体的执行次数与其他不同的是()...
  4. PS快速蒙版 ——制作动感效果——飞猫
  5. 公司董事长——50w年薪程序员从顶端到谷底,我是这样走过来的!
  6. 海康8300平台改造要点
  7. 820android10,2016安卓手机热门芯片TOP10:骁龙独霸8席
  8. 利用ENVI的ROI统计影像信息
  9. Partial-ReID
  10. MySQL表结构设计