原理圖
下圖是sdio的接線圖
dat0-4 cmd 接了4.7k的上拉電阻。六根與mcu相連的線中均接了一個(gè)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可檢測(cè)到當(dāng)前有卡片插入。
英飛凌提供了兩種驅(qū)動(dòng)依賴:
PSoC 6 Peripheral Driver Library(PDL),Hardware Abstraction Layer (HAL)。
pdl接口大概對(duì)sdio的支持度不很好,不太完善,當(dāng)前測(cè)試按照以下流程初始化會(huì)失敗,
pdl接口位于HAl的上層,屬于對(duì)hal接口的再次封裝。
群里有位大佬使用了hal接口,初始化看起來問題不大,初始化效果如下,可以得到卡片的容量
rtt驅(qū)動(dòng)結(jié)構(gòu)
之前寫linux驅(qū)動(dòng),學(xué)習(xí)rtt的驅(qū)動(dòng)時(shí),多少會(huì)帶入linux的思維。
rtt的驅(qū)動(dòng)要比linux的簡(jiǎn)單許多,大概框架相似。
整個(gè)系統(tǒng)結(jié)構(gòu)分為三層,應(yīng)用層,也就是我們的業(yè)務(wù)層。
第二層時(shí)rtt提供的中間層,虛擬文件驅(qū)動(dòng)層。
第三層是針對(duì)具體硬件的硬件驅(qū)動(dòng)層。
業(yè)務(wù)層直接調(diào)用虛擬驅(qū)動(dòng)層,虛擬驅(qū)動(dòng)層通過回調(diào)函數(shù)方式操縱硬件驅(qū)動(dòng)代碼了。
代碼的文件結(jié)構(gòu)如下圖
application是存放應(yīng)用層代碼的文件夾。
rt-thread目錄存放虛擬文件系統(tǒng)接口
libraries存放硬件驅(qū)動(dòng)代碼和廠商的bsp等支持代碼。
調(diào)用官方的pdl接口導(dǎo)致硬件崩潰,對(duì)英飛凌的mcu了解不深,暫不知如何調(diào)查,借鑒群里大佬Vandoul的sdhc驅(qū)動(dòng)代碼,測(cè)試了一下接口。
接口dfs_filesystem_get_partition 有一個(gè)小bug,sd卡是64gb容量的卡片,格式化為ntfs格式,讀出的分區(qū)表解析到的容量錯(cuò)誤,如下圖所示。
代碼參考了vandoul大佬的代碼,刪除了一些異常判斷等代碼。
提供兩個(gè)接口 sdrd 和sdwt,僅是直接測(cè)試sd卡存儲(chǔ)空間的讀寫,不涉及到文件系統(tǒng)的掛載。
sdrd 帶一個(gè)參數(shù),讀取地址
sdwt帶兩個(gè)參數(shù),第一個(gè)是地址,第一個(gè)是數(shù)值
下圖是命令使用效果。
-
上拉電阻
+關(guān)注
關(guān)注
5文章
357瀏覽量
30543 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7440瀏覽量
163530 -
SD卡
+關(guān)注
關(guān)注
2文章
558瀏覽量
63757 -
MCU控制
+關(guān)注
關(guān)注
0文章
48瀏覽量
6720 -
RTThread
+關(guān)注
關(guān)注
7文章
132瀏覽量
40781
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論