FLASH的基本原理与读写操作笔记
一、概念:
每个文件对应多个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的基本原理与读写操作笔记相关推荐
- ESP8266 Flash的分布及其读写操作
读写操作API 基本操作 (1) spi_flash_erase_sector 功能 擦除 Flash 的某个扇区. 函数定义 SpiFlashOpResult spi_flash_erase_sec ...
- 【flash】个人用基础操作笔记
前言 该博客为个人笔记,长期更新,用于操作遗忘时快速复习 目录 前言 常用快捷键 一些说明 各类动画案例 形变动画 旋转动画 运动动画 引导动画 篮球弹动动画 逐帧动画 自带动画(deco工具) 翻转 ...
- STM32:Flash擦除与读写操作(HAL库)
应用平台:STM32F030F4P6 ST官方库:STM32Cube_FW_F0_V1.9.0 背景知识 绝大多数的单片机和微控制器(ARM,x86),地址空间都是以字节为单位的,也就是说一个地址是一 ...
- OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作
OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...
- NAND FLASH 读写操作 简介
NAND FLASH 内存详解与读写寻址方式 一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设 ...
- Flash之SM25QH128M、JFM25F32A读写操作FPGA Verilog实现
JFM25F32A Flash写操作流程如图1所示,对于Flash类型的存储器,向已经存在数据的单元写入数据时,直接写入是无法写入的,在写入之前必须先执行擦除命令,再进行写入即可:如果待写入的单元为新 ...
- NAND FLASH的读写操作(硬件原理图分析)
转载:NAND FLASH的读操作及原理 硬件原理 上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义,下面直接引用韦东山老师的课程中的提问: NAND FLASH是 ...
- Esp8266的Flash读写操作以及Flash上传文件
1.Flash的读写操作 Esp8266的Flash为4M,其中1M用于存储程序,其他的空间有一部分用于系统,3M中剩下的大部分空间可以用来存放文件. #include <FS.h> St ...
- 瑞萨R78族Flash读写操作详细探讨
前言 最近使用到瑞萨R78族的MCU,准备做一个关于掉电保存参数配置的功能,需求大概是对200多个参数在掉电瞬间保存到芯片flash空间中,网上关于瑞萨MCU的flash读写操作教程也比较少,于是笔者 ...
最新文章
- 深度学习笔记七:循环神经网络RNN(基本理论)
- RDO Packstack 安装 Openstack Icehouse CentOS 6.5 单网卡
- @EnableAutoConfiguration原理简单分析
- 表单验证JavaScript实现正则匹配、随机验证码、密码强度、加拖拽加蒙板
- 不要重新发明轮子_是否重新发明轮子
- python判断阿姆斯特朗数_Python 程序检查阿姆斯特朗数
- trunk口_Trunk的概念与设置
- 一些实用的在线编辑器、在线转换工具
- RAIM (GNSS完好性监测算法合集)
- 计算机一级有几套试卷,计算机一级B十五套试卷
- python初学第一节课
- 牛客网--16128--小名的回答
- 电脑搜索不出网络共享文件夹内容
- FFmpeg编译出来的库太大?试试这几招
- Python+Appium+unittest demo
- python 十进制转二进制
- su:密码正确,但权限被拒绝
- 有一位后代曾忏悔:他的祖父继承家里的淫业,到了他父亲那一代,果报现前
- 护眼台灯真的护眼吗?为家长推荐四款真正护眼的台灯
- 深入场景,智能决策倍增数字化转型价值 | 爱分析报告
热门文章
- 1.10 Pet技术流导论+完全1.10Pet数据
- os从启动带内核加载
- 华为荣耀2s设置虚拟服务器教程,荣耀路由2S怎么开启和关闭wifi
- rsync 操作及部署
- C++ override解释
- 如何用c语言实现对称图形
- uni-app 可以做微信公众号吗_2020年公众号还值得做吗?(目标劝退1万人) 为大家提供些思路!新增对微信圈子、视频号、付费文章的简析!...
- Hadoop伪分布式搭建
- 小象学院0基础python视频_2018小象学院《分布式爬虫实战》第二期视频教程
- 软件测试工程师【人事面】切勿大意失荆州!