原理圖
下圖是sdio的接線圖
dat0-4 cmd 接了4.7k的上拉電阻。六根與mcu相連的線中均接了一個22歐的電阻,用于限制電流。

下圖是mcu的接線

dat0接引腳P2.0,dat1接P2.1,dat2接P2.2,dat3接P2.3,cmd接P2.4,clk接P2.5,

板子的sd卡座是彈簧式的,卡片壓下去 ,彈片與地相接,mcu_sd_cd低電平,mcu可檢測到當(dāng)前有卡片插入。

英飛凌提供了兩種驅(qū)動依賴:
PSoC 6 Peripheral Driver Library(PDL),Hardware Abstraction Layer (HAL)。
pdl接口大概對sdio的支持度不很好,不太完善,當(dāng)前測試按照以下流程初始化會失敗,
pdl接口位于HAl的上層,屬于對hal接口的再次封裝。

群里有位大佬使用了hal接口,初始化看起來問題不大,初始化效果如下,可以得到卡片的容量

rtt驅(qū)動結(jié)構(gòu)
之前寫linux驅(qū)動,學(xué)習(xí)rtt的驅(qū)動時,多少會帶入linux的思維。
rtt的驅(qū)動要比linux的簡單許多,大概框架相似。
整個系統(tǒng)結(jié)構(gòu)分為三層,應(yīng)用層,也就是我們的業(yè)務(wù)層。
第二層時rtt提供的中間層,虛擬文件驅(qū)動層。
第三層是針對具體硬件的硬件驅(qū)動層。
業(yè)務(wù)層直接調(diào)用虛擬驅(qū)動層,虛擬驅(qū)動層通過回調(diào)函數(shù)方式操縱硬件驅(qū)動代碼了。
代碼的文件結(jié)構(gòu)如下圖


application是存放應(yīng)用層代碼的文件夾。
rt-thread目錄存放虛擬文件系統(tǒng)接口
libraries存放硬件驅(qū)動代碼和廠商的bsp等支持代碼。
調(diào)用官方的pdl接口導(dǎo)致硬件崩潰,對英飛凌的mcu了解不深,暫不知如何調(diào)查,借鑒群里大佬Vandoul的sdhc驅(qū)動代碼,測試了一下接口。
接口dfs_filesystem_get_partition 有一個小bug,sd卡是64gb容量的卡片,格式化為ntfs格式,讀出的分區(qū)表解析到的容量錯誤,如下圖所示。

代碼參考了vandoul大佬的代碼,刪除了一些異常判斷等代碼。
提供兩個接口 sdrd 和sdwt,僅是直接測試sd卡存儲空間的讀寫,不涉及到文件系統(tǒng)的掛載。
sdrd 帶一個參數(shù),讀取地址
sdwt帶兩個參數(shù),第一個是地址,第一個是數(shù)值
下圖是命令使用效果。

-
上拉電阻
+關(guān)注
關(guān)注
5文章
366瀏覽量
31603 -
存儲器
+關(guān)注
關(guān)注
39文章
7724瀏覽量
171256 -
SD卡
+關(guān)注
關(guān)注
2文章
589瀏覽量
68071 -
MCU控制
+關(guān)注
關(guān)注
0文章
49瀏覽量
7066 -
RTThread
+關(guān)注
關(guān)注
8文章
132瀏覽量
42636
發(fā)布評論請先 登錄
sd卡讀寫產(chǎn)品設(shè)計(jì)經(jīng)驗(yàn)
ARM基礎(chǔ)應(yīng)用實(shí)驗(yàn)06_SD卡讀寫
ARM基礎(chǔ)應(yīng)用實(shí)驗(yàn)_SD卡讀寫
STM32CubeMX生成一個SD卡讀寫程序
fireflyROC-RK3328燒寫SD卡介紹
基于SPI協(xié)議的SD卡讀寫說明
基于SPI協(xié)議的SD卡讀寫機(jī)制與實(shí)現(xiàn)方法
stm32 CubeMx 實(shí)現(xiàn)SD卡/sd nand FATFS讀寫測試
基于NIOS II的SD卡讀寫控制設(shè)計(jì)
SD卡讀寫均衡失效問題分析
sd卡的讀寫驗(yàn)證流程介紹
評論