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