快讯
HOME
快讯
正文内容
等待nand CS创世SD NAND的存储芯片应用方案
发布时间 : 2024-10-07
作者 : 小编
访问数量 : 23
扫码分享至微信

CS创世SD NAND的存储芯片应用方案

前言:

 很感谢深圳雷龙发展有限公司为博主提供的两片SD NAND的存储芯片,在这里博主记录一下自己的使用过程以及部分设计。

深入了解该产品:

 拿到这个产品之后,我大致了解了下两款芯片的性能。CSNP4GCR01-AMW是一种基于NAND闪存和SD控制器的4Gb密度嵌入式存储;而CSNP32GCR01-AOW是一种基于NAND闪存和SD控制器的32Gb密度嵌入式存储。与原始NAND相比其具有嵌入式坏块管理和更强的嵌入式ECC。即使在异常断电,它仍然可以安全地保存数据。作为一个存储芯片,它确实做到了小巧,LGA-8的封装对比我之前用到过的TF卡,只占到了其面积的三分之一,这样对于一些嵌入式的设计就方便了很多。

 雷龙官方还很贴心的提供了样品的测试板,在这款测试板上,我焊接了4GB的CSNP4GCR01-AMW上去,并且跑了一下分,对于一款小的存储芯片而言,实在难得。

 (上图为测试板焊接图)

 博主日前在设计基于H616与NB-IOT的嵌入式智能储物柜的时候考虑过存储方面的问题,当时在SD NAND和EMMC与TF卡中徘徊,以下是几个存储类型的对比。

 经过多方对比,本着不需要频繁更换的原则,同时也为了更好的防水和成本考虑,最终决定使用雷龙公司的SD NAND 作为设计样品的存储部分。

 此外,SD NAND还具有不用写驱动程序自带坏块管理的NAND FLASH(贴片式TF卡),不标准的SDIO接口,也同时兼容SPI/SD接口,10万次的SLC晶圆擦写寿命,通过一万次的随机掉电测试耐高低温,经过跑分测得,速度级别Class10。标准的SD2.0协议,普通的SD卡可以直接驱动,支持TF卡启动的SOC都可以用SD NAND,而且雷龙官方还贴心的提供了STM32参考例程和原厂技术支持,这对于刚上手的小白而言,十分友好。

设计理念:

 使用H616作为主控CPU并搭配NB-IOT来向申请下来的云端传输数据,当WIFI正常时,储物数据每搁两小时向云端传输一次,当有人取出物品时再次向云端发送一次数据(不保留在SD NAND中);一旦系统检测到WIFI出现问题,储物数据转而存储到SD NAND中,取物时输入的物品ID和取出时间一并放入SD NAND中(我也是看中了SD NAND与原始NAND相比其具有嵌入式坏块管理和更强的嵌入式ECC。即使在异常断电,它仍然可以安全地保存数据这一点)。

部分SD NAND的参考设计

 根据官方数据手册提供的SD NAND参考设计,只占用8个GPIO,对于H616来说,确实很友好

 这里为了不泄露他人的劳动成果,我也就不粘PCB设计了。

采用H616驱动SD NAND的示例代码

 下面是关于H616驱动SD NAND的示例代码,这里记录一下自己当初的学习过程(注:这个代码不能直接拿过来就用,而是要根据自己的需求修改)

#include <stdio.h>#include <stdint.h>#include <stdlib.h>#include <string.h>#include "h616_sdio.h"// 定义SDIO引脚#define SDIO_CMD_PIN 0#define SDIO_CLK_PIN 1#define SDIO_D0_PIN 2#define SDIO_D1_PIN 3#define SDIO_D2_PIN 4#define SDIO_D3_PIN 5// 定义NAND芯片命令#define CMD_READ 0x00#define CMD_WRITE 0x80#define CMD_ERASE 0x60#define CMD_STATUS 0x70#define CMD_RESET 0xff// 定义NAND芯片状态#define STATUS_READY 0x40#define STATUS_ERROR 0x01// 初始化SDIO控制器void sdio_init(){// 设置SDIO引脚模式和速率h616_sdio_set_pin_mode(SDIO_CMD_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_pin_mode(SDIO_CLK_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_pin_mode(SDIO_D0_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_pin_mode(SDIO_D1_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_pin_mode(SDIO_D2_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_pin_mode(SDIO_D3_PIN, H616_SDIO_PIN_MODE_SDIO);h616_sdio_set_clock(H616_SDIO_CLOCK_FREQ_25MHZ);// 初始化SDIO控制器h616_sdio_init();}// 发送NAND芯片命令void nand_send_cmd(uint8_t cmd){// 设置SDIO控制器传输模式和命令码h616_sdio_set_transfer_mode(H616_SDIO_TRANSFER_MODE_WRITE);h616_sdio_set_command_code(cmd);// 发送命令h616_sdio_send_command();}// 发送NAND芯片地址void nand_send_addr(uint32_t addr){// 设置SDIO控制器传输模式和地址h616_sdio_set_transfer_mode(H616_SDIO_TRANSFER_MODE_WRITE);h616_sdio_set_address(addr);// 发送地址h616_sdio_send_address();}// 读取NAND芯片数据void nand_read_data(uint8_t *data, uint32_t size){// 设置SDIO控制器传输模式h616_sdio_set_transfer_mode(H616_SDIO_TRANSFER_MODE_READ);// 读取数据h616_sdio_read_data(data, size);}// 写入NAND芯片数据void nand_write_data(const uint8_t *data, uint32_t size){// 设置SDIO控制器传输模式h616_sdio_set_transfer_mode(H616_SDIO_TRANSFER_MODE_WRITE);// 写入数据h616_sdio_write_data(data, size);}// 读取NAND芯片状态uint8_t nand_read_status(){uint8_t status;// 发送读取状态命令nand_send_cmd(CMD_STATUS);// 读取状态nand_read_data(&status, 1);return status;}// 等待NAND芯片准备就绪void nand_wait_ready(){uint8_t status;// 循环读取状态,直到NAND芯片准备就绪do {status = nand_read_status();} while ((status & STATUS_READY) == 0);}// 读取NAND芯片数据void nand_read(uint32_t page, uint32_t column, uint8_t *data, uint32_t size){// 发送读取命令和地址nand_send_cmd(CMD_READ);nand_send_addr(column | (page << 8));// 等待NAND芯片准备就绪nand_wait_ready();// 读取数据nand_read_data(data, size);}// 写入NAND芯片数据void nand_write(uint32_t page, uint32_t column, const uint8_t *data, uint32_t size){// 发送写入命令和地址nand_send_cmd(CMD_WRITE);nand_send_addr(column | (page << 8));// 写入数据nand_write_data(data, size);// 等待NAND芯片准备就绪nand_wait_ready();}// 擦除NAND芯片块void nand_erase(uint32_t block){// 发送擦除命令和地址nand_send_cmd(CMD_ERASE);nand_send_addr(block << 8);// 等待NAND芯片准备就绪nand_wait_ready();}// 复位NAND芯片void nand_reset(){// 发送复位命令nand_send_cmd(CMD_RESET);// 等待NAND芯片准备就绪nand_wait_ready();}// 示例程序入口int main(){uint8_t data[2048];memset(data, 0x5a, sizeof(data));// 初始化SDIO控制器sdio_init();// 复位NAND芯片nand_reset();// 擦除第0块nand_erase(0);// 写入第0页nand_write(0, 0, data, sizeof(data));// 读取第0页nand_read(0, 0, data, sizeof(data));return 0;}

 ————————————————

【本文转载自CSDN,作者:孙启尧】

存储芯片 emmc、Nand flash、Nor flash之间有什么区别

随着存储领域的发展,有很多不同的存储介质,今天ICMAX就带大家来分一分emmc、Nand flash、Nor flash之间的区别。

一、定义及区别

emmc:全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上。

Nand flash:一种存储数据介质;若要读取其中的数据,需要外接的主控电路。

Nor flash:也是一种存储介质;它的存储空间一般比较小,但它可以不用初始化,可以在其内部运行程序,一般在其存储一些初始化内存的固件代码。

这里主要重点讲的是emmc 和Nand flash 之间的区别,主要区别如下:

(1) 在组成结构上:emmc存储芯片简化了存储器的设计,将NAND Flash芯片和控制芯片以MCP技术封装在一起,省去零组件耗用电路板的面积,同时也让手机厂商或是计算机厂商在设计新产品时的便利性大大提高。而NAND Flash仅仅只是一块存储设备,若要进行数据传输的话,只能通过主机端的控制器来进行操作,两者的结构图如下:

(2) 在功能上:eMMC则在其内部集成了 Flash Controller,包括了协议、擦写均衡、坏块管理、ECC校验、电源管理、时钟管理、数据存取等功能。相比于直接将NAND Flash接入到Host 端,eMMC屏蔽了 NAND Flash 的物理特性,可以减少 Host 端软件的复杂度,让 Host 端专注于上层业务,省去对 NAND Flash 进行特殊的处理。同时,eMMC通过使用Cache、Memory Array 等技术,在读写性能上也比 NAND Flash要好很多。而NAND Flash 是直接接入 Host 端的,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系统来做坏块管理、ECC等的功能。另一方面,emmc的读写速度也比NAND Flash的读写速度快,emmc的读写可高达每秒50MB到100MB以上;

二、emmc的初始化和数据通信

emmc与主机之间通信的结构图:

其中包括Card Interface(CMD,DATA,CLK)、Memory core interface、总线接口控制(Card Interface Controller)、电源控制、寄存器组。

图中寄存器组的功能见下表:

CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期。

RCA: 卡地址寄存器,可写的16bit寄存器,存有Device identification模式由host分配的通信地址,host会在代码里面记录这个地址,MMC则存入RCA寄存器,默认值为0x0001。保留0x0000以用来将all device设置为等待CMD7命令状态。

CSD: 卡专有数据寄存器部分可读写128bit,卡容量,最大传输速率,读写操作的最大电流、电压,读写擦出块的最大长度等。

SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit或4bit)。

OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V占1位, 第31位卡上电过程是否完成。

(5)Device Identification Mode和初始化

MMC通过发CMD的方式来实现卡的初始化和数据通信

Device Identification Mode包括3个阶段Idle State、Ready State、Identification State。

Idle State下,eMMC Device会进行内部初始化,Host需要持续发送CMD1命令,查询eMMC Device是否已经完成初始化,同时进行工作电压和寻址模式协商:eMMC Device 在接收到这些信息后,会将OCR的内容(MMC出厂就烧录在里面的卡的操作电压值)通过 Response 返回给 Host,其中包含了 eMMC Device 是否完成初始化的标志位、设备工作电压范围 Voltage Range 和存储访问模式 Memory Access Mode 信息。

如果 eMMC Devcie 和 Host 所支持的工作电压和寻址模式不匹配,那么 eMMC Device 会进入Inactive State。

Ready State,MMC完成初始化后,就会进入该阶段。

在该 State 下,Host 会发送 CMD2命令,获取eMMC Device 的CID。

CID,即 Device identification number,用于标识一个 eMMC Device。它包含了 eMMC Device 的制造商、OEM、设备名称、设备序列号、生产年份等信息,每一个 eMMC Device 的 CID 都是唯一的,不会与其他的 eMMC Device 完全相同。

eMMC Device 接收到CMD2后,会将 127 Bits 的CID的内容通过 Response返回给 Host。

Identification State,发送完 CID 后,eMMC Device就会进入该阶段。

Host 会发送参数包含 16 Bits RCA 的CMD3命令,为eMMC Device 分配 RCA。设定完 RCA 后,eMMC Devcie 就完成了 Devcie Identification,进入 Data Transfer Mode。

注:emmc初始化和数据通信的过程,有点类似USB协议,USB控制器去发送请求给USB设备,以IN包和OUT包的形式去建立与USB设备之间的通信,默认状态下,USB设备也是0地址的,与控制器分配设备地址。(感兴趣的可以看一下USB2.0的协议,主要是第8和9章内容)

三、eMMC工作电压和上电过程

根据工作电压的不同,MMC卡可以分为两类:

High Voltage MultiMediaCard,工作电压为3.3V左右。

Dual Voltage MultiMediaCard,工作电压有两种,1.70V~1.95V和2.7V~3.6V,CPU可以根据需要切换

我所使用的eMMC实测工作电压VCC为2.80V~2.96V,VCCQ为1.70V~1.82V。

其中VCC为MMC Controller/Flash Controller的供电电压,VCCQ为Memory和Controller之间I/O的供电。

上电初始化阶段MMC时钟频率为400KHz,需要等电压调整到它要求的VCC时(host去获取OCR中记录的电压值,上面有说),MMC时钟才会调整到更高的正常工作频率。

相关问答

苹果刷机出现正在 等待NAND 是什么意思?

出现nand的意思是刷机时造成了参数错误。解决办法如下:1.电脑端下载最新版本的itunes;2.将iphone手机连接itunes,将iphone手机关机,同时按住home键和关机...

苹果刷机出现正在 等待NAND 是什么意思?

出现nand的意思是刷机时造成了参数错误。解决办法如下:1.电脑端下载最新版本的itunes;2.将iphone手机连接itunes,将iphone手机关机,同时按住home键和关机...

苹果4s刷机卡在正在 nand 分区了,怎么办?

苹果4s刷机卡在正在nand分区,其原因是在刷机过程中造成了参数错误。1、首先将iPhone手机关机。2、同时按住HOME键和关机键。3、持续上一步骤10秒钟左右...

路由器 nand 刷坏了怎么恢复?

如果路由器的NAND被刷坏了,可以尝试通过以下步骤来恢复:准备一个与路由器兼容的USB烧录器和一根USB数据线。将路由器的NAND芯片从主板上拆焊下来,并将其插...

消费级PCIe 4.0 SSD何时上市发售?

群联E16主控可以使用东芝NAND闪存、美光(Micron)NAND闪存或者SK海力士(SKHynix)NAND闪存。在Computex2019大会上展示的厂商主要使用前两家NAND,目前没....

安装了SSD,需要再安装傲腾内存吗?

欢迎在点击右上角关注:「太平洋电脑网」,更多有趣资讯等着您哦。没啥必要了。我们做过一个测试,结果是还是120G的SSD好一点。来看看实验过程:测试平台...通过...

为什么三星的旗舰机上市,从来不用抢购,一直都是现货?

三星屏幕内存等手机关键部件都能自给自足,不会被别人卡脖子。而且也不会玩饥饿营销,国产的都被带坏了,我买note7就是因为有现货,后来召回买的华为美腿九。抢...

ssd 测验, 为什么写入这么慢?-ZOL问答

ASSSD写入的是不可压缩数据,179的速度是NAND的真实写入速度。正常使用的话速...让游戏不再等待西部数据WD_BLACK亮相核聚变游戏嘉年华广州站评论19也许...

机顶盒刷机烧录失败-ZOL问答

且在刷机时会格式化内置SD卡(系统中叫NANDFLASH),所以一定要做好备份。2...等待电脑中提示发现新硬件后放手。6、手动指定驱动位置到你解压的升级包中的...

USB3.0读出速度比写入慢,而且不稳定,为何??-ZOL问答

达到6.8M/S,证明用的是NAND闪存阵列,是真货。假货一般用NOR闪存阵列,写入速度...让游戏不再等待西部数据WD_BLACK亮相核聚变游戏嘉年华广州站评论19如何在...

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

QQ

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

热线

188-0000-0000
专属服务热线

微信

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