tag 标签: SD NAND Flash

相关帖子
相关博文
  • 2024-10-16 18:07
    147 次阅读|
    0 个评论
    说起SD NAND FLASH常被联想到SD卡,SD NAND FLASH具备当前SD卡的基本功能,并具有更高的存储密度,更小的体积,通过芯片形式焊接在电路中稳定可靠,在电路中高度集成可SMT机贴片等优点。这一节我们主要是介绍一下SD NAND FLASH,该应用实例的SD NAND FLASH采用深圳市雷龙发展有限公司的CSNP1GCR01-AOW型号的存储芯片,雷龙发展在SD NAND FLASH中已经有多年的深厚研发经验和严格的测试流程。 一、SD NAND FLASH芯片简介 CSNP1GCR01-AOW是基于NAND FLASH 和SD 控制器的1Gb容量空间的存储芯片。比传统的NAND FLASH具有还有坏块管理,数据ECC功能和异常掉电保证数据安全存储等功能。封装尺寸为8mm x 6mm x0.75mm。 产品特点: 接口:具备1线或者4线SD标准2.0版本 供电:Vcc = 2.7V - 3.6V 默认模式:可变的时钟范围0~25MHz,高达12.5MB/s的接口速度(使用4线) 高速模式:可变的时钟范围0~50MHz,高达25MB/s的接口速度(使用4线) 工作温度范围:-40°C to +85°C 存储温度范围:-55°C to +125°C 标准电流:< 250uA 开关功能命令支持高速,商务和未来的一些功能 矫正存储区域的错误 内容保护机制兼容最安全的SDMI标准 支持SD NAND密码保护功能 使用机械开关进行写保护功能 内置写保护功能(永久和临时) 通用场景 应用程序特定命令 舒适擦除机制 通过下图的功能框图可以理解,SD NAND FLASH是通过Memory core来进行存储数据的,通过SD控制进行通讯接口的控制和存储的管理。 外部引脚位置和定义如下图所示: 机械尺寸如下图所示: 二、总结 本节主要介绍了SD NAND FLASH的基本功能特性,引脚定义和外形的机械尺寸,通过这个基本的描述可以对SD NAND FLASH有个初步的了解。下一节主要介绍,SD NAND FLASH的初始化过程。
  • 热度 1
    2023-12-6 18:18
    643 次阅读|
    0 个评论
    文章目录 前言 1 SD NAND概述 2 代码说明 3 记录Log 前言 本文基于 ESP32 芯片作为主控制器,测试 SD NAND 记录飞控 Log 功能。 关于 MCU 的存储方面,以前基本上用内置的 E2PROM,或者是外置的 NOR Flash 就可以。随着物联网的兴起,MCU 的应用越来越广泛,逐渐的 MCU 会涉及到大容量的存储需求,用来存储音频,图片(GUI)、视频缓存、协议栈等等。传统的 E2PROM 和 NOR Flash 就不够用了。这个时候 MCU 可能就需要用到 NAND Flash。 针对 MCU 需要使用大容量的存储需求,推荐一款简单易用、稳定可靠的 NAND Flash —— SD NAND 。 1 SD NAND概述 SD NAND 的架构,内部采用使用寿命最长、性能最稳定的 NAND Flash(SLC NAND Flash)晶圆,它的擦写寿命可以达到 5~10 万次。内置了 Flash 控制器和针对 NAND Flash 管理的 Firmware。对外采用通用性最强的 SD 接口(几乎所有 MCU 都带有 SD 接口)。 本文选择的是 CSNP32GCR01-AOW 芯片。 不用编写驱动程序,自带坏块管理的 NAND Flash(贴片式 TF 卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8 封装,标准 SDIO 接口,兼容 SPI,兼容拔插式 TF卡/SD卡,可替代普通 TF卡/SD卡,尺寸 6.2x8mm。 内置平均读写算法,通过 1 万次随机掉电测试耐高低温,机贴手贴都非常方便,速度级别 Class10(读取速度 23.5MB/s,写入速度 12.3MB/s)。标准的 SD 2.0 协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。支持 TF 卡启动的 SOC 都可以用 SD NAND,提供 STM32 参考例程及原厂技术支持,容量:4GB, 比 TF 卡稳定,比 eMMC 便宜。 2 代码说明 1. 宏定义使能 SD 卡功能 #define HAL_ESP32_SDCARD 2. 挂载 SD 卡 bool sdcard_retry(void) { if(!card) return mount_sdcard; return true; } bool mount_sdcard { printf("............Try mount.\n"); sdmmc_host_t host = SDMMC_HOST_DEFAULT; host.max_freq_khz = SDMMC_FREQ_HIGHSPEED; sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT; slot_config.flags = SDMMC_SLOT_FLAG_INTERNAL_PULLUP; esp_vfs_fat_sdmmc_mount_config_t mount_config = { .format_if_mount_failed = false, .max_files = 5, .allocation_unit_size = 4 * 1024 }; esp_err_t ret = esp_vfs_fat_sdmmc_mount("/SDCARD", &host, &slot_config, &mount_config, &card); if (ret == ESP_OK) { mkdir("/SDCARD/APM", 0777); printf("sdcard is mounted\n"); update_fw; return true; } else { printf("sdcard is not mounted.\n"); return false; } } 3. 卸载 SD 卡 void sdcard_stop(void) { unmount_sdcard; } void unmount_sdcard { if (card != nullptr) { esp_vfs_fat_sdmmc_unmount; } } 3 记录Log 1. LOG目录建立 可以看到飞控已经在 SD NAND 中成功建立 LOG 目录。 2. LOG分析 飞机通电,翻滚机身,记录飞机的姿态角。 下载日志,加载到 Mission Planner 软件。选中 ATT 字段中的 Roll 和 Pitch。可以看到曲线跟随飞机姿态变化。 至此,使用 SD NAND 替代 SD 卡,测试飞控 LOG 记录功能完成。
  • 热度 8
    2023-3-3 17:52
    668 次阅读|
    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) { /*!
  • 2022-8-4 17:48
    3 次阅读|
    0 个评论
    SD NAND Flash简介!
         SD NAND Flash是一种特殊形式的NAND Flash,其内部有包含一个SD 控制器及NAND Flash。他的特点主要有封装小,使用方便的特点。目前市面上的SD NAND Flash的容量主要有1Gb,2Gb,4Gb等。封装形式是LGA-8。主要应用于玩具及音频耳机市场。   对于使用者来说,可以把它单纯的看做是一个SD(TF)卡,存储一些数据,图片或音频。也可以把它作为功能更强大的NAND Flash,免去您程序上做ECC校验及坏块管理的麻烦。 感兴趣的卡友,可免费申请样品:http://www.longsto.com/feedback/   很多产品虽然现在使用的是SD(TF)卡,但产品的设计者不希望用户能够更换这些卡,甚至会采用点胶等手段固定住卡,以防卡脱落。因为卡座和卡是通过卡扣固定的。一旦产品跌落,随之SD(TF)卡容易掉落,需要重新找回SD(TF)卡插入卡座。影响客户体验而且可能存在丢失的情况。即使点胶也无法保证SD(TF)卡不脱落。SD NAND Flash则可以认为是焊接在PCB板上T卡,不会出现跌落丢卡的情况,降低了产品的返修率。   另外有些主控芯片不支持并行接口的NAND Flash,但是需要用到1Gb,2Gb,4Gb的容量作为语音、数据信息的存储,或者主控芯片的参考驱动代码只提供了NAND Flash的基本驱动,并未提供ECC的校验及坏块管理部分。   这种情况下使用SD NAND Flash就非常合适,所有关于ECC校验及坏块管理的繁琐驱动都在SD NAND Flash内部进行了处理。主控芯片的驱动会相对简单,使用非常方便。当客户遇到上述问题时,可以使用SD NAND Flash让产品更稳定,更加易用。   亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。