一、前言
手頭有一塊深圳雷龍?zhí)峁┑馁N片 CS 創(chuàng)世 SD NAND Flash,掛載個(gè)文件系統(tǒng)把玩一下。首先介紹一下使用的貼片 SD 卡,以前使用的都是拔插式的 SD 卡,下面這個(gè)樣子:
SD NAND,貼片式TF卡,貼片式SD卡
深圳雷龍?zhí)峁┑腃S創(chuàng)世 SD NAND Flash 如下圖:
SD NAND,貼片式TF卡,貼片式SD卡
二、貼片 SD 卡介紹
深圳雷龍?zhí)峁┑?CS 創(chuàng)世 SD NAND 屬于 LGA-8 封裝,標(biāo)準(zhǔn) SDIO 接口,兼容SPI/SD/eMMC接口,兼容各大MCU平臺(tái),可替代普通TF卡/SD卡,尺寸6x8mm毫米,內(nèi)置SLC晶圓擦寫(xiě)壽命10萬(wàn)次,通過(guò)1萬(wàn)次隨機(jī)掉電測(cè)試耐高低溫,支持工業(yè)級(jí)溫度-40°~+85°,機(jī)貼手帖都非常方便,速度級(jí)別Class10(讀取速度23.5MB/S寫(xiě)入速度12.3MB/S)標(biāo)準(zhǔn)的SD2.0協(xié)議普通的SD卡可直接驅(qū)動(dòng)。
貼片 SD 卡的使用很簡(jiǎn)單,管腳的連接方式和普通拔插的 SD 卡一致,所以我們?cè)O(shè)計(jì)硬件時(shí)按照普通 SD 的接線方式設(shè)計(jì)就行,以小熊派開(kāi)發(fā)板為例子,單線 SDIO 硬件接線如下:
SD NAND,貼片式TF卡,貼片式SD卡
我使用小熊派開(kāi)發(fā)板來(lái)掛載 FATFS 到雷龍這塊 SD 卡上
三、配置 CubeMX 底層接口
首先使用 CubeMX 配置底層 SD 卡接口,選擇單線模式,分頻設(shè)置高一點(diǎn),其他參數(shù)保持默認(rèn)
SD NAND,貼片式TF卡,貼片式SD卡
配置完 SD 卡后開(kāi)啟 FATFS 的文件系統(tǒng),選擇掛載到 SD 卡,文件名選擇 US ,buff 放到 STACK 上(注意調(diào)大棧空間)
SD NAND,貼片式TF卡,貼片式SD卡
配置完成后生成代碼,cubemx 主要是以下兩個(gè)初始化函數(shù):
SD NAND,貼片式TF卡,貼片式SD卡
四、編寫(xiě)命令行測(cè)試代碼
使用我之前移植的命令行框架,編寫(xiě)測(cè)試函數(shù)
void mount(char argc, char *argv)
{
if (argc > 1)
{
if (!strcmp("init", &argv[argv[1]]))
{
FRESULT ret = FR_INT_ERR;
ret = f_mount(&SDFatFS, SDPath, 1);
if (ret != FR_OK) {
shell_printf("mount init failed! %d\r\n", ret);
} else {
shell_printf("mount init succ!\r\n");
}
} else if (!strcmp("deinit", &argv[argv[1]])) {
FRESULT ret = FR_INT_ERR;
ret = f_mount(NULL, "", 1);
if (ret != FR_OK) {
shell_printf("mount deinit failed!\r\n");
} else {
shell_printf("mount deinit succ!\r\n");
}
}
}
else
{
shell_printf("mount need more arguments!\r\n");
}
};
void open(char argc, char *argv)
{
if (argc > 1)
{
FRESULT ret = FR_INT_ERR;
ret = f_open(&SDFile, &argv[argv[1]], FA_READ | FA_WRITE | FA_CREATE_NEW);
if (ret != FR_OK) {
shell_printf("open %s failed! code: %d \r\n ", &argv[argv[1]], ret);
} else {
shell_printf("open %s succ!\r\n", &argv[argv[1]]);
}
}
else
{
shell_printf("mount need more arguments!\r\n");
}
};
void close(char argc, char *argv)
{
if (argc > 1)
{
FRESULT ret = FR_INT_ERR;
ret = f_close(&SDFile);
if (ret != FR_OK) {
shell_printf("close %s failed!\r\n", &argv[argv[1]]);
} else {
shell_printf("close %s succ!\r\n", &argv[argv[1]]);
}
}
else
{
shell_printf("mount need more arguments!\r\n");
}
};
void write(char argc, char *argv)
{
if (argc > 1)
{
FRESULT ret = FR_INT_ERR;
uint32_t write_num = 0;
ret = f_write(&SDFile, &argv[argv[1]], strlen(&argv[argv[1]]), &write_num);
if (ret != FR_OK) {
shell_printf("write file failed!\r\n");
} else {
shell_printf("write file succ!\r\n");
}
}
else
{
shell_printf("mount need more arguments!\r\n");
}
};
void read(char argc, char *argv)
{
if (argc > 1)
{
FRESULT ret = FR_INT_ERR;
uint32_t read_num = 0;
uint8_t read_buff[100];
ret = f_read(&SDFile, read_buff, 50, &read_num);
if (ret != FR_OK) {
shell_printf("read file failed! %d\r\n", ret);
} else {
shell_printf("read file succ!\r\n");
shell_printf("read dat: %s, read num %d\r\n", read_buff, read_num);
}
}
else
{
shell_printf("mount need more arguments!\r\n");
}
};
將測(cè)試函數(shù)掛到命令行中:
const static_cmd_st static_cmd[] = {
{"ls", shell_ls_cmd},
{"mount", mount},
{"open", open},
{"close", close},
{"read", read},
{"write", write},
{"\0", NULL, NULL},
};
下載代碼,在命令行測(cè)試掛載以及讀寫(xiě)函數(shù):
SD NAND,貼片式TF卡,貼片式SD卡
讀的數(shù)據(jù)有些亂碼,用讀卡器讀出來(lái)看看:
SD NAND,貼片式TF卡,貼片式SD卡
可以看到成功寫(xiě)入,SD 卡掛載 FATFS 成功,命令行操作文件系統(tǒng)功能正常
————————————————
【本文轉(zhuǎn)載自CSDN,作者:Top嵌入式】
深圳市雷龍發(fā)展專注存儲(chǔ)行業(yè)13年,專業(yè)提供小容量存儲(chǔ)解決方案。
-
NAND
+關(guān)注
關(guān)注
16文章
1681瀏覽量
136124 -
FlaSh
+關(guān)注
關(guān)注
10文章
1633瀏覽量
147951 -
SD卡
+關(guān)注
關(guān)注
2文章
564瀏覽量
63890 -
TF卡
+關(guān)注
關(guān)注
2文章
80瀏覽量
12145
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論