一、概念:

每个文件对应多个block,每个block对对应多个扇区sector,每个sector对应有多个页。

一般一个扇区(sector)多个页(page)  , 一个块 (bank)又有多个扇区 (sector)

块(bank) > 扇区(sector) > 页(page)

二、FLASH读写操作

/*******************************************************************************写入数据流程:1.写入数据到内部flash2.FLASH 解锁3.擦除扇区4.写数据到指定的地址空间5.上锁写保护6. 写数据成功W25Q128 将 16M 的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为
16 个扇区(Sector),每个扇区 4K 个字节。 W25Q128 的最小擦除单位为一个扇区,也就是每次
必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区,这样对 SRAM 要
求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的操作
*******************************************************************************//********************define  the size of sector*******************************/u8  SPI_FLASH_BUF[4096];
/******************************************************************************** Function Name  : SPI_FLASH_WRITE(u8 * pBuffer,u32 WriteAddr,u16 NumbyteToWrite)* Description    : 在指定的地址进行写入数据* @param1        : 写指针* @param2        : 开始写入的地址(24bit)* @param3        : 要写入的字节数* Return         : void
*******************************************************************************/
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{ u32 secpos;u16 secoff;u16 secremain;     u16 i;    secpos=WriteAddr/4096;//扇区地址 0~511 for w25x16secoff=WriteAddr%4096;//在扇区内的偏移secremain=4096-secoff;//扇区剩余空间大小   if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节while(1) {    SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//读出整个扇区的内容for(i=0;i<secremain;i++)//校验数据{if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除        }if(i<secremain)//需要擦除{SPI_Flash_Erase_Sector(secpos);//擦除这个扇区for(i=0;i<secremain;i++)      //复制{SPI_FLASH_BUF[i+secoff]=pBuffer[i];     }SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区  }else SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.                  if(NumByteToWrite==secremain)break;//写入结束了else//写入未结束{secpos++;//扇区地址增1secoff=0;//偏移位置为0     pBuffer+=secremain;  //指针偏移WriteAddr+=secremain;//写地址偏移       NumByteToWrite-=secremain;              //字节数递减if(NumByteToWrite>4096)secremain=4096;   //下一个扇区还是写不完else secremain=NumByteToWrite;         //下一个扇区可以写完了}    };
}
//写一个字节
void SPI_Flash_Write_OneByte(u8 DataToWrite,u32 WriteAddr)
{u8 buff[1] = {0};buff[0] = DataToWrite;SPI_Flash_Write(buff,WriteAddr,1);
}
//写四个字节
void SPI_Flash_Write_FourByte(u32 DataToWrite,u32 WriteAddr)
{u8 temp[4]={0,0,0,0};temp[0]=(u8)DataToWrite;temp[1]=(u8)(DataToWrite>>8);temp[2]=(u8)(DataToWrite>>16);temp[3]=(u8)(DataToWrite>>24);SPI_Flash_Write(temp,WriteAddr,4);
}
​
u32 SPI_FLAsh_ReadFourByte(u32 ReadAddr)
{u8 temp[4] = {0,0,0,0};u32 val = 0;SPI_Flash_Read(temp,ReadAddr,4);val = (temp[3]<<24)|(temp[2]<<16)|(temp[1]<<8)|(temp[0]);return val;
}​

FLASH的基本原理与读写操作笔记相关推荐

  1. ESP8266 Flash的分布及其读写操作

    读写操作API 基本操作 (1) spi_flash_erase_sector 功能 擦除 Flash 的某个扇区. 函数定义 SpiFlashOpResult spi_flash_erase_sec ...

  2. 【flash】个人用基础操作笔记

    前言 该博客为个人笔记,长期更新,用于操作遗忘时快速复习 目录 前言 常用快捷键 一些说明 各类动画案例 形变动画 旋转动画 运动动画 引导动画 篮球弹动动画 逐帧动画 自带动画(deco工具) 翻转 ...

  3. STM32:Flash擦除与读写操作(HAL库)

    应用平台:STM32F030F4P6 ST官方库:STM32Cube_FW_F0_V1.9.0 背景知识 绝大多数的单片机和微控制器(ARM,x86),地址空间都是以字节为单位的,也就是说一个地址是一 ...

  4. OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作

    OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...

  5. NAND FLASH 读写操作 简介

    NAND FLASH 内存详解与读写寻址方式 一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设 ...

  6. Flash之SM25QH128M、JFM25F32A读写操作FPGA Verilog实现

    JFM25F32A Flash写操作流程如图1所示,对于Flash类型的存储器,向已经存在数据的单元写入数据时,直接写入是无法写入的,在写入之前必须先执行擦除命令,再进行写入即可:如果待写入的单元为新 ...

  7. NAND FLASH的读写操作(硬件原理图分析)

    转载:NAND FLASH的读操作及原理 硬件原理 上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义,下面直接引用韦东山老师的课程中的提问: NAND FLASH是 ...

  8. Esp8266的Flash读写操作以及Flash上传文件

    1.Flash的读写操作 Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件. #include <FS.h> St ...

  9. 瑞萨R78族Flash读写操作详细探讨

    前言 最近使用到瑞萨R78族的MCU,准备做一个关于掉电保存参数配置的功能,需求大概是对200多个参数在掉电瞬间保存到芯片flash空间中,网上关于瑞萨MCU的flash读写操作教程也比较少,于是笔者 ...

最新文章

  1. 深度学习笔记七:循环神经网络RNN(基本理论)
  2. RDO Packstack 安装 Openstack Icehouse CentOS 6.5 单网卡
  3. @EnableAutoConfiguration原理简单分析
  4. 表单验证JavaScript实现正则匹配、随机验证码、密码强度、加拖拽加蒙板
  5. 不要重新发明轮子_是否重新发明轮子
  6. python判断阿姆斯特朗数_Python 程序检查阿姆斯特朗数
  7. trunk口_Trunk的概念与设置
  8. 一些实用的在线编辑器、在线转换工具
  9. RAIM (GNSS完好性监测算法合集)
  10. 计算机一级有几套试卷,计算机一级B十五套试卷
  11. python初学第一节课
  12. 牛客网--16128--小名的回答
  13. 电脑搜索不出网络共享文件夹内容
  14. FFmpeg编译出来的库太大?试试这几招
  15. Python+Appium+unittest demo
  16. python 十进制转二进制
  17. su:密码正确,但权限被拒绝
  18. 有一位后代曾忏悔:他的祖父继承家里的淫业,到了他父亲那一代,果报现前
  19. 护眼台灯真的护眼吗?为家长推荐四款真正护眼的台灯
  20. 深入场景,智能决策倍增数字化转型价值 | 爱分析报告

热门文章

  1. 1.10 Pet技术流导论+完全1.10Pet数据
  2. os从启动带内核加载
  3. 华为荣耀2s设置虚拟服务器教程,荣耀路由2S怎么开启和关闭wifi
  4. rsync 操作及部署
  5. C++ override解释
  6. 如何用c语言实现对称图形
  7. uni-app 可以做微信公众号吗_2020年公众号还值得做吗?(目标劝退1万人) 为大家提供些思路!新增对微信圈子、视频号、付费文章的简析!...
  8. Hadoop伪分布式搭建
  9. 小象学院0基础python视频_2018小象学院《分布式爬虫实战》第二期视频教程
  10. 软件测试工程师【人事面】切勿大意失荆州!