一、前言
手頭有一塊深圳雷龍提供的貼片 CS 創世 SD NAND Flash,掛載個文件系統把玩一下。首先介紹一下使用的貼片 SD 卡,以前使用的都是拔插式的 SD 卡,下面這個樣子:
SD NAND,貼片式TF卡,貼片式SD卡
深圳雷龍提供的CS創世 SD NAND Flash 如下圖:
SD NAND,貼片式TF卡,貼片式SD卡
二、貼片 SD 卡介紹
深圳雷龍提供的 CS 創世 SD NAND 屬于 LGA-8 封裝,標準 SDIO 接口,兼容SPI/SD/eMMC接口,兼容各大MCU平臺,可替代普通TF卡/SD卡,尺寸6x8mm毫米,內置SLC晶圓擦寫壽命10萬次,通過1萬次隨機掉電測試耐高低溫,支持工業級溫度-40°~+85°,機貼手帖都非常方便,速度級別Class10(讀取速度23.5MB/S寫入速度12.3MB/S)標準的SD2.0協議普通的SD卡可直接驅動。
貼片 SD 卡的使用很簡單,管腳的連接方式和普通拔插的 SD 卡一致,所以我們設計硬件時按照普通 SD 的接線方式設計就行,以小熊派開發板為例子,單線 SDIO 硬件接線如下:
SD NAND,貼片式TF卡,貼片式SD卡
我使用小熊派開發板來掛載 FATFS 到雷龍這塊 SD 卡上
三、配置 CubeMX 底層接口
首先使用 CubeMX 配置底層 SD 卡接口,選擇單線模式,分頻設置高一點,其他參數保持默認
SD NAND,貼片式TF卡,貼片式SD卡
配置完 SD 卡后開啟 FATFS 的文件系統,選擇掛載到 SD 卡,文件名選擇 US ,buff 放到 STACK 上(注意調大棧空間)
SD NAND,貼片式TF卡,貼片式SD卡
配置完成后生成代碼,cubemx 主要是以下兩個初始化函數:
SD NAND,貼片式TF卡,貼片式SD卡
四、編寫命令行測試代碼
使用我之前移植的命令行框架,編寫測試函數
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");
}
};
將測試函數掛到命令行中:
const static_cmd_st static_cmd[] = {
{"ls", shell_ls_cmd},
{"mount", mount},
{"open", open},
{"close", close},
{"read", read},
{"write", write},
{"\0", NULL, NULL},
};
下載代碼,在命令行測試掛載以及讀寫函數:
SD NAND,貼片式TF卡,貼片式SD卡
讀的數據有些亂碼,用讀卡器讀出來看看:
SD NAND,貼片式TF卡,貼片式SD卡
可以看到成功寫入,SD 卡掛載 FATFS 成功,命令行操作文件系統功能正常
————————————————
【本文轉載自CSDN,作者:Top嵌入式】
深圳市雷龍發展專注存儲行業13年,專業提供小容量存儲解決方案。
-
NAND
+關注
關注
16文章
1686瀏覽量
136286 -
FlaSh
+關注
關注
10文章
1640瀏覽量
148308 -
SD卡
+關注
關注
2文章
566瀏覽量
63999 -
TF卡
+關注
關注
2文章
81瀏覽量
12182
發布評論請先 登錄
相關推薦
評論