0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32采用CS創(chuàng)世 SD NAND(貼片SD卡)完成FATFS文件系統(tǒng)移植與測試

深圳市雷龍發(fā)展有限公司 ? 2023-02-17 16:33 ? 次閱讀

一、前言
STM32項目開發(fā)中,經(jīng)常會用到存儲芯片存儲數(shù)據(jù)。 比如:關(guān)機時保存機器運行過程中的狀態(tài)數(shù)據(jù),上電再從存儲芯片里讀取數(shù)據(jù)恢復(fù);在存儲芯片里也會存放很多資源文件。比如,開機音樂,界面上的菜單圖標,字庫文件,方便設(shè)備開機加載。
為了讓單片機更加方便的讀寫這些資源文件,通常都會加文件系統(tǒng),如果沒有文件系統(tǒng),直接讀取寫扇區(qū)的方式,對數(shù)據(jù)不好管理。 這篇文章就手把手教大家,在STM32上完成FATFS文件系統(tǒng)的移植;主控芯片采用STM32F103ZET6, 存儲芯片我這里采用(雷龍) CS創(chuàng)世 SD NAND 。 SD NAND 簡單來說就是貼片式SD卡,使用起來與普通的SD卡一樣,簡單的區(qū)別就是:比TF卡穩(wěn)定,比eMMC便宜。 下面章節(jié)里會詳細介紹下 CS創(chuàng)世 SD NAND。
下面是CS創(chuàng)世 SD NAND 與STM32開發(fā)的板的接線實物圖:
這是讀寫扇區(qū)測試的結(jié)果:
二、SD NAND 介紹
我當(dāng)前使用的SD NAND型號是,CSNP32GCR01-AOW,容量是4GB。
下面是通過編寫STM32代碼讀取的存儲信息
芯片的詳細參數(shù)如下:
【1】不用寫驅(qū)動程序自帶壞塊管理
【2】尺寸小巧,簡單易用,兼容性強,穩(wěn)定可靠,固件可定制,LGA-8封裝
【3】標準SDIO接口,兼容SPI,兼容拔插式TF卡/SD卡,可替代普通TF卡/SD卡
【4】尺寸6.2x8mm,直接貼片,不占空間
【5】內(nèi)置平均讀寫算法,通過1萬次隨機掉電測試
【6】耐高低溫,機貼手貼都非常方便
【7】速度級別Class10(讀取速度23.5MB/S寫入速度12.3MB/S)
【8】支持標準的SD 2.0協(xié)議,用戶可以直接移植標準驅(qū)動代碼,省去了驅(qū)動代碼編程環(huán)節(jié)。支持TF卡啟動的SOC都可以用SD NAND
【9】比TF卡穩(wěn)定,比eMMC便宜
這是官網(wǎng)申請的樣品,焊接了轉(zhuǎn)接板,可以直接插在SD卡卡槽上測試。 最終選型之后,設(shè)計PCB板時,設(shè)計接口,直接貼片上去使用,非常穩(wěn)定,抖動也不會導(dǎo)致,外置卡TF卡這種容易松動的問題。
三、編寫SD NAND驅(qū)動代碼
SD NAND 的驅(qū)動代碼與正常的SD卡協(xié)議是一樣的,支持標準的SD 2.0協(xié)議,下面我就直接貼出寫好的驅(qū)動代碼。
包括了模擬SPI,硬件SPI,SDIO等3種方式,完成對SD NAND 的讀寫。我當(dāng)前使用的主控板子是STM32F103ZET6,如果你使用的板子不是這一款,可能還是其他的CPU也沒關(guān)系;我這里直接貼出了SPI模擬時序的驅(qū)動代碼,可以直接移植到任何單片機上使用,代碼拷貝過去也只需要修改GPIO口即可,非常方便。
3.1 SPI模擬時序驅(qū)動方式
(1)整體工程代碼
這是當(dāng)前工程的截圖: 代碼采用寄存器風(fēng)格編寫,非常簡潔。
當(dāng)前工程完成SD NAND卡初始化,扇區(qū)的讀寫,測試芯片基本的使用情況。
(2) sd.c
#include "sdcard.h"
static u8 SD_Type=0; //存放SD卡的類型
/*
函數(shù)功能:SD卡底層接口,通過SPI時序向SD卡讀寫一個字節(jié)
函數(shù)參數(shù):data是要寫入的數(shù)據(jù)
返 回 值:讀到的數(shù)據(jù)
*/
u8 SDCardReadWriteOneByte(u8 DataTx)
{
u8 i;
u8 data=0;
for(i=0;i<8;i++)
{
SDCARD_SCK=0;
if(DataTx&0x80)SDCARD_MOSI=1;
else SDCARD_MOSI=0;
SDCARD_SCK=1;
DataTx<<=1;
data<<=1;
if(SDCARD_MISO)data|=0x01;
}
return data;
}
//4種: 邊沿兩種、電平是兩種
/*
函數(shù)功能:底層SD卡接口初始化
本程序SPI接口如下:
PC11 片選 SDCardCS
PC12 時鐘 SDCardSCLK
PD2 輸出 SPI_MOSI--主機輸出從機輸入
PC8 輸入 SPI_MISO--主機輸入從機輸出
*/
void SDCardSpiInit(void)
{
/*1. 開啟時鐘*/
RCC->APB2ENR|=1<<5; ? ? //使能PORTD時鐘
RCC->APB2ENR|=1<<4; ? ? //使能PORTC時鐘
/*2. 配置GPIO口模式*/
GPIOC->CRH&=0xFFF00FF0;
GPIOC->CRH|=0x00033008;
GPIOD->CRL&=0xFFFFF0FF;
GPIOD->CRL|=0x00000300;
/*3. 上拉*/
GPIOC->ODR|=1<<8;
GPIOC->ODR|=1<<11;
GPIOC->ODR|=1<<12;
GPIOD->ODR|=1<<2;
}
/*
函數(shù)功能:取消選擇,釋放SPI總線
*/
void SDCardCancelCS(void)
{
SDCARD_CS=1;
SDCardReadWriteOneByte(0xff);//提供額外的8個時鐘
}
/*
函數(shù) 功 能:選擇sd卡,并且等待卡準備OK
函數(shù)返回值:0,成功;1,失敗;
*/
void SDCardSelectCS(void)
{
SDCARD_CS=0;
SDCardWaitBusy();//等待成功
}
/*
函數(shù) 功 能:等待卡準備好
函數(shù)返回值:0,準備好了;其他,錯誤代碼
*/
void SDCardWaitBusy(void)
{
while(SDCardReadWriteOneByte(0XFF)!=0XFF){}
}
/*
函數(shù)功能:等待SD卡回應(yīng)
函數(shù)參數(shù):
Response:要得到的回應(yīng)值
返 回 值:
0,成功得到了該回應(yīng)值
其他,得到回應(yīng)值失敗
*/
u8 SDCardGetAck(u8 Response)
{
u16 Count=0xFFFF;//等待次數(shù)
while((SDCardReadWriteOneByte(0XFF)!=Response)&&Count)Count--;//等待得到準確的回應(yīng)
if(Count==0)return SDCard_RESPONSE_FAILURE;//得到回應(yīng)失敗
else return SDCard_RESPONSE_NO_ERROR;//正確回應(yīng)
}
/*
函數(shù)功能:從sd卡讀取一個數(shù)據(jù)包的內(nèi)容
函數(shù)參數(shù):
buf:數(shù)據(jù)緩存區(qū)
len:要讀取的數(shù)據(jù)長度.
返回值:
0,成功;其他,失敗;
*/
u8 SDCardRecvData(u8*buf,u16 len)
{
if(SDCardGetAck(0xFE))return 1;//等待SD卡發(fā)回數(shù)據(jù)起始令牌0xFE
while(len--)//開始接收數(shù)據(jù)
{
*buf=SDCardReadWriteOneByte(0xFF);
buf++;
}
//下面是2個偽CRC(dummy CRC)
SDCardReadWriteOneByte(0xFF);
SDCardReadWriteOneByte(0xFF);
return 0;//讀取成功
}
/*
函數(shù)功能:向sd卡寫入一個數(shù)據(jù)包的內(nèi)容 512字節(jié)
函數(shù)參數(shù):
buf 數(shù)據(jù)緩存區(qū)
cmd 指令
返 回 值:0表示成功;其他值表示失敗;
*/
u8 SDCardSendData(u8*buf,u8 cmd)
{
u16 t;
SDCardWaitBusy(); //等待忙狀態(tài)
SDCardReadWriteOneByte(cmd);
if(cmd!=0XFD)//不是結(jié)束指令
{
for(t=0;t<512;t++)SDCardReadWriteOneByte(buf[t]);//提高速度,減少函數(shù)傳參時間
SDCardReadWriteOneByte(0xFF); //忽略crc
SDCardReadWriteOneByte(0xFF);
t=SDCardReadWriteOneByte(0xFF); //接收響應(yīng)
if((t&0x1F)!=0x05)return 2; //響應(yīng)錯誤
}
return 0;//寫入成功
}
/*
函數(shù)功能:向SD卡發(fā)送一個命令
函數(shù)參數(shù):
u8 cmd 命令
u32 arg 命令參數(shù)
u8 crc crc校驗值
返回值:SD卡返回的響應(yīng)
*/
u8 SendSDCardCmd(u8 cmd, u32 arg, u8 crc)
{
u8 r1;
SDCardCancelCS(); //取消上次片選
SDCardSelectCS(); //選中SD卡
//發(fā)送數(shù)據(jù)
SDCardReadWriteOneByte(cmd | 0x40);//分別寫入命令
SDCardReadWriteOneByte(arg >> 24);
SDCardReadWriteOneByte(arg >> 16);
SDCardReadWriteOneByte(arg >> 8);
SDCardReadWriteOneByte(arg);
SDCardReadWriteOneByte(crc);
if(cmd==SDCard_CMD12)SDCardReadWriteOneByte(0xff);//Skip a stuff byte when stop reading
do
{
r1=SDCardReadWriteOneByte(0xFF);
}while(r1&0x80); //等待響應(yīng),或超時退出
return r1; //返回狀態(tài)值
}
/*
函數(shù)功能:獲取SD卡的CID信息,包括制造商信息
函數(shù)參數(shù):u8 *cid_data(存放CID的內(nèi)存,至少16Byte)
返 回 值:
0:成功,1:錯誤
*/
u8 GetSDCardCISDCardOutnfo(u8 *cid_data)
{
u8 r1;
//發(fā)SDCard_CMD10命令,讀CID
r1=SendSDCardCmd(SDCard_CMD10,0,0x01);
if(r1==0x00)
{
r1=SDCardRecvData(cid_data,16);//接收16個字節(jié)的數(shù)據(jù)
}
SDCardCancelCS();//取消片選
if(r1)return 1;
else return 0;
}
/*
函數(shù)說明:
獲取SD卡的CSD信息,包括容量和速度信息
函數(shù)參數(shù):
u8 *cid_data(存放CID的內(nèi)存,至少16Byte)
返 回 值:
0:成功,1:錯誤
*/
u8 GetSDCardCSSDCardOutnfo(u8 *csd_data)
{
u8 r1;
r1=SendSDCardCmd(SDCard_CMD9,0,0x01); //發(fā)SDCard_CMD9命令,讀CSD
if(r1==0)
{
r1=SDCardRecvData(csd_data, 16);//接收16個字節(jié)的數(shù)據(jù)
}
SDCardCancelCS();//取消片選
if(r1)return 1;
else return 0;
}
/*
函數(shù)功能:獲取SD卡的總扇區(qū)數(shù)(扇區(qū)數(shù))
返 回 值:
0表示容量檢測出錯,其他值表示SD卡的容量(扇區(qū)數(shù)/512字節(jié))
說 明:
每扇區(qū)的字節(jié)數(shù)必為512字節(jié),如果不是512字節(jié),則初始化不能通過.
*/
u32 GetSDCardSectorCount(void)
{
u8 csd[16];
u32 Capacity;
u16 csize;
if(GetSDCardCSSDCardOutnfo(csd)!=0) return 0; //取CSD信息,如果期間出錯,返回0
if((csd[0]&0xC0)==0x40) //SDHC卡,按照下面方式計算
{
csize = csd[9] + ((u16)csd[8] << 8) + 1;
Capacity = (u32)csize << 10;//得到扇區(qū)數(shù) ? ? ?
}
return Capacity;
}
/*
函數(shù)功能: 初始化SD卡
返 回 值: 非0表示初始化失敗!
*/
u8 SDCardDeviceInit(void)
{
u8 r1; // 存放SD卡的返回值
u8 buf[4];
u16 i;
SDCardSpiInit();//初始化底層IO口
for(i=0;i<10;i++)SDCardReadWriteOneByte(0xFF); //發(fā)送最少74個脈沖
do
{
r1=SendSDCardCmd(SDCard_CMD0,0,0x95);//進入IDLE狀態(tài) 閑置
}while(r1!=0X01);
SD_Type=0; //默認無卡
if(r1==0X01)
{
if(SendSDCardCmd(SDCard_CMD8,0x1AA,0x87)==1) //SD V2.0
{
for(i=0;i<4;i++)buf[i]=SDCardReadWriteOneByte(0XFF);
if(buf[2]==0X01&&buf[3]==0XAA) //卡是否支持2.7~3.6V
{
do
{
SendSDCardCmd(SDCard_CMD55,0,0X01); //發(fā)送SDCard_CMD55
r1=SendSDCardCmd(SDCard_CMD41,0x40000000,0X01);//發(fā)送SDCard_CMD41
}while(r1);
if(SendSDCardCmd(SDCard_CMD58,0,0X01)==0)//鑒別SD2.0卡版本開始
{
for(i=0;i<4;i++)buf[i]=SDCardReadWriteOneByte(0XFF);//得到OCR值
if(buf[0]&0x40)SD_Type=SDCard_TYPE_V2HC; //檢查CCS
else SD_Type=SDCard_TYPE_V2;
}
}
}
}
printf("SD_Type=0x%X\r\n",SD_Type);
SDCardCancelCS(); //取消片選
if(SD_Type)return 0; //初始化成功返回0
else if(r1)return r1; //返回值錯誤值
return 0xaa; //其他錯誤
}
/*
函數(shù)功能:讀SD卡
函數(shù)參數(shù):
buf:數(shù)據(jù)緩存區(qū)
sector:扇區(qū)
cnt:扇區(qū)數(shù)
返回值:
0,ok;其他,失敗.
說 明:
SD卡一個扇區(qū)大小512字節(jié)
*/
u8 SDCardReadData(u8*buf,u32 sector,u32 cnt)
{
u8 r1;
if(SD_Type!=SDCard_TYPE_V2HC)sector<<=9;//轉(zhuǎn)換為字節(jié)地址
if(cnt==1)
{
r1=SendSDCardCmd(SDCard_CMD17,sector,0X01);//讀命令
if(r1==0) //指令發(fā)送成功
{
r1=SDCardRecvData(buf,512); //接收512個字節(jié)
}
}else
{
r1=SendSDCardCmd(SDCard_CMD18,sector,0X01);//連續(xù)讀命令
do
{
r1=SDCardRecvData(buf,512);//接收512個字節(jié)
buf+=512;
}while(--cnt && r1==0);
SendSDCardCmd(SDCard_CMD12,0,0X01); //發(fā)送停止命令
}
SDCardCancelCS();//取消片選
return r1;//
}
/*
函數(shù)功能:向SD卡寫數(shù)據(jù)
函數(shù)參數(shù):
buf:數(shù)據(jù)緩存區(qū)
sector:起始扇區(qū)
cnt:扇區(qū)數(shù)
返回值:
0,ok;其他,失敗.
說 明:
SD卡一個扇區(qū)大小512字節(jié)
*/
u8 SDCardWriteData(u8*buf,u32 sector,u32 cnt)
{
u8 r1;
if(SD_Type!=SDCard_TYPE_V2HC)sector *= 512;//轉(zhuǎn)換為字節(jié)地址
if(cnt==1)
{
r1=SendSDCardCmd(SDCard_CMD24,sector,0X01);//讀命令
if(r1==0)//指令發(fā)送成功
{
r1=SDCardSendData(buf,0xFE);//寫512個字節(jié)
}
}
else
{
if(SD_Type!=SDCard_TYPE_MMC)
{
SendSDCardCmd(SDCard_CMD55,0,0X01);
SendSDCardCmd(SDCard_CMD23,cnt,0X01);//發(fā)送指令
}
r1=SendSDCardCmd(SDCard_CMD25,sector,0X01);//連續(xù)讀命令
if(r1==0)
{
do
{
r1=SDCardSendData(buf,0xFC);//接收512個字節(jié)
buf+=512;
}while(--cnt && r1==0);
r1=SDCardSendData(0,0xFD);//接收512個字節(jié)
}
}
SDCardCancelCS();//取消片選
return r1;//
}
(3) sd.h
#ifndef SD_H
#define SD_H_
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
/*----------------------------------------------
本程序SPI接口如下:
PC11 片選 SDCardCS
PC12 時鐘 SDCardSCLK
PD2 輸出 SPI_MOSI--主機輸出從機輸入
PC8 輸入 SPI_MISO--主機輸入從機輸出
------------------------------------------------*/
#define SDCARD_CS PCout(11)
#define SDCARD_SCK PCout(12)
#define SDCARD_MOSI PDout(2)
#define SDCARD_MISO PCin(8)
// SD卡類型定義
#define SDCard_TYPE_ERR 0X00 //卡類型錯誤
#define SDCard_TYPE_MMC 0X01 //MMC卡
#define SDCard_TYPE_V1 0X02
#define SDCard_TYPE_V2 0X04
#define SDCard_TYPE_V2HC 0X06
// SD卡指令表
#define SDCard_CMD0 0 //卡復(fù)位
#define SDCard_CMD1 1
#define SDCard_CMD8 8 //命令8 ,SEND_IF_COND
#define SDCard_CMD9 9 //命令9 ,讀CSD數(shù)據(jù)
#define SDCard_CMD10 10 //命令10,讀CID數(shù)據(jù)
#define SDCard_CMD12 12 //命令12,停止數(shù)據(jù)傳輸
#define SDCard_CMD13 16 //命令16,設(shè)置扇區(qū)大小 應(yīng)返回0x00
#define SDCard_CMD17 17 //命令17,讀扇區(qū)
#define SDCard_CMD18 18 //命令18,讀Multi 扇區(qū)
#define SDCard_CMD23 23 //命令23,設(shè)置多扇區(qū)寫入前預(yù)先擦除N個block
#define SDCard_CMD24 24 //命令24,寫扇區(qū)
#define SDCard_CMD25 25 //命令25,寫多個扇區(qū)
#define SDCard_CMD41 41 //命令41,應(yīng)返回0x00
#define SDCard_CMD55 55 //命令55,應(yīng)返回0x01
#define SDCard_CMD58 58 //命令58,讀OCR信息
#define SDCard_CMD59 59 //命令59,使能/禁止CRC,應(yīng)返回0x00、
/*SD卡回應(yīng)標記字*/
#define SDCard_RESPONSE_NO_ERROR 0x00 //正確回應(yīng)
#define SDCard_SD_IN_IDLE_STATE 0x01 //閑置狀態(tài)
#define SDCard_SD_ERASE_RESET 0x02 //擦除復(fù)位
#define SDCard_RESPONSE_FAILURE 0xFF //響應(yīng)失敗
//函數(shù)聲明
u8 SDCardReadWriteOneByte(u8 data); //底層接口,SPI讀寫字節(jié)函數(shù)
void SDCardWaitBusy(void); //等待SD卡準備
u8 SDCardGetAck(u8 Response); //獲得應(yīng)答
u8 SDCardDeviceInit(void); //初始化
u8 SDCardReadData(u8*buf,u32 sector,u32 cnt); //讀塊(扇區(qū))
u8 SDCardWriteData(u8*buf,u32 sector,u32 cnt); //寫塊(扇區(qū))
u32 GetSDCardSectorCount(void); //讀扇區(qū)數(shù)
u8 GetSDCardCISDCardOutnfo(u8 *cid_data); //讀SD卡CID
u8 GetSDCardCSSDCardOutnfo(u8 *csd_data); //讀SD卡CSD
#endif
(4)運行效果
3.2 SPI硬件時序方式
上面的3.1小節(jié)是采用SPI模擬時序驅(qū)動SD NAND,STM32本身集成有SPI硬件模塊,可以直接利用STM32硬件SPI接口讀寫。
下面貼出底層的適配代碼。 上面貼出的驅(qū)動代碼里,已經(jīng)將驅(qū)動接口部分和協(xié)議邏輯部分區(qū)分開了,替換底層的SIP讀寫代碼非常方便。
(1)主要替換的代碼
/*
函數(shù)功能:SPI初始化(模擬SPI)
硬件連接:
MISO--->PB14
MOSI--->PB15
SCLK--->PB13
*/
void SPI_Init(void)
{
/*開啟時鐘*/
RCC->APB1ENR|=1<<14; ??//開啟SPI2時鐘
RCC->APB2ENR|=1<<3; ? ?//PB
GPIOB->CRH&=0X000FFFFF; //清除寄存器
GPIOB->CRH|=0XB8B00000;
GPIOB->ODR|=0X7<<13; ? ? //PB13/14/15上拉--輸出高電平
/*SPI2基本配置*/
SPI2->CR1=0X0; //清空寄存器
SPI2->CR1|=0<<15; //選擇“雙線雙向”模式
SPI2->CR1|=0<<11; //使用8位數(shù)據(jù)幀格式進行發(fā)送/接收;
SPI2->CR1|=0<<10; //全雙工(發(fā)送和接收);
SPI2->CR1|=1<<9; ?//啟用軟件從設(shè)備管理
SPI2->CR1|=1<<8; ?//NSS
SPI2->CR1|=0<<7; ?//幀格式,先發(fā)送高位
SPI2->CR1|=0x0<<3;//當(dāng)總線頻率為36MHZ時,SPI速度為18MHZ,高速。
SPI2->CR1|=1<<2; ?//配置為主設(shè)備
SPI2->CR1|=1<<1; ?//空閑狀態(tài)時, SCK保持高電平。
SPI2->CR1|=1<<0; ?//數(shù)據(jù)采樣從第二個時鐘邊沿開始。
SPI2->CR1|=1<<6; ?//開啟SPI設(shè)備。
}
/*
函數(shù)功能:SPI讀寫一個字節(jié)
*/
u8 SPI_ReadWriteOneByte(u8 data_tx)
{
u16 cnt=0;
while((SPI2->SR&1<<1)==0) ?//等待發(fā)送區(qū)空--等待發(fā)送緩沖為空
{
cnt++;
if(cnt>=65530)return 0; //超時退出 u16=2個字節(jié)
}
SPI2->DR=data_tx; //發(fā)送一個byte
cnt=0;
while((SPI2->SR&1<<0)==0) ?//等待接收完一個byte ??
{
cnt++;
if(cnt>=65530)return 0; //超時退出
}
return SPI2->DR; //返回收到的數(shù)據(jù)
}
函數(shù)功能:SD卡底層接口,通過SPI時序向SD卡讀寫一個字節(jié)
函數(shù)參數(shù):data是要寫入的數(shù)據(jù)
返 回 值:讀到的數(shù)據(jù)
*/
u8 SDCardReadWriteOneByte(u8 DataTx)
{
return SPI_ReadWriteOneByte(DataTx);
}
(2)運行效果

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5358

    瀏覽量

    126861
  • 嵌入式
    +關(guān)注

    關(guān)注

    5088

    文章

    19158

    瀏覽量

    306458
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356766
收藏 人收藏

    評論

    相關(guān)推薦

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    SD nand,貼片SD,使用起來和SD一致,
    的頭像 發(fā)表于 01-15 18:16 ?74次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>、SPI <b class='flag-5'>NAND</b> 和 Raw <b class='flag-5'>NAND</b> 的定義與比較

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    SD nand,貼片SD,使用起來和SD一致,
    發(fā)表于 01-15 18:15

    關(guān)于SD NAND 的概述

    以其卓越的性能、可靠性和小巧的尺寸,受到市場的廣泛關(guān)注和應(yīng)用。   2.CS創(chuàng)世SD NAND的特點   1. 小巧的尺寸:采用6x8mm
    發(fā)表于 12-06 11:22

    SD NAND 概述

    SD NAND是一種小型、可表面貼裝的存儲解決方案,適用于各種嵌入式系統(tǒng)和便攜式設(shè)備。SD NAND技術(shù)是近年來在存儲領(lǐng)域內(nèi)的一項創(chuàng)新,它結(jié)
    的頭像 發(fā)表于 12-06 11:21 ?217次閱讀

    雷龍CS SD NAND貼片式TF體驗與性能測試

    最近有幸獲得了雷龍發(fā)展提供的貼片式TF樣品,收到的快遞中包含兩片 CS SD NAND 芯片和一個轉(zhuǎn)接板。以下是芯片和轉(zhuǎn)接板的實物照片:
    發(fā)表于 11-26 10:04

    Arduino程序:實現(xiàn)SD NAND貼片sd)的讀寫功能

      單片機上傳程序的時候,有時候感覺它的rom和 ram有時直接限制了他的使用,之前使用eeprom,和sd模塊. []()   然后最近看到了出的SD NAND 就是下面這個
    發(fā)表于 11-07 17:45

    CS創(chuàng)世 SD NANDSD NAND芯片的測評與使用(基于卷積神經(jīng)網(wǎng)絡(luò)的數(shù)字識別)

    通過SD進行系統(tǒng)移植,但一些設(shè)計不合理的卡槽經(jīng)常不能保護SD,反而會損壞折斷。相比之下,
    發(fā)表于 07-24 18:24

    貼片SD功能介紹【MK SD NAND

    SDNAND,通常稱為嵌入式SD貼片式TF、SD Flash、直接貼裝SD
    的頭像 發(fā)表于 07-05 17:03 ?844次閱讀
    <b class='flag-5'>貼片</b>式<b class='flag-5'>SD</b><b class='flag-5'>卡</b>功能介紹【MK <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>】

    SD NAND文件系統(tǒng):技術(shù)解析與應(yīng)用指南

    MK米客方德的SD NAND是一種使用NAND閃存技術(shù)的貼片式TF,因起耐用性和較小的體積而受到廣泛歡迎。
    的頭像 發(fā)表于 06-07 14:45 ?460次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>與<b class='flag-5'>文件系統(tǒng)</b>:技術(shù)解析與應(yīng)用指南

    SD NAND 簡介

    SD NAND是一種創(chuàng)新的存儲芯片,可直接貼片,又名貼片式TF、貼片式T
    的頭像 發(fā)表于 05-29 16:34 ?1265次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b> 簡介

    NAND Flash(貼片式TF)存儲新突破,基礎(chǔ)示例

    with FatFs \\\\r\\\\nSTM32FATFS文件系統(tǒng)測試\\\\r\\\\n \"; // 在外部
    發(fā)表于 05-21 17:13

    STM32F412使用SD,SDIO,FATFS系統(tǒng)SD掛載文件系統(tǒng)失敗的原因?

    求助,STM32F412RET6 使用SD,使用SDIO接口,FATFS系統(tǒng)SD
    發(fā)表于 04-11 07:15

    【嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn)

    讀取 `read` 3.4 注銷 `deinit` 3.5 全部代碼匯總 4. 測試 5. 總結(jié) 1. 概述 那么在移植好了文件系統(tǒng)之后,我們又應(yīng)該如何應(yīng)用文件系統(tǒng)呢? 很多人會說,這
    的頭像 發(fā)表于 03-14 18:13 ?1094次閱讀
    【嵌入式<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>】基于<b class='flag-5'>FATFS</b>/Littlefs<b class='flag-5'>文件系統(tǒng)</b>的日志框架實現(xiàn)

    【嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)的日志框架實現(xiàn)

    `deinit`3.5全部代碼匯總4.測試5.總結(jié)1.概述那么在移植好了文件系統(tǒng)之后,我們又應(yīng)該如何應(yīng)用文件系統(tǒng)呢?很多人會說,這個簡單,就操作文件
    的頭像 發(fā)表于 03-14 18:12 ?1199次閱讀
    【嵌入式<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>】基于<b class='flag-5'>FATFS</b>/Littlefs<b class='flag-5'>文件系統(tǒng)</b>的日志框架實現(xiàn)

    CS 創(chuàng)世SD NAND FLASH 存儲芯片,比TF更小巧輕便易用的大容量存儲,TF替代方案

    ,符合標準SD2.0協(xié)議,且外形尺寸為8.5mm x 7mm。   CS創(chuàng)世SD NAND也被許多開發(fā)者朋友稱為
    發(fā)表于 01-24 18:30