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,作者:孙启尧】
大神是怎样炼成的之详解各种iPhone报错—报错4005
大家都知道现在用iTunes刷机报错的种类越来越多,在这里小编有必要为大家科普一下!避免大家经受不良商家的…(这里请大家自动填词),我们手机功能出现故障后,经常会遇到刷机报,有4005、40、16、等。但是大家都知道这些报错代表的是什么含义么?也许没有人认真钻研过这些报错,但其实一部分是可以自己就解决的,不过也只是一部分!因为每一个iTunes的报错都隐藏着此iPhone不同的故障点。
比如很常见的报错29,自己会刷机或者帮助小伙伴们更新系统的发烧友就知道这个报错会时常出现,现在小编告诉你,报错29百分之80都是电池损坏,拆友们只需要自己在网上购买电池更换再继续刷机便可正常通过,嘿嘿, 没想到吧,这是小编多年的前线实战经验所得,不服你就试试看,不行你来找小编!
接下来小编为大家详细解释我们经常遇到的报错4005
这个报错,要追溯到3GS出来的时候,当时报错4005显示为1601,嘿嘿,好熟悉的赶脚啊!1601可是当年称霸威锋的报错大王了吧 !想想也是醉了。不知当时遇到报错1601的小伙伴可了解这是什么怎么回事呢?
据小编回忆,打从iPhone5上市之后,这个报错的数量就在不断的增加,乃至家喻户晓!不知是苹果的做工工序问题还是具体别的原因小编这里暂且先不去讨论了。
实际情况就是刷机过程中,iTunes首先会启动手机的中央处理器 Ax(通常所说的手机的CPU),让iPhone能够实现将PC端iTunes处理后,传输过来的信息通过CPU由RAM(俗称:暂存)处理写入手机的NAND存储器(俗称:硬盘)中。 这就是系统升级(俗称:刷机)的一个信息传输过程,也是刷机原理。
而报错4005出现的原因是:CPU、RAM、硬盘其中的某一个出现问题。报错出现时进度条的位置在电脑识别到iPhone的第二个驱动(现在大家用的都是win7、win8或者其它高端系统,PC端也不会像XP那般弹出驱动名称,小编就不在这里做详细解释了),同时最新版iTunes提示第二个“正在等待iPhone”的时候,进度条会定住不动,在大概8分钟左右的时候,iTunes会提示报错4005。
此时,最经典的报错4005就呈现在了大家的眼前。造成CPU RAM 硬盘损坏的常见原因如下。
一、代工厂生产工艺问题
iPhone5刚上市的时候,大部分网友认为这是工厂制作工艺导致的问题。很多机器(小编见过最多的是美版)都是正常使用过程中黑屏不开机,连接电脑无限DFU,刷机iTunes报错4005。
二、人为造成故障
1、不慎跌落摔坏,也许当时摔完没有出现任何问题,而且还能正常使用,可是使用一段时间之后,突然不开机,有的直接黑屏,还有的恢复模式,连接iTunes刷机报错4005。没错,CPU出问题了。这小编只说一句:采取更换CPU的方案来维修,处理时间短、维修费用合理。
2、进水的引起的报错。iPhone采取内置电池,当手机进水后,电源不能及时切断,水附着在主板上在通电情况下发生电化学腐蚀,直接导致主板元器件损坏,引起各种功能故障。比如:闪光灯常亮、持续振动、黑屏、发烫等等。因为iPhone电源IC的主要供电是电池的正极(物理学的好的同学不难理解呀),所以在进水之后就算你不按开机键,电池的正极是直接连接电源IC给其持续供电的呀,其中的电压转换小编不去啰嗦了(听着容易睡着→_→),直接告诉你结果吧——CPU烧坏了。
以上两个大原因就是破坏刷机的主要因素。为了自己的爱机,请善待它,这样它才能长久陪伴在您的身边。
GeekBar倡导Apple终端用户自助式维修
微信公众号关注:GeekBar-China
微博关注@GeekBar
GeekBar出品,转载注明出处
相关问答
NAND 与ROM有什么不同-ZOL问答我的PPC有8G的NAND但是ROM只有128MB,我想问在WM系统中NADN和ROM的使用功能一样吗,或者说NADN能够当作是ROM使用吗?在待机状态系系统会像SDMMC那样切断储存器电...
gw怎么做虚拟系统?1.sd卡放上最新2.3b的launcher.dat,在根目录2.系统设置→その他设定→ユーザー情报,最后按住L键点击DSソフト用设定3.进去后先选择backupnand,然后等待,不要...
SD卡里有1000多首歌曲,被加密了,打开SD卡 看不见里面的内容。...0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的...字样-等待完成。注意:取消设备加密时手机需要连接充电器。注明:如果找不到可...
国产芯片有望新突破,预计9月份量产!哪些上市公司直接受益?国产芯片如果能取得突破并量产,对我国的半导体元器件行业将是质的飞跃!但得承认,国内的芯片产业链落后太多,短期是难以赶超的,得一步一个脚印的研发和超越!...3...
u盘是怎么生产出来的?U盘的生产过程相当复杂且精细,下面我将尽量详细地描述它的主要步骤:设计与开发:这是生产U盘的第一步,设计师会创建U盘的外形和电路板,并确定存储容量、读写...
如何给YUZU模拟器下载游戏文件?首先,需要在YUZU模拟器中启用“Installfile”选项。然后,找到要下载的NSP或XCI游戏文件,并将其放在一个安全的文件夹中。在模拟器界面上选择“File->Inst...
Iphone12什么时候出?谢邀!文|明美无限现在到处都是安卓旗舰新机发布的档口,但是广大的果粉们可别忘了苹果公司今年发布的旗舰新机新iPhone会有大动作。相信有持续关注明美无限至...
小米14用长江存储吗?小米14不使用长江存储。小米14采用的是UFS3.0高速闪存技术,而不是长江存储。UFS(UniversalFlashStorage)是一种高速、低功耗的闪存存储技术,具有更快的读...
iphone手机所说的机身内存和可用空间有什么区别? - 186****52...打个比方iphone3GS就好比电脑配了256M内存+8G的硬盘iphone4就直接集成了16G的话机空间一、主体不同1、机都是在内存中进用空间:用来安装应用程序或...
永远用日文怎么读[回答]ここにいるよBabyboy私(わたし)はここにいるよどこも行(い)かずに待(ま)ってるよ哇他喜哇阔阔你一路哟躲阔莫一卡素你嘛-忒路哟YouknowdatIl...