资讯
HOME
资讯
正文内容
nand flash 写操作 Nand Flash操作原理及裸机程序分析——FLASH操作原理
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

Nand Flash操作原理及裸机程序分析——FLASH操作原理

来源:韦东山嵌入式专栏_ARM裸机加强版维基教程

作者:韦东山

本文字数:1056,阅读时长:10分钟

NAND_FLASH操作原理

NAND FLASH原理图NAND FLASH是一个存储芯片那么: 这样的操作很合理”读地址A的数据,把数据B写到地址A”

问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?

答1. 在DATA0~DATA7上既传输数据,又传输地址当ALE为高电平时传输的是地址,

那么在数据线上是不是只传输数据和只传输地址呢?

我们参考NAND FLASH的芯片手册可以知道,对NAND FLASH的操作还需要发出命令,下面有个NAND FLASH的命令表格

问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令怎么传入命令?

答2. 在DATA0~DATA7上既传输数据,又传输地址,也传输命令:

当ALE为高电平时传输的是地址。当CLE为高电平时传输的是命令。当ALE和CLE都为低电平时传输的是数据。

问3. 数据线既连接到NAND FLASH,也接到NOR FLASH,还接到SDRAM、DM9000等等那么怎么避免干扰?

答3. 这些设备,要访问时必须”选中”,没有选中的芯片不会工作,相当于没接一样。

问4. 假设烧写NAND FLASH,把命令、地址、数据发给它之后,NAND FLASH肯定不可能瞬间完成烧写的,怎么判断烧写完成?

答4. 通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙

问5. 怎么操作NAND FLASH呢?

答5. 根据NAND FLASH的芯片手册,一般的过程是:

发出命令

发出地址

发出数据/读数据

看上面的命令表格,不容易看,我们看一下读ID的时序图,

每个NAND FLASH都内嵌一些ID(譬如:厂家ID,设备ID),时序图从左往右看,纵向放是一列一列的看。

对于我们s3c2440来说,内部集成了一个NAND FLASH控制器,2440和外设连接的简易图,如下图所示

NAND FLASH控制器,帮我们简化了对NAND FLASH的操作,下面来分析一下不使用NAND FLASH控制器和使用NAND FLASH控制器对外设NAND FLASH的操作。

发命令:

发地址:

发数据:

读数据 :

用UBOOT来体验NAND FLASH的操作:

1.读ID

下图是读操作时序图

对于存储为256M的NAND FLASH,需要28条地址线,来表示这个地址值,根据原理图可以,只用8根地址线,所以需要4个周期的地址,为了兼容更大容量的NAND FLASH,要发出5个周期的地址:(如下图所示)

2.读数据

「新品首发」STM32MP157开发板火爆预售!首批仅300套

stm32 CubeMx 怎么实现SD卡sd nand FATFS读写测试

  本实验仅用于记录和分享技术经验若涉及侵权请联系我删除。

  stm32 CubeMx 实现SD卡/sd nand FATFS读写测试。

  材料:stm32F407ZGT6开发板、雷龙公司的SD_NAND 测试板(CSNP1GCR01-AOW)。(一开始是使用 Nandflash的操作起来不太方便而且 stm32cubemx自带的 fatfs还没有磨损平衡算法,很是难受。)

  CSNP1GCR01-AOW的优势:

  不用写驱动程序自带坏块管理的NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8封装,标准SDIO接口,兼容SPI/SD接口,兼容各大MCU平台,可替代普通TF卡/SD卡,尺寸6x8mm毫米,内置SLC晶圆擦写寿命10万次,通过1万次随机掉电测试耐高低温,支持工业级温度-40°~+85°,机贴手贴都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD 2.0协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。支持TF卡启动的SOC都可以用SD NAND,提供STM32参考例程及原厂技术支持,主流容量:128MB/512MB/4GB/8GB,比TF卡稳定,比eMMC便宜,样品免费试用(可到官网找客服小姐姐领取样品哦)。雷龙官网

  话不多说开始正文:

  stm32cubeMX 版本:6.6.1

  MDK5 版本5.35

  开始配置STM32

  1、 配置时钟:

  系统时钟树配置(我这里直接拉满,实际使用根据功耗要求作相应的调整)

  2、 配置调试接口

  注意DEBUG这个一定要配置,如果是默认的那下载一次程序之后第二次就下载不进去了.

  3、配置SDIO:

  (我这里还是用了DMA 减少mcu的资源开销)

  配置完成之后随便选一个IO口作为SD_NAND的插入检测引脚(没有检测脚的也选上不然在生成代码的时候会有警告,看着很不舒服,我这里选的是 PE4 引脚)

  4、配置SDIO的DMA

  5、添加文件系统

 6、配置堆栈大小(稍微调大一点,不然在读写大一点的数据的时候可能会出错)

  7、生成代码

  8、生成代码后在 bsp_driver_sd.c这个文件中将这三行代码注释(这是检测SD卡是否接入的引脚 如果不注释在挂载sdnand的时候会提示 not_ready)

  9、在main.c中 添加测试代码

*//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include "main.h"#include "dma.h"#include "fatfs.h"#include "sdio.h"#include "gpio.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD */FATFS fs; /* FatFs 文件系统对象 */FIL file; /* 文件对象 */FRESULT f_res; /* 文件操作结果 */UINT fnum; /* 文件成功读写数量 */BYTE ReadBuffer[1024] = {0}; /* 读缓冲区 */BYTE WriteBuffer[] = /* 写缓冲区 */"This is STM32 working with FatFs\r\n";/* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *///HAL_SD_CardInfoTypeDef SDCardInfo;//HAL_SD_CardCIDTypeDef SDCard_CID;/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/int main(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_SDIO_SD_Init();MX_FATFS_Init();/* USER CODE BEGIN 2 */f_res = f_mount(&SDFatFS, "0:/",1);HAL_Delay(100);if(f_res == FR_NO_FILESYSTEM){f_res = f_mkfs("0:/",FM_FAT|FM_SFD,0,&ReadBuffer,sizeof(ReadBuffer));//格式化SDNANDHAL_Delay(100);if(f_res == FR_OK){f_res = f_mount(NULL,"0:/",1);//取消挂载f_res = f_mount(&SDFatFS, "0:/",1);//重新挂载}}HAL_Delay(100);//写测试--------------------------------------------------------------------f_res = f_open(&SDFile,"helloWorld.txt",FA_CREATE_ALWAYS|FA_WRITE);HAL_Delay(100);f_res = f_write(&SDFile,WriteBuffer,sizeof(WriteBuffer),&fnum);HAL_Delay(100);f_res = f_close(&SDFile);//读测试--------------------------------------------------------------------f_res = f_open(&SDFile,"helloWorld.txt",FA_OPEN_EXISTING | FA_READ);HAL_Delay(100);if(f_res == FR_OK){f_res = f_read(&SDFile,ReadBuffer,sizeof(ReadBuffer),&fnum);}HAL_Delay(100);f_res = f_close(&SDFile);HAL_Delay(100);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}/* USER CODE END PTD */

  配置没问题的程序运行后则可以将 sdnand测试板 插入到读卡器中,读卡器再接到电脑上则就会出现:

  打开文件则会出现

  至此大功告成!!!!!

  需要注意的是最新版的fatfs 文件系统中

FRESULT f_mkfs (const TCHAR* path, /* Logical drive number */BYTE opt, /* Format option */DWORD au, /* Size of allocation unit [byte] */void* work, /* Pointer to working buffer */UINT len /* Size of working buffer */)

 f_mkfs 这个函数有五个参数,老版本的只有三个参数

  所以在格式化的时候得这么来操作

f_res = f_mkfs("0:/",FM_FAT|FM_SFD,0,&ReadBuffer,sizeof(ReadBuffer));

相关问答

nandflash 片选怎么给?

nandflash片选可以通过log实现给nandflash片选可以通过log实现给

FLASH 里的钢笔工具怎么使用?

在FLASH里的钢笔功能并没有像PS那样强大,如果是在FLASH抠人物,建议使用铅笔好了,笔触选择光滑的,放大N倍你可以自由的绘画了。在FLASH里的钢笔功能并没有像PS...

inand是什么文件?

inand是一个文件系统的缩写,全称为"InternalNANDFlashDisk",意为内部NAND闪存磁盘。它是一种用于嵌入式系统中的存储设备,通常用于存储操作系统、应用...

电压不稳定 nand flash 数据异常的处理方法?

电压不稳定可能导致nandflash数据异常,为了处理这个问题,可以首先确保电源稳定,不要让电压波动太大。其次,可以采用电压稳压器来稳定电压。另外,还可以使用...

技嘉@BIOS的使用方法-ZOL问答

新型的主板均采用FlashROM,使BIOS升级程序只能在DOS实模式运行,以下情况可确定您的系统处在实模式下:a)用无Config.sys及Autoexec.bat文件的系统软盘开机,或开...

yaffs是什么品牌?

yaffs文件系统,不是什么品牌YAFFS是Aleph1的工程师CharlesManning开发的NANDFlash文件系统。YAFFS1和YAFFS2主要差异还是在于PAGE读写s...

技嘉@BIOS 怎么安装使用-ZOL问答

FLASH885是技嘉常用的BIOS刷写程序,同Awdflash.exe一样,Flash885.exe也有命令行模式,命令行模式的格式为:flash885/A/&l...

rt809h编程器有哪些功能?

户能够更加方便、快捷地进行各种芯片编程工作。同时,它还支持多种芯片的复位和ISP下载功能,可以帮助工程师进行芯片烧录、升级和修复。此外,RT809H编程器还支...

nand flash 最小容量?

NAND闪存的最小容量可以是1GB。然而,随着技术的进步,现在市面上的NAND闪存的最小容量已经远远超过了1GB,常见的容量包括16GB、32GB、64GB、128GB、256GB等。...

谁能告诉我存储器dataflash norflash nandflash EEPROM这些的区别啊?

norflash,nandflash,EEPROM都是些非易失性存储器,它们都是基于悬浮栅晶体管结构,但具体实现工艺上有差异。EEPROM:(ElectricallyErasableProgra...

 昆仑轮胎  模拟人生超级明星 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部