SD NAND Flash 小容量存储解决方案及其STM32测试例程讲解

文章目录

  • 前言
  • 一、Flash闪存是什么?
  • 二、SD NAND Flash
  • 三、STM32测试例程
  • 四、总结

前言

随着移动存储技术的快速发展和便携式数字设备的广泛应用,Flash闪存作为非易失性存储解决方案,在各种电子设备中扮演着越来越重要的角色。本文提供关于Flash闪存的基础知识以及一种特别推荐的小容量存储解决方案SD NAND Flash的详细介绍。将从Flash闪存的基本概念出发,探讨其分类、特点,并深入解析NOR与NAND两种主要类型的闪存技术。重点介绍了一款由雷龙发展有限公司提供的SD NAND Flash产品,它不仅具有小巧的尺寸、出色的兼容性和稳定性,而且支持标准的SD 2.0协议,极大简化了开发流程。为了帮助开发者更好地理解和应用这一技术,展示了基于STM32微控制器平台实现的单块及多块数据传输测试方法,通过具体的代码示例来验证SD NAND Flash的读写性能。

一、Flash闪存是什么?

  1. 简介
    • Flash闪存是一种非易失性(Non-Volatile)内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘。这项特性使得闪存得以成为各类便携型数字设备的存储介质的基础。
    • 各类DDR、SDRAM或者RDRAM都属于挥发性内存,只要停止电流供应内存中的数据便无法保持,因此每次电脑开机都需要把数据重新载入内存。
  2. 分类
    • NOR和NAND是市场上两种主要的非易失闪存技术。
    • 在1984年,东芝公司的发明人舛冈富士雄首次提出了快速闪存存储器的概念。与传统电脑内存不同,闪存的特点是非易失性(NVM),其记录速度也非常快。
    • Intel是世界上第一个生产闪存并将其投放市场的公司。1988年,Intel推出了一款256K bit闪存芯片,并被称为NOR闪存。它结合了EPROM和EEPROM两项技术,并拥有一个SRAM接口。
    • 第二种闪存称为NAND闪存,由日立公司于1989年研制,被认为是NOR闪存的理想替代者。NAND闪存的写周期比NOR闪存短90%,保存与删除处理的速度相对较快。鉴于NAND出色的表现,它常常被应用于诸如CompactFlash、SmartMedia、SD卡等存储卡上。
    • NAND闪存采用串行结构,读写操作是以页和块为单位进行的。这种结构最大的优点在于容量可以做得很大,成本较低,有利于大规模普及。
  3. 特点
    • Flash闪存是一种非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
    • 任何flash器件的写入操作只能在空或已擦除的单元内进行,所以在大多数情况下,在进行写入操作之前必须先执行擦除。
    • NAND器件执行擦除操作相对简单,而NOR则要求在进行擦除前先将目标块内的所有位写为1。
    • 对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作需要在基于NOR的单元中进行。因此,设计师在选择存储解决方案时需要权衡各项因素,包括NOR的读速度稍快一些、NAND的写入速度更快以及NAND的擦除速度远快于NOR等。

二、SD NAND Flash

SD NAND(Secure Digital NAND)作为一种结合了NAND Flash技术和SD卡物理形式的存储解决方案,在现代电子设备中发挥着重要作用。这种存储技术的主要优势在于它既保留了NAND Flash存储介质的高性价比和大容量特性,又具备了SD卡的便携性和易于插入的便利性。因此,SD NAND在多种应用场合中找到了它的定位。

SD NAND非常适合应用于便携式存储设备中。例如,在数码相机中,SD NAND作为存储介质,可以为用户提供大量的照片和视频存储空间。此外,在便携式媒体播放器中,SD NAND也因其小巧的外形和高容量而备受青睐。用户可以通过简单地插入或更换SD NAND卡来增加存储容量,而无需更改设备的硬件设计或内部结构。

在嵌入式系统中,SD NAND同样表现出色。对于那些需要高密度存储空间并且对成本敏感的应用场景,如工业控制系统、智能家居设备以及汽车娱乐系统等,SD NAND提供了一个经济高效的选择。其灵活的存储扩展能力使得设备制造商可以根据最终产品的不同需求来调整存储容量,从而优化成本结构。

移动设备也是SD NAND的重要应用领域之一。在智能手机和平板电脑中,用户可以通过插入SD NAND卡来扩展设备的存储空间,这对于那些经常拍摄大量照片或下载高清视频的用户来说尤其重要。SD NAND不仅为移动设备提供了额外的存储空间,而且由于其标准的SD卡接口,使得用户可以在不同品牌和型号的设备之间轻松地共享数据。

SD NAND的优势还体现在其标准化接口上。SD NAND遵循SD卡协会制定的标准规范,这意味着它可以在任何支持SD卡接口的设备中使用,无需额外的适配器或复杂的驱动程序支持。这一点极大地简化了设备的硬件设计,并减少了因兼容性问题带来的开发障碍。

SD NAND作为一种兼具成本效益和便携性的存储解决方案,在多种应用场景中展现出其独特的优势。无论是对于追求成本效益的设备制造商,还是希望获得更大存储容量的终端用户,SD NAND都提供了一个理想的选择。

这里我以贴片式TF卡“CSNP32GCR01-AOW”型号为例介绍

image-20241010152343587

下面是芯片的实物图
这是官网申请的样品,焊接了转接板,可以直接插在SD卡卡槽上测试。 最终选型之后,设计PCB板时,设计接口,直接贴片上去使用,非常稳定,抖动也不会导致,外置卡TF卡这种容易松动的问题。

image-20221201170132109

image-20221201163735081

  1. 概述

    • SD NAND Flash是一种自带坏块管理的小容量闪存,尺寸小巧、简单易用,兼容性强且稳定可靠。
    • 标准SDIO接口,兼容SPI,可替代普通TF卡/SD卡,尺寸为6.2x8mm毫米。
    • 内置平均读写算法,读取速度达到23.5MB/S,写入速度为12.3MB/S。
    • 支持标准的SD 2.0协议,用户可以直接移植标准驱动代码,省去了驱动代码编程环节。
  2. 引脚分配

    • SD NAND接口定义了六个寄存器:OCR、CID、CSD、RCA、DSR和SCR。
    • OCR、CID、CSD和SCR寄存器携带SDNAND/内容特定信息,而RCA、DSR寄存器则是存储实际配置参数的配置寄存器。

    image-20241010152504527

  3. 数据传输模式

    • 默认模式支持可变时钟频率0-25MHz,最高12.5MB/秒接口速度(使用4条并行数据线)。
    • 高速模式支持可变时钟频率0-50MHz,最高25MB/秒接口速度(使用4条并行数据线)。

    image-20241010152531857

  4. 通电图

    • RDAT和RCMD(10K~100kΩ)是上拉电阻器,当SDNAND处于高阻抗状态时,保护CMD和DAT线路不受总线浮动的影响。
    • 建议VCC上有2.2uF电容,RCLK参考0~120Ω。

    image-20241010152735906

  5. 参考设计

    • 提供了初始化、单数据块测试和多数据块测试的STM32例程,通过这些例程可以验证SD NAND Flash的读写功能。

image-20241010152825240

三、STM32测试例程

image-20221201163748859

image-20221206191527228

(1)初始化

  • 初始化过程包括设置GPIO、配置SD_SPI、发送命令使SD卡进入空闲状态并获取卡类型信息。
SD_Error SD_Init(void)
{uint32_t i = 0;/*!< Initialize SD_SPI */GPIO_Configuration(); /*!< SD chip select high */SD_CS_HIGH();/*!< Send dummy byte 0xFF, 10 times with CS high *//*!< Rise CS and MOSI for 80 clocks cycles */for (i = 0; i <= 9; i++){/*!< Send dummy byte 0xFF */SD_WriteByte(SD_DUMMY_BYTE);} //获取卡的类型,最多尝试10次i=0;do{		/*------------Put SD in SPI mode--------------*//*!< SD initialized and set to SPI mode properly */SD_GoIdleState();/*Get card type*/SD_GetCardType();}while(SD_Type == SD_TYPE_NOT_SD && i++ >10);//不支持的卡if(SD_Type == SD_TYPE_NOT_SD)return SD_RESPONSE_FAILURE;return SD_GetCardInfo(&SDCardInfo);	}

(2)单数据块测试

  • 单数据块测试涉及填充缓冲区、写入一个512字节的数据块到地址0,然后从同一地址读取该数据块,最后比较写入和读出的数据以验证正确性。
void SD_SingleBlockTest(void)
{  /*------------------- Block Read/Write --------------------------*//* Fill the buffer to send */Fill_Buffer(Buffer_Block_Tx, BLOCK_SIZE, 0x320F);if (Status == SD_RESPONSE_NO_ERROR){/* Write block of 512 bytes on address 0 */Status = SD_WriteBlock(Buffer_Block_Tx, 0x00, BLOCK_SIZE);/* Check if the Transfer is finished */}if (Status == SD_RESPONSE_NO_ERROR){/* Read block of 512 bytes from address 0 */Status = SD_ReadBlock(Buffer_Block_Rx, 0x00, BLOCK_SIZE);}/* Check the correctness of written data */if (Status == SD_RESPONSE_NO_ERROR){TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, BLOCK_SIZE);}if(TransferStatus1 == PASSED){LED2_ON;printf("Single block 测试成功!\n");}else{LED1_ON;printf("Single block 测试失败,请确保SD卡正确接入开发板,或换一张SD卡测试!\n");}
}

(3)多数据块测试

  • 多数据块测试类似单数据块测试,但涉及多个连续的数据块。这有助于评估批量数据处理的能力。
void SD_MultiBlockTest(void)
{  /*--------------- Multiple Block Read/Write ---------------------*//* Fill the buffer to send */Fill_Buffer(Buffer_MultiBlock_Tx, MULTI_BUFFER_SIZE, 0x0);if (Status == SD_RESPONSE_NO_ERROR){/* Write multiple block of many bytes on address 0 */Status = SD_WriteMultiBlocks(Buffer_MultiBlock_Tx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS);/* Check if the Transfer is finished */}if (Status == SD_RESPONSE_NO_ERROR){/* Read block of many bytes from address 0 */Status = SD_ReadMultiBlocks(Buffer_MultiBlock_Rx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS);/* Check if the Transfer is finished */}/* Check the correctness of written data */if (Status == SD_RESPONSE_NO_ERROR){TransferStatus2 = Buffercmp(Buffer_MultiBlock_Tx, Buffer_MultiBlock_Rx, MULTI_BUFFER_SIZE);}if(TransferStatus2 == PASSED){LED2_ON;printf("Multi block 测试成功!");}else{LED1_ON;printf("Multi block 测试失败,请确保SD卡正确接入开发板,或换一张SD卡测试!");}
}

(4)状态缓冲

  • Buffercmp函数用于比较两个缓冲区的内容,确保写入和读出的数据一致。
  • Fill_Buffer函数用于填充缓冲区,生成指定长度的数据。
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength)
{while (BufferLength--){if (*pBuffer1 != *pBuffer2){return FAILED;}pBuffer1++;pBuffer2++;}return PASSED;
}void Fill_Buffer(uint8_t *pBuffer, uint32_t BufferLength, uint32_t Offset)
{uint16_t index = 0;/* Put in global buffer same values */for (index = 0; index < BufferLength; index++){pBuffer[index] = index + Offset;}
}

四、总结

本文介绍了Flash闪存的基本概念、分类及其特点,并详细说明了SD NAND Flash产品的特性和STM32平台上的测试方法。通过这些介绍,读者可以更好地理解和应用这一类型的存储解决方案。

免费申请 SD NAND 样品,可以去官网:http://www.longsto.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【含开题报告+文档+PPT+源码】基于SpringBoot乡村助农益农平台的设计与实现

开题报告 近年来&#xff0c;随着社会经济的快速发展和人民生活水平的提高&#xff0c;人们对优质农产品的需求越来越高。然而&#xff0c;传统的农产品销售管理模式存在一些问题。首先&#xff0c;农产品供应链信息不透明&#xff0c;导致生产者难以了解市场需求和价格变动趋…

iMazing只能苹果电脑吗 Win和Mac上的iMazing功能有区别吗

在当今数字时代&#xff0c;管理和备份手机数据变得越来越重要。无论是转移照片、备份短信&#xff0c;还是管理应用程序&#xff0c;一个强大的工具可以大大简化这些操作。iMazing作为一款备受好评的iOS设备管理软件&#xff0c;已经成为许多用户的选择。但是&#xff0c;许多…

Anaconda创建环境

目录 前言 第一步&#xff1a;更改环境创建位置 第二步&#xff1a;安装环境 前言 在我们创建多个项目的时候&#xff0c;有时会安装的库版本冲突&#xff0c;所以最好是一个项目一个环境 第一步&#xff1a;更改环境创建位置 新安装Anaconda后&#xff0c;在创建环境时环…

Web安全 - 路径穿越(Path Traversal)

文章目录 OWASP 2023 TOP 10导图定义路径穿越的原理常见攻击目标防御措施输入验证和清理避免直接拼接用户输入最小化权限日志监控 ExampleCode漏洞代码&#xff1a;路径穿越攻击案例漏洞说明修复后的安全代码代码分析 其他不同文件系统下的路径穿越特性Windows系统类Unix系统&a…

ctfshow-web 萌新题

给她 spring漏洞 pyload: 1.dirsearch扫描&#xff0c;发现git 2. GitHack工具得到.git文件 <?php $passsprintf("and pass%s",addslashes($_GET[pass])); $sqlsprintf("select * from user where name%s $pass",addslashes($_GET[name])); ?>…

交换排序:冒泡排序、递归实现快速排序

目录 冒泡排序 1.冒泡排序的核心思想 2.冒泡排序的思路步骤 3.冒泡排序代码 4.代码分析 5.对冒泡排序的时间复杂度是O(N^2)进行解析 6.冒泡排序的特性总结 递归实现快速排序(二路划分版本) 1.快速排序基本思路 2.代码思路步骤 3.代码实现 4.代码分析 (1)递归终止条…

介绍几个电池充电管理芯片(TP4056、SGM40561)

TP4056 上一篇我们介绍了个TP4055&#xff0c;那么跟TP4055相比&#xff0c;TP4056肯定是做了升级的。 首先是有最高1000mA的充电电流&#xff0c;而TP4055是500mA。 一般来说我们尽可能的让充电电流接近电池容量的一半&#xff0c;这样对电池比较好。 充电电压都是4.2V。 …

vite学习教程06、vite.config.js配置

前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用&#xff0c;尤其是在城市规划、地理信息系统&#xff08;GIS&#xff09;、工程监测等领域&#xff0c;处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

Vue3入门学习

Vue3入门学习 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

YOLO11改进|注意力机制篇|引入NAM注意力机制

目录 一、【NAM】注意力机制1.1【NAM】注意力介绍1.2【NAM】核心代码 二、添加【NAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【NAM】注意力机制 1.1【NAM】注意力介绍 下图是【NAM】的结构图&#xff0c;让我们简单分…

C++ day04(友元 friend、运算符重载、String字符串)

目录 【1】友元 friend 1》概念 2》友元函数 3》友元类 4》友元成员函数 【2】运算符重载 1》概念 2》友元函数运算符重载 ​编辑 3》成员函数运算符重载 4》赋值运算符与类型转换运算符重载 5》注意事项 【3】String 字符串类 【1】友元 friend 1》概念 定义&#x…

YOLOv5改进——添加SimAM注意力机制

目录 一、SimAM注意力机制核心代码 二、修改common.py 三、修改yolo.py ​三、建立yaml文件 四、验证 一、SimAM注意力机制核心代码 在models文件夹下新建modules文件夹&#xff0c;在modules文件夹下新建一个py文件。这里为simam.py。复制以下代码到文件里面。 import…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第二周 深度卷积网络&#xff1a;实例探究&#xff08;Deep convolutional models: case studies&#xff09;2.7 Inception 网络&#xff08;Inception network&#xff09;2.8 使 用 开 源 …

75. 颜色分类

思路 先排最小的数&#xff0c;将最小的数都放至列表前面 则0~r-1都是最小值 从r到len(nums)-1继续进行排序&#xff0c;从尾部开始&#xff0c;将最大值放置尾部 class Solution(object):def sortColors(self, nums):""":type nums: List[int]:rtype: None …

Python | Leetcode Python题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; class Solution:def validIPAddress(self, queryIP: str) -> str:if queryIP.find(".") ! -1:# IPv4last -1for i in range(4):cur (len(queryIP) if i 3 else queryIP.find(".", last 1))if cur -1:return &q…

Window系统编程 - 文件操作

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天主要介绍使用windows系统编程操作读写文件 文件 CreateFile()函数讲解 介绍:该函数用于打开文件或者I/O流设备&#xff0c;文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和…

Jenkins Pipline流水线

提到 CI 工具&#xff0c;首先想到的就是“CI 界”的大佬--]enkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具,但是都不足以撼动 Jenkins 的地位。在企业中对于持续集成、持续部署的需求非常多,并且也会经常有-些比较复杂的需求,此时新生的 CI 工具不足以支撑这些很…

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片&#xff0c;Watch DogTimer&#xff0c;可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

LSTM(长短时记忆网络)

一、引言 在处理序列数据时&#xff0c;循环神经网络&#xff08;RNN&#xff09;虽然能够处理序列数据并保留历史信息&#xff0c;但在实践中发现它对于捕捉长时间依赖关系的能力有限&#xff0c;尤其是在训练过程中容易遇到梯度消失或梯度爆炸的问题。为了解决这些问题&…