tag 标签: 闪存芯片

相关博文
  • 2024-6-5 17:53
    0 个评论
      雷龙发展Nand flash芯片试用体验   一、项目背景   最近自己开始准备了一个智能家居控制系统项目,需要包含室内的温湿度、空气质量、烟雾浓度以及气体含量,能够存储相应的数据,并进行显示。   Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。   二、产品解析   NOR和NAND是市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。   “NAND存储器”经常可以与“NOR存储器”相互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码并且需要多次擦写,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。   NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除 速度大大影响了它的性能。   NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理需要特殊的系统接口。   三、主要区别   NOR与NAND的区别   性能比较   flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除 操作是十分简单的,而NOR则要求在进行擦除前 先要将目标块内所有的位都写为0。   由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s ,与此相反,擦除NAND器件是以8~32KB的块进 行的,执行相同的操作最多只需要4ms。   执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时), 更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。   NOR的读速度比NAND稍快一些。   NAND的写入速度比NOR快很多。   NAND的擦除速度远比NOR快。   NAND的擦除单元更小,相应的擦除电路更加简单。   NAND的实际应用方式要比NOR复杂的多。   NOR可以直接使用,并在上面直接运行代码,而NAND需要I/O接口,因此使用时需要驱动。   接口差别   NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每 一个字节。   NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同 。8个引脚用来传送控制、地址和数据信息。   NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。   NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。   NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理需要特殊的系统接口。   NAND Flash 的数据是以bit的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成Page,(NAND Flash 有多种结构,例如NAND Flash 是K9F1208,下面内容针对三星的K9F1208U0M),每页528Bytes(512byte(Main Area)+16byte(Spare Area)),每32个page形成一个Block(32*528B)。具体一片flash上有多少个Block视需要所定。再例如三星k9f1208U0M具有4096个block,故总容量为4096*(32*528B)=66MB,但是其中的2MB是用来保存ECC校验码等额外数据的,故实际中可使用的为64MB。   四、产品介绍   CSNP64GCR01-AOW   不用写驱动程序自带坏块管理的NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8封装,标准SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通TF卡/SD卡,尺寸7x8.5mm,内置平均读写算法,通过1万次随机掉电测试,耐高低温,机贴手贴都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD 2.0协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。支持TF卡启动的SOC都可以用SD NAND,提供STM32参考例程及原厂技术支持,容量:8GB,比TF卡稳定,比eMMC易用,样品免费试用。   五、产品优势   六、样品展示   很感谢雷龙发展提供了样品支持和试用,让自己的项目得到了更好的实现,这一次制作的U盘读取和写入使用到了这款产品,体验到了产品的优势和核心性能,感觉真的挺好的。   实物转接板   芯片实物图 雷龙发展官方网址: SD NAND FLASH-贴片式SD卡-贴片式t卡-存储芯片 ————————————————   亲爱的卡友们,欢迎光临雷龙官网,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后, 深圳市雷龙发展 专注存储行业13年,专业提供小容量存储解决方案。
  • 热度 3
    2024-1-5 18:08
    353 次阅读|
    0 个评论
    前言   大家好,我们一般在STM32项目开发中或者在其他嵌入式开发中,经常会用到存储芯片存储数据。今天我和大家来介绍一款存储芯片,我这里采用(雷龙) CS创世 SD NAND 。   SD NAND介绍   什么是SD NAND?它俗称贴片式T卡,贴片式TF卡,贴片式SD卡,贴片式内存卡,贴片式闪存卡,贴片式卡...等等。虽然SD NAND 和TF卡称呼上有些类似,但是SD NAND和TF卡有着本质上的区别。   SD NAND 与 TF卡的区别:(看图表)   SD和TF区别   LGA-8封装   什么是LGA-8封装?   LGA-8封装是一种将芯片引脚通过电路板的层间连接到器件底部的封装形式,也称为Land Grid Array封装。与其他封装形式不同,LGA-8封装没有凸出的引脚,而是在芯片的底部设计了一些小的焊盘,用于与电路板焊接连接。   LGA-8封装的由来与SDNAND芯片其实并没有直接关系,但它提供了更好的电性、机械性和热性能,因而被广泛应用于存储芯片、微处理器、芯片组等器件中。   在SDNAND芯片的应用中,LGA-8封装的优点包括:   更好的电性能:LGA-8封装底部的焊盘与电路板连接时可提供更好的电性能,减少因接插件导致的信号损失,实现更高速率和更远距离的数据传输。   更好的机械性能:LGA-8封装通过焊接连接,可以获得更高的机械强度和稳定性。同时,由于没有凸出的引脚,LGA-8封装使得SDNAND芯片的外形更加紧凑,可适应更小尺寸的应用场景,提高产品设计自由度。   更好的热性能:焊接连接可提供更好的热传递性能,减少因热量集中导致的器件失效或故障。   因此,LGA-8封装的设计为SDNAND芯片的应用提供了更好的技术支持,更好的性能表现和更广泛的应用领域。   产品介绍   CSNP4GCR01-AMW   不用写驱动程序自带坏块管理的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/2GB/4GB/8GB,比TF卡稳定,比eMMC便宜,样品免费试用。   CSNP64GCR01-AOW   不用写驱动程序自带坏块管理的NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8封装,标准SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通TF卡/SD卡,尺寸7x8.5mm,内置平均读写算法,通过1万次随机掉电测试,耐高低温,机贴手贴都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD 2.0协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。支持TF卡启动的SOC都可以用SD NAND,提供STM32参考例程及原厂技术支持,容量:8GB,比TF卡稳定,比eMMC易用,样品免费试用。   SD NAND和eMMC的区别   SD NAND和eMMC都是存储设备,但它们有一些不同之处:   SD NAND优点   SD NAND是一种基于NAND闪存技术的存储设备,与其他存储设备相比,它具有以下几个显著的优点:   高可靠性:SD NAND针对嵌入式系统的特殊需求进行了设计,具有更高的可靠性。它内置了闪存控制器和NAND闪存芯片,支持 ECC (Error Correcting Code) 算法和坏块管理,能有效地降低数据丢失的风险。   高速读写:SD NAND的读写速度比硬盘慢,但通常比SD卡和SPI闪存等其他存储设备更快。在使用SDIO接口时,SD NAND的速度更高。其读取时延较低,比 SD 卡等其他媒体被访问时更加实时。   内置控制器:SD NAND内置了控制器,不必额外添置控制器,可以实现单芯片解决方案,降低了芯片的成本和复杂度。   低功耗:SD NAND使用了新型的SD ver5.1总线模式,并支持DDR传输。除 SDIO 接口外,还支持 SPI 接口,并且具有低功耗特点。它可以在连接到其它设备时不占用过量的功率。   高度集成:SD NAND可实现高度集成。闪存、控制器、内部SDRAM可以打在一片芯片上。   基于这些优点,SD NAND适用于许多嵌入式应用,如智能家居、工业控制、移动设备等。在这些应用中, SD NAND能提供高可靠性、高速读写、低功耗和高度集成等特点, 为新一代的嵌入式存储解决方案引领市场趋势。   总结   对这款产品优点总结为一下几点,其尺寸小巧,可以达到6*8mm,简单易用而且稳定可靠。 ———————————————— 【本文转载自CSDN,作者:爱吃饼干的小白鼠】 深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。
  • 热度 2
    2023-12-15 17:57
    366 次阅读|
    0 个评论
      SD NAND 也称之为贴片式TF卡,贴片式SD卡,采用标准的SDIO接口,兼容SPI接口。下图所示为CS 新一代CS SD NAND NP1GCR01-AOW 大小为128M,对比128M的SD卡,可以看到贴片SD卡尺寸更小,不要SD卡座,占用更小的PCB面积;也可以节省PCB板层数,2层板即可使用。而且兼容可替代普通TF卡/SD卡,硬件电路软件程序通用。本案例基于RT-Thread物联网操作系统,更是不需要编写任何复杂的驱动代码就可以SD NAND读写操作。    (文末提供,STM32驱动代码下载连接,需要可以自行下载)   将SD NAND插入SD卡卡座。首先,新建一个RT-Thread项目工程,这里基于Draco开发板创建。   完整的RT-thread项目默认是开启虚拟文件系统组件,RT-Thread DFS 组件的主要功能特点有:   为应用程序提供统一的 POSIX 文件和目录操作接口:read、write、poll/select 等。   支持多种类型的文件系统,如 FatFS、RomFS、DevFS 等,并提供普通文件、设备文件、网络文件描述符的管理。这里默认开启FatFS.   支持多种类型的存储设备,如 SD Card、SPI Flash、Nand Flash 等。   在 RT-Thread 中,我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的路径上,然后通过这个路径来访问存储设备。在应用程序文件夹下可找到mnt.c源程序。可以看到挂载文件系统的代码如下所示。   上图通过自动化初始化代码实现文件系统挂载。挂载成功dfs_mount函数返回0.通过调试串口可以看到打印信息。Mount "/dev/sd0" on "/":0 done,说明SD NAND挂载成功。   读写文件测试:文件系统正常工作后,就可以运行应用示例,在该示例代码中,首先会使用 open() 函数创建一个文件 text.txt,并使用 write() 函数在文件中写入字符串 “RT-Thread Programmer!\n”,然后关闭文件。再次使用 open() 函数打开 text.txt 文件,读出其中的内容并打印出来,最后关闭该文件。   测试结果:在调试中断输入msh 命令readwrite_sample,即可运行案例。可以看到成功创建了文本,并写入了数据。    STM32驱动下载链接:https://pan.baidu.com/s/1t9Bd3YUNtQmgpyQbmOIMEA?pwd=8051   提取码:8051
  • 热度 8
    2023-3-3 17:52
    623 次阅读|
    0 个评论
    五、案例使用 5.1 读取GBK字库文件(LCD汉字显示) 产品开发中,如果设备带有LCD显示屏,一般会显示各种文字提示,或者机器操作说明,显示中文需要字库,为了方便字模的提取,可以将字库文件制作好之后放到SD NAND上,通过文件系统打开字库文件,读取字模进行显示。 下面贴出文件系统读取字模的核心代码: /* 函数功能: 显示GBK字库数据 u32 x 范围0~319 u32 y 范围0~479 u32 size 数据的宽度(必须是8的倍数) 是正方形 u8 *p 中文 说明: 取模横向坐标必须保证是8的倍数 */ void ILI9341_DisplayGBKData(u32 x,u32 y,u32 size,u8 *p) { FIL fp; UINT br; u8 L,H; u32 Addr; u16 font_size=size/8*size; //字体占用的点阵码字节大小 u8 *buff=NULL; H=*p; L=*(p+1); if(L<0x7f)L=L-0x40; else L=L-0x41; H=H-0x81; Addr=(190*H+L)*font_size; //中文在字库里的偏移量 buff=malloc(font_size); //使用的堆空间 if(buff==NULL)return; switch(size) { case 16: if(f_open(&fp,"0:/font/gbk16.DZK",FA_READ)!=FR_OK) { printf("f_open error.\r\n"); } f_lseek(&fp,Addr); f_read(&fp,buff,font_size,&br); f_close(&fp); break; case 24: f_open(&fp,"0:/font/gbk24.DZK",FA_READ); f_lseek(&fp,Addr); f_read(&fp,buff,font_size,&br); f_close(&fp); break; case 32: break; } //显示中文 ILI9341_DisplayData(x,y,size,size,buff); //释放空间 free(buff); } 这是读取字模,显示的效果: 5.2 读取MP3文件播放(开机音乐) 这个例子是演示文件系统的目录扫描函数使用方式,读取指定目录下的MP3文件进行播放。 u8 PlayerMP3(const char *path); FATFS FatFs; int main() { LED_Init(); BEEP_Init(); KeyInit(); USARTx_Init(USART1,72,115200); SDCardDeviceInit(); //初始化SD卡 // res=f_mkfs("0:",FM_ANY,0,work,sizeof work); // if(res)printf("格式化失败!\n"); // else printf("格式化成功!\n"); f_mount(&FatFs, "0:", 0); //注册工作区 PlayerMP3("0:/MP3"); while(1) { DelayMs(100); LED0=!LED0; } } /* 函数功能: 扫描目录mp3播放 0表示成功 1表示失败 */ u8 PlayerMP3(const char *path) { DIR dir; FRESULT res; FILINFO fno; //存放读取的文件信息 char *abs_path=NULL; /*1. 打开目录*/ res=f_opendir(&dir,path); if(res!=FR_OK)return res; /*2. 循环读取目录*/ while(1) { res=f_readdir(&dir,&fno); if(fno.fname == 0 || res!=0)break; printf("文件名称: %s,文件大小: %ld 字节\r\n",fno.fname,fno.fsize); /*过滤目录*/ if(strstr(fno.fname,".mp3")) { //申请存放文件名称的长度 abs_path=malloc(strlen(path)+strlen(fno.fname)+1); if(abs_path==NULL)break; strcpy(abs_path,path); strcat(abs_path,"/"); strcat(abs_path,fno.fname); printf("abs_path=%s\n",abs_path); VS1053_MP3(0,0,abs_path); free(abs_path); } } /*3. 关闭目录*/ f_closedir(&dir); return 0; }
  • 2022-12-8 17:16
    0 个评论
    七.SDIO外设结构体 其实前面关于SDIO寄存器的讲解已经比较详细了,这里再借助于关于SDIO结构体再进行总结一遍。 标准库函数对 SDIO 外设建立了三个初始化结构体,分别为 SDIO 初始化结构体SDIO_InitTypeDef、SDIO 命令初始化结构体 SDIO_CmdInitTypeDef 和 SDIO 数据初始化结 构体 SDIO_DataInitTypeDef。这些结构体成员用于设置 SDIO 工作环境参数,并由 SDIO 相应初始化配置函数或功能函数调用,这些参数将会被写入到 SDIO 相应的寄存器,达到配置 SDIO 工作环境的目的。 至于为什么需要一个命令结构体与数据结构体,就是为了方便我们配置SDIO关于寄存器位,因为发送命令或者数据需要很多参数配置。 1.SDIO初始化结构体 SDIO 初始化结构体用于配置 SDIO 基本工作环境,比如时钟分频、时钟沿、数据宽度等等。它被 SDIO_Init 函数使用。 1) SDIO_ClockEdge:主时钟 SDIOCLK 产生 CLK 引脚时钟有效沿选择,可选上升沿或下降沿。 2) SDIO_ClockBypass:时钟分频旁路使用,可选使能或禁用,如果使能旁路,SDIOCLK (72MHZ )直接驱动 CLK 线输出时钟(不满足最高25HZ的要求),如果禁用,使用 SDIO_CLKCR 寄存器的 CLKDIV 位值分频 SDIOCLK,然后输出到 CLK 线。一般选择禁用时钟分频旁路。 3) SDIO_ClockPowerSave:节能模式选择,可选使能或禁用,它设定 SDIO_CLKCR 寄存器的 PWRSAV 位的值。如果使能节能模式,CLK 线只有在总线激活时才有时钟输出;如果禁用节能模式,始终使能 CLK 线输出时钟。 4) SDIO_BusWide:数据线宽度选择,可选 1 位数据总线、4 位数据总线或 8 为数据总线,系统默认使用 1 位数据总线,操作 SD 卡时在数据传输模式下一般选择 4 位数据总线。它设定 SDIO_CLKCR 寄存器的 WIDBUS 位的值。 5) SDIO_HardwareFlowControl:硬件流控制选择,可选使能或禁用,它设定SDIO_CLKCR 寄存器的 HWFC_EN 位的值。硬件流控制功能可以避免 FIFO 发送上溢和下溢错误。 6) SDIO_ClockDiv:时钟分频系数,它设定 SDIO_CLKCR 寄存器的 CLKDIV 位的值,设置 SDIOCLK 与 CLK 线输出时钟分频系数: CLK 线时钟频率=SDIOCLK/( )。 2.SDIO命令初始化结构体 1) SDIO_Argument:作为命令的一部分发送到卡的命令参数,它设定 SDIO 参数寄存器(SDIO_ARG)的值。 (2) SDIO_CmdIndex:命令号选择,它设定 SDIO 命令寄存器(SDIO_CMD)的 CMDINDEX位的值。 (3) SDIO_Response:响应类型,SDIO 定义两个响应类型:长响应和短响应。根据命令号选择对应的响应类型。SDIO 定义了四个 32 位的 SDIO 响应寄存器(SDIO_RESPx,x=1…4),短响应只用SDIO_RESP1,长响应使用4个(SDIO_RESPx,x=1…4)。 1)命令响应寄存器 2)SDIO响应寄存器1~4 4) SDIO_Wait:等待类型选择,有三种状态可选,一种是无等待状态,超时检测功能启动,一种是等待中断,另外一种是等待传输完成。 5) SDIO_CPSM:命令路径状态机控制,可选使能或禁用 CPSM。它设定 SDIO_CMD 寄存器的 CPSMEN 位的值 只要我们使能的了命令状态机,则下面发送命令和接收响应的过程中的状态转换就不用我们管了 当我们要发送命令,我们只需要配置这个命令初始化结构体的成员,然后调用下图这个函数,则我们配置的参数写入对应的寄存器位中。 3.SDIO数据初始化结构体 1) SDIO_DataTimeOut:设置数据传输以卡总线时钟周期表示的超时周期,它设定 SDIO数据定时器寄存器(SDIO_DTIMER)的值。在 DPSM 进入 Wait_R 或繁忙状态后开始递减,直到 0 还处于以上两种状态则将超时状态标志置 1(详情前面的数据通道小节)。 2) SDIO_DataLength:设置传输数据长度。 3) SDIO_DataBlockSize:设置数据块大小,有多种尺寸可选,不同命令要求的数据块可能不同。 4) SDIO_TransferDir:数据传输方向,可选从主机到卡的写操作,或从卡到主机的读操作。 5) SDIO_TransferMode:数据传输模式,可选数据块或数据流模式。对于 SD 卡操作使用数据块类型。 6) SDIO_DPSM:数据路径状态机控制,可选使能或禁用 DPSM。它设定 SDIO_DCTRL寄存器的 DTEN 位的值。要实现数据传输都必须使能 SDIO_DPSM。 与命令一样使能了数据路径状态机,就不用高那么多麻烦的状态转换了 八.SD卡读写测试实验 我们平时使用的SD 卡都是已经包含有文件系统的,一般不会使用本实验的操作方式读写 SD 卡,但是对学习SD卡的驱动原理非常重要!!! 本实验是进行 SD卡最底层的数据读写操作,直接使用 SDIO 对 SD 卡进行读写,会损坏 SD 卡的文件系统,导致数据丢失,所以做这个实验之前需要备份SD卡数据。 主要是学习SD卡的卡识别过程,以及数据传输工过程,其实就是完全依照前面的两个流程图来实现代码的。 卡识别模式流程图 数据传输流程图 1.硬件设计 原理图: 实物图: 我这里用的是CS创世的贴片式SD卡,也称之为SD NAND , 内部存储单元架构为SLC,适合存代码。直接上板时相比于拔插式SD卡在抗震和抗PIN氧化方面更有优势,对于缩小整板体积也有一定帮助。 详情请参考: 雷龙官网 2.代码讲解 先看主函数: SD_Terst函数: 我们主要讲解的就是SD卡的初始化 SD_Init()函数: /** *函数名:SD_Init *描述:初始化SD卡,使卡处于就绪状态(准备传输数据) *输入:无 *输出:-SD_ErrorSD卡错误代码 *成功时则为SD_OK *调用:外部调用 */SD_ErrorSD_Init(void){ /*重置SD_Error状态*/ SD_Errorerrorstatus=SD_OK; NVIC_Configuration(); /*SDIO外设底层引脚初始化*/ GPIO_Configuration(); /*对SDIO的所有寄存器进行复位*/ SDIO_DeInit(); /*上电并进行卡识别流程,确认卡的操作电压*/ errorstatus=SD_PowerON(); /*如果上电,识别不成功,返回“响应超时”错误*/ if(errorstatus!=SD_OK) { /*!
相关资源