资讯
HOME
资讯
正文内容
nand指令作用 CS创世SD NAND的存储芯片应用方案
发布时间 : 2024-10-09
作者 : 小编
访问数量 : 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,作者:孙启尧】

串行NAND在汽车电子领域的应用

NOR Flash多年来一直作为汽车的一种可靠技术,如今已应用于各种汽车系统,包括仪表集群、信息娱乐和远程信息系统。

在这些应用程序中,这种非易失性内存为应用程序代码提供了存储容量,提供了可靠的操作和足够快的读取速度来支持实时执行(Execute-in-Place, XiP),即主机处理器直接从Flash运行代码,绕过外部DRAM。

NOR Flash在ADAS概念的新兴实现中也扮演着重要角色,ADAS概念在现有的汽车中已经实现了半自治的高速公路驾驶功能,如自适应巡航控制和车道保持。自动驾驶技术的发展速度非常快,因此在未来几年里,越来越多的汽车程序将由包含Flash的电子系统控制。

在ADAS,以及仪表集群和其他地方,Flash是安全关键系统中的一个组件:这样一个系统的任何不受控制的故障都有可能使车辆变得不安全或无法控制。为管理及减低系统未能按指定操作的风险,汽车业界已实施ISO26262功能安全标准,其中包括:

在设计阶段强制要求对系统设计功能失效的方式进行严格分析

为整个系统指定非常低的最大故障率

要求系统可靠、快速地检测功能故障

要求系统采用可靠的方法安全生存,并从任何可预见的功能故障中恢复

因此,汽车系统原始设备制造商开始要求开发一种新的Flash集成电路,这种电路能够比前几代设备更好地支持系统级的功能安全设计要求。本文研究了传统的Flash集成电路的工作模式,并说明了新汽车串行Flash产品如果要完全支持系统设计者遵守ISO26262标准的努力,将需要提供的特征。

这些功能性的安全特性很可能在串行或闪存(目前在嵌入式系统中用于引导代码存储的闪存类型)和单级Cell (SLC) NAND闪存中都可以看到。实际上,对于不需要很高的程序/擦除周期,也不需要实现XiP的应用程序中的代码存储,串行NAND是NOR Flash的有效替代方案。华邦电子(华邦电子)的SLC NAND技术采用46nm工艺制造,该工艺已被证明是高质量,在功能性安全应用方面优于采用新的、更小的几何形状制造的系列NAND产品。它还提供的数据保留期可与55-65nm或闪存相媲美。

串行NAND的优势在于其固有的低成本——一个NAND闪存单元比NOR闪存单元小四倍。与NOR Flash相比,NAND Flash的写入时间要短得多,因此在执行无线(OTA)软件更新的系统中,它是一项有价值的技术。由华邦电子提供的车载纠错码(ECC)引擎和支持跨页面和块边界的高速连续/顺序读取能力,串行NAND现在正被汽车功能安全应用程序的设计者纳入考虑范围。

诊断数据的重要性

需要说明的是,NOR闪存技术非常可靠,而且设备的运行寿命是可预测的。而Flash集成电路没有在该领域证明自己的品质,汽车原始设备制造商对这项技术的偏爱是基于其在当今道路上数百万辆汽车上的使用经验。ISO 26262标准规定了四个“ASIL”等级(汽车安全完整性等级)的可靠性和其他参数。最严格的等级ASIL-D适用于最安全关键的系统,如转向系统或刹车系统,它将系统级的最大故障率设置为<10 FIT(在时间上的故障),即每十亿个设备小时的故障率。

单点和潜在故障的最低检出率,以及ISO 26262标准规定的最大故障率

尽管如此,汽车制造商为遵循ISO 26262的合规性,要求找到一种方法来识别NOR闪存IC理论上仍然可能发生的任何故障。在传统设备中,用户无法获得维持数据完整性和数据保留的功能。这种封闭操作与功能安全原则相冲突,功能安全原则要求主机系统监视部件的故障,或监视表明可能发生故障的不正常行为,并执行旨在保持正常功能的应对措施。

这意味着NOR Flash IC在ISO 26262兼容系统中使用时,必须向主机控制器提供诊断数据,并提供主机修改IC操作的方法,以应对数据显示的更高的故障风险。

NOR Flash IC的两个主要特性提供了这些数据:

ECC引擎,它通过检测和纠正读操作中的位错误来维护数据的完整性

允许对ECC引擎的运行进行定期测试的用户模式

ECC数据如何支持功能性安全操作

在传统的NOR Flash IC中,ECC引擎在后台运行,以多字节粒度检测和纠正位错误,不通知主机控制器。然而,事实上,这些ECC[1]数据可以以各种方式促进功能性安全合规。ECC引擎能够纠正单位错误(当主数据位和奇偶校验位之间只有单位差异时);检测(但不纠正)双位错误。

通过向主机控制器提供状态寄存器,NOR闪存设备可以指示最近的读操作是否有三种可能的结果之一:

1.良好的数据,不需要纠错

2.修正错误后的良好数据

3.无法纠正的错误数据

这些“事后”信息可用于帮助维护长期的数据完整性。但ISO 26262要求汽车系统在出现故障时进行检测,并立即采取相应措施。来自华邦电子的新型自动NOR Flash IC,可通过专用错误引脚提供实时错误信息。此引脚可以被断言,以指示无法纠正的数据的确切位置。用户还可以选择错误pin是表示纠正的单比特错误,还是表示检测到的不可纠正的双比特错误。

然后,主机可以使用来自状态寄存器、错误pin或两者的信息来构建错误寄存器——实际上是NOR Flash阵列的“映射”,记录位错误的位置。然后,主机可以设置一个阈值,以便当某个位置(例如某个特定块)发生的错误数量超过这个阈值时,该位置就从内存中“退休”了。

识别潜在故障的方法

到目前为止,上述所描述的措施是关于单点故障处理,ISO 26262标准为每个ASIL等级指定了最低检出率。但该标准还要求汽车系统检测“潜在故障”。潜在故障本身并没有违反功能安全要求,但是它可以与第二个故障一起违反这些要求。

在NOR Flash IC中,存在潜在的潜在故障- ECC引擎故障就是一个例子。正常运行时,NOR Flash技术可靠性高,很少需要纠错。因此,只要ECC引擎故障不会导致它错误地纠正好位,故障通常不会引起注意。但是,当由于ECC引擎故障(一个潜在的故障)导致单个坏位未得到纠正时,这两个故障的组合将对功能安全构成风险。

为了检测潜在的ECC引擎故障,华邦电子的automotive NOR Flash IC提供了特殊用户模式和ECC编码器读取命令:这使用户能够将主数据模式注入到内存中,并从ECC引擎中读取主数据和它生成的奇偶校验数据。如果奇偶校验数据不正确,可以将ECC引擎标记为错误。

同样,用户模式可用于检查ECC解码操作:在用户模式下,用户将主数据和奇偶校验数据加载到ECC引擎中,并使用特殊的ECC解码器Read命令将主数据读回。在主数据和奇偶校验数据中可能会引入单位和双位错误,检查ECC引擎是否正确执行单位错误校正和双位错误检测。华邦电子的建议是,每次系统启动时都应该执行ECC引擎检查。

新的安全功能可用于生产部件

为了满足ADAS产品和其他汽车系统制造商的需求,华邦电子现在正在将上述功能安全特性集成到一个新汽车NOR Flash系列产品中。Quad 3V系列具有最大80MB/s的数据传输速率,可用于256mbit和512mbit密度的采样。1Gbit 3V部件(两个堆叠的512Mbit模具)将在2020年下半年面世。

华邦电子还将在2020年提供高密度(512Mbit和1Gbit) 1.8V的NOR闪存设备,部分设备将有四进制或八进制接口。

串行NAND具有快速的OTA更新写入时间

华邦电子还提供了一系列具有功能性安全特性的NAND产品:3V和1.8V产品均可用于512Mbits和1Gbit采样密度,以及由两个堆叠的1Gbit模具组成的2Gbit部件。华邦电子的第一代串行NAND系列提供的最大吞吐率为40MB/s(在1.8V部件中),在3V部件中为52MB/s。第二代NAND系列产品W25N01JW/W25N02JW产品在1.8V部分提供了更高的80MB/s吞吐量。这是在Quad DTR(数据传输速率)模式下实现的,并且是连续的数据输出,在页面和块边界上没有间隙。华邦电子最近还推出了W35N01JW,这是一款1Gbit的1.8V八进制NAND闪存设备,读取速度为240MB/s,比W25N01JW快三倍。

华邦电子系列NAND产品,如1Gbit 3V W25N01GV,通过向状态寄存器提供信息来支持功能性安全合规性,该状态寄存器显示在有无ECC的情况下读出的数据是否正确或者是否不可纠正。串行NAND页面大小为2kbytes,在扇区级别提供1-bit嵌入式ECC(512字节)。这意味着在2kbyte页面上最多可以执行4-bit的校正。华邦电子串行NAND还提供了在用户命令提示时读取失败页面位置的功能。

通过为功能性安全应用程序提供SPI NOR和串行NAND解决方案,华邦电子为用户提供了根据其设计要求选择适当的闪存类型的自由。

[1] ECC是“Error Correcting Code”的简写,ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,可提高计算机运行的稳定性和增加可靠性。

相关问答

酷比魔方I player什么芯片?

经过联系厂家,我们得知该芯片具有一下主要特点。ARM922TDMI微处理器内核(8KB数据缓存,8KB指令缓存);多种引导模式:NAND-Flash,UART及片外存储器CS0...AR....

NorFlash和NandFlash有哪些相同和不同?

NorFlash和NandFlash的相同点在于它们都是一种存储芯片,可以用于储存各种数据,如程序、图片、音乐等。不同点在于它们的结构不同,数据传输方式也不同。NorFlas...

闪存都有那些种类?定义是什么?又是怎样分别的?

[回答]U盘``sd卡!闪存(FlashMemory)是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器,数据删除不是以单个的字节为单位而是以固...

存储芯片和存储控制芯片哪个更强势?

器芯片虽然销售额和行业影响力巨大,但是在产业应用中必须是和存储控制器芯片配合才能够组成为最终的产品(如附图一示意),即存储控制器芯片是属于必不可少...手机...

s3c2410是单片机吗?

S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用FBGA封装,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Ca...

利润大跌78%,美光还会好吗?

如何弄死美光?1明年国内长江存储的NANDFLASH,合肥长鑫DRAM,量产。2.中国法院判美光侵犯晋华知识产权,实施禁售,3.中国开始清算中兴,华为事件的支持者,将...

flash电路原理?

FLASH为非易失性存储器,可进行擦写和再编程。分为NORFLASH和NANDFLASH。当手机开机时,CPU便传出一个复位信号RESET经字库使系统复位。等到CPU把字库的...

半岛平台下载(官方)APP下载安装/网站网页通用版入口

英特尔520系列120GB固态硬盘特尔固态硬盘520可提供高达80,000次的4K随机写入IOPS(每秒输入输出操作)性能以及高达50,000次的4K随机读取IOPS性能,...

SSD固态硬盘需要进行碎片整理吗?为什么?

可能很多人已经遗忘了windows自带的磁盘碎片管理程序。这个程序已经在windows中存在了很多年,笔者刚开始接触电脑时用的win98上就自带这个工具。那时玩电脑还是...

各位大神.因特尔S3500怎么样?

IOP成本。IT预算的缩减会给企业在构建IT设施的时候带来压力。通过采用最新的20nmMLCNANA主控闪存技术,DCS3500系列可提供优化的性能和能耗比,降低功耗,提...

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

QQ

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

热线

188-0000-0000
专属服务热线

微信

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