镁光nandflash MT29F32G08+STM32通用IO口驱动,实现fatfs文件系统
真的挺久没有写文章了,一是太忙了,二是素材也少。
这不最近使用镁光的MT29F32G08型号的nandflash,使用STM32作为控制器,但是我所用的STM32是不带FMC的,我也是想偷懒站在前人的肩膀上,但是网上没有找到STM32通用IO口读写MT29F32G08的,SDN啥的上去看了一下,且不说例程能不能用,都要充值,要办会员,大家都懂的,所以只能自己写了(咱就不明白了,有些人总是拿着一些开源的东西,自己改吧改吧,扔到网站上赚米,真的是良心大大滴坏了)。
驱动用的是网上下载的一个通用驱动nand_MT29F_lld,FTL层移植的原子哥的,这里展示一下STM32通用IO口读写MT29F32G08以及fatfs和USB模拟U盘的一些关键程序。
图1STM32通用IO驱动MT29F32G08
图2 通用驱动nand_MT29F_lld
图3,移植原子哥的FTL层
图4,fatfs移植,修改user_diskio.c的读扇区函数
图5,fatfs移植,修改user_diskio.c的写扇区函数
图6,fatfs移植,修改user_diskio.c的IO控制函数
图7,USB模拟U盘,修改usbd_storage_if.c文件的读函数
图8,USB模拟U盘,修改usbd_storage_if.c文件的写函数
接下来就是用文件系统存储数据了,我这里数据量比较大,一秒钟15hz,每一条记录32字节,凑够1024字节写一次csv文件。每个文件最大写32M,写满就生成新的文件继续写,每次上电遍历目录写的文件总数,生成对应的文件名。好了,继续截图~~
上电先生成新的文件名,并打开文件。
图9,上电生成新的csv文件
使用两个buffer轮流写入数据,写满32M就关闭当前文件,并生成新的csv文件继续写,文件总数超过1500个就在不再继续写,差不多存满了。
图10 上电期间不停写入数据
检测到USB插入,就关闭当前正在写 的文件,卸载文件系统。可以把写好的文件拷贝出来。
图11 检测到USB插入
设备已经运行了一会了,看看目录下面的文件和内容吧~
图12 log显示USB已经插入
打开我的电脑
图13 正常识别U盘
看看目录
图14 目录下文件
看看文件内容
图15 文件内容
看到文件格式内容都对,符合设计需求。
到这里就结束了,但是,凡事总有个但是,我这个系统没有备用电源,所以当系统断电而我正好还在写文件的时候,这个文件就会被破坏,打不开,而当fatfs在更新目录表信息,发生断电的话,那就是文件系统损坏了,下一次上电只能重新格式化,从头开始了,以前保存的数据都会丢了。对于这个问题,我暂时还没想到解决办法(在没有备电的情况下)。如果有人有招,就提出来我试试吧。
图16 网络配图
什么是NAND 型 Flash 存储器?
前言
NAND Flash 和 NOR Flash是现在市场上两种主要的闪存技术。Intel于1988年首先开发出 NOR Flash 技术,彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面。紧接着,1989年,东芝公司发表了 NAND Flash 结构,后者的单元电路尺寸几乎只是 NOR 器件的一半,可以在给定的芯片尺寸内提供更高的容量,也就相应地降低了价格。
1.NAND Flash ROM
NAND Flash ROM 应该是目前最热门的存储芯片了。因为我们生活中经常使用的电子产品都会涉及到它。比如你买手机,肯定会考虑64GB,还是256GB?买笔记本是买256GB,还是512GB容量的硬盘呢?(目前电脑大部分采用了基于 NAND Flash 产品的固态硬盘)。
2.NOR Flash ROM
NOR Flash ROM 的特点是以字节为单位随机存取。这样,应用程序可以直接在 Flash ROM 中执行,不必再把程序代码预先读到 RAM 中。NOR Flash ROM 的接口简单,与通常的扩展存储器一样,可以直接连接到处理器的外围总线上。
与 NOR Flash ROM 相比, NAND Flash ROM 以页(行)为单位随机存取,在容量、使用寿命和成本方面有较大优势。但是它的读出速度稍慢,编程较为复杂,因此大多作为数据存储器使用。嵌入式产品中包括数码相机、MP3 随身听记忆卡、体积小巧的U盘等均采用 NAND Flash ROM 。
在存储结构上,NAND Flash 内部采用非线性宏单元模式,全部存储单元被划分为若干个块(类似于硬盘的,一般为8 KB),这也是擦除操作的基本单位。进而,每个块又分为若干个大小为512 B的页,每页的存储容量与硬盘每个扇区的容量相同。也就是说,每页都有512条位线,每条位线连接一个存储元。此时,要修改 NAND 芯片中一个字节,就必须重写整个数据块。当Flash 存储器的容量不同时,其块数量以及组成块的页的数量都将不同。相应地,地址信息包括了列地址、块地址以及相应的页面地址。这些地址通过8位总线分组传输,需要多个时钟周期。当容量增大时,地址信息增加,那么就需要占用更多的寻址周期,寻址时间也就越长。这导致NAND Flash的地址传输开销大,因此并不适合于频繁、小数据量访问的应用。
相比较而言,NAND 型 Flash 存储器具有更高的存储密度、更快的写人速度、更低的价格以及更好的擦写耐用性等优点,非常适用于大量数据的存储。但由于NAND Flash的接口和操作都相对复杂,位交换操作频繁,因此通常还要采用错误探测/错误纠正(EDC/ECC)算法来保护关键性数据。
例如深圳雷龙有限公司的 CSNP32GCR01-AOW 芯片。
一.免驱动使用。SD NAND内置了针对NAND Flash的坏块管理,平均读写,动态和静态的EDC/ECC等算法。
二.性能更稳定。由于NAND Flash内部是先擦后写机制,如果软件处理不当,在突然掉电的时候就会导致数据丢失。而SD NAND内部自带的垃圾回收等机制可以很好的规避这个问题。因此CS创世的二代产品才会通过10K次的随机掉电测试。
三.尺寸更小。目前SD NAND 是68mm 大小,8个pin脚,相比Raw NAND的1220mm大小,48个pin脚,采用SD NAND可以做出更小巧的产品,而且也能节省CPU宝贵的GPIO口(这点对于MCU单片机来说更是重要)
四.SD NAND可选容量更多。目前有128MB/512MB/4GB容量。而SLC 的Raw NAND 主流容量128MB,512MB已经少见,供货周期也很长;单颗4GB的Raw NAND基本都是MLC或者TLC NAND的晶圆,管理起来更复杂。
不用写驱动程序自带坏块管理的 NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8 封装,标准SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通 TF卡/SD 卡,尺寸 6.2x8mm ,内置平均读写算法,通过1万次随机掉电测试耐高低温,机贴手贴都非常方便,速度级别Class10(读取速度 23.5MB/S 写入速度 12.3MB/S )标准的 SD2.0 协议普通的SD卡可直接驱动,支持TF卡启动的 SOC 都可以用 SD NAND。
SD NAND原理图如下:
相关问答
U盘 内的存储颗粒是否可以用来制作固态硬盘?-ZOL问答好像主要的区别是主控不同存储颗粒都是NANDflash(mlctlcslc)(存储颗粒还有一个Intel的NORflash没有人用)所以坏的ssd的存储颗粒还可以再做U盘(前提存储颗粒没坏...
如何将一个手机内存芯片改造成 u盘 ?你好,1、这个难度很大。2、首先要找一个和它针脚一致的半成品U盘。3、然后将手机内存芯片用热风枪取下,再焊接上半成品U盘。4、这不但需要设备还需要技术,一般...
经常格式化 U盘 ,会不会对 U盘 不好? - 懂得对于1楼的回答。大部分没有问题,但是,有几处存在错误。1,完全同意1楼观点。2,格式化(高级格式化)确实是软件层面的操作。但是,u盘的储存原理和硬盘...
固态硬盘中的 NAND 闪存颗粒为什么又分为原片、黑片、白片?现在不少厂商选择白片,一来,原厂没有那么大产能供应;二来,价格优势,选择有保障的白片NAND,虽然售出的SSD返修率偏高,凭藉价格优势,有一定的销量。总结:...这种S...
U盘 是由什么组成的?此控制器含有一个RISC的微处理器及一些ROM(Read-OnlyMemory)与RAM(RandomAccessMemory)。NAND闪存芯片------用以存储数据。NAND闪存也常...
【nandflash和norflash的区别正确的是a,nor的读速度比 nand ...[最佳回答]U盘的是NAND.因为nandflash存储比较大,写入速度和清除速度都比nor快,所以经常用在U盘和智能手机中充当硬盘的角色(eMMC),内存就是DRAM了。norf...
linux内核, 驱动 ,应用程三者的概念和之间的关系-ZOL问答最后,从编程角度来看,Linux内核就是一个调用库,应用程序通过调用Linux提供的API函数来实现操作,Linux内核通过与驱动通信实现对硬件的有效管理。具体的编程细节...
闪迪 U盘 咋样?闪迪是一家知名的存储设备制造商,其U盘以高品质和可靠性而闻名。闪迪U盘具有快速的数据传输速度和稳定的性能,适用于各种存储需求。它们采用先进的闪存技术,具...
nand flash详解?Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速...
固态硬盘3D颗粒是什么?有什么区别呢?很高兴能够回答您的问题!您说的3D颗粒应该是指“3DNAND闪存堆叠技术”,它是一种芯片封装技术,并非颗粒!接下来带大家一起了解一下“3DNAND闪存堆叠技术“...N...