您好,请登录 免费注册
手机立创
  • 微信小程序

    找料更方便

  • 立创APP

    体验更友好

  • 立创公众号

    售前咨询,优惠活动

消息(0)
我的订单 购物车(0)
联系客服
  • 4000800709

    点击QQ咨询

  • 0755-83865666

    0755-83865666

    拨打电话咨询

帮助中心
供应商合作

温馨提示

您上传的BOM清单格式不准确,当前支持上传xls、xlsx、csv、JPG、PNG、JPEG格式,请检查后重新上传

BOM正在分析中...
首页 > 新品推荐 >CS创世SD NAND的存储应用方案
  • CS创世SD NAND的存储应用方案

  • 2024-12-18 17:30:24 阅读量:59

本文来自一位博主,对产品的使用过程以及部分设计分享。

 

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

 

点击购买【32Gb SD NAND 二代】

 

SD NAND 

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

产品 

 (上图为测试板焊接图)

 

 测试

 

博主日前在设计基于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参考例程和原厂技术支持,这对于刚上手的小白而言,十分友好。

 

点击选购【4Gb SD NAND 二代 】商品

 

设计理念

使用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;

}

 

 点击购买【32Gb SD NAND 二代】 

您的浏览器版本过低(IE8及IE8以下的浏览器或者其他浏览器的兼容模式),存在严重安全漏洞,请切换浏览器为极速模式或者将IE浏览器升级到更高版本。【查看详情】
推荐您下载并使用 立创商城APP 或者最新版 谷歌浏览器火狐浏览器360浏览器搜狗浏览器QQ浏览器 的极(高)速模式进行访问。
© 深圳市立创电子商务有限公司 版权所有

提示

您确定要删除此收货地址的吗?

请填写订单取消原因

提示

您确定删除此收货地址吗?

成功提示

content

失败提示

content

微信咨询

关注公众号咨询客服

咨询客服
  • 在线客服热线

    0755-83865666

  • 服务时间

    工作日  8:30~20:30

    节假日  8:30~18:00

  • 服务投诉

QQ咨询
投诉意见

紧急问题投诉电话:

18826549599

更快的受理通道

对常规通道处理结果不满意

请在此扫码

此意见箱直通立创管理层

优惠券 建议反馈
填问卷 立创用户体验问卷调查 立即参与
活动规则
活动规则
展开客服