嵌入式系統學習 STM32之SD卡(上)

2021-08-02 15:57:46 字數 2577 閱讀 5732

sdio,全稱: secure digital input and output ,即安全數字輸入輸出介面。它是在sd卡介面的基礎上發展而來,它可以相容之前的sd卡,並可以連線sdio介面裝置,比如:藍芽、wifi、照相機等。

sdio和sd卡規範間的乙個重要區別是增加了低速標準。低速卡的目標應用是以最小的硬體開支支援低速i/ o能力。低速卡支援類似數據機、條碼掃瞄器和gps接收器等應用。

stm32的sdio控制器支援多**卡(mmc卡)、sd儲存卡、sd i/o卡和ce-ata裝置。

stm32 sdio介面特點包括:

①與多**卡系統規格書版本4.2全相容。支援三種不同的資料匯流排模式:1位(預設)、4位和8位。

②與較早的多**卡系統規格版本全相容(向前相容)。

③與sd儲存卡規格版本2.0全相容。 

④與sd i/o卡規格版本2.0全相容:支援兩種不同的資料匯流排模式:1位(預設)和4位。

⑤完全支援ce-ata功能(與ce-ata數字協議版本1.1全相容)。  8位匯流排模式下資料傳輸速率可達48mhz。 

⑥資料和命令輸出使能訊號,用於控制外部雙向驅動器。

復位後sdio_d0用於資料傳輸。初始化後主機可以改變資料匯流排的寬度(通過acmd6命令設定)。如果乙個多**卡接到了匯流排上,則sdio_d0、sdio_d[3:0]或sdio_d[7:0]可以用於資料傳輸。       

mmc版本v3.31和之前版本的協議只支援1位資料線,所以只能用sdio_d0(為了通用性考慮,在程式裡面我們只要檢測到是mmc卡就設定為1位匯流排資料)。 

卡時鐘(sdio_ck):每個時鐘週期在命令和資料線上傳輸1位命令或資料。對於sd或sd i/o卡,時鐘頻率可以在0mhz至25mhz間變化。

sdio介面卡時鐘(sdioclk):該時鐘用於驅動sdio介面卡,可用於產生sdio_ck時鐘。對f1來說,sdioclk來自hclk(72mhz);對f4來說,sdioclk來自pll48ck(48mhz)。

f1:ahb匯流排介面時鐘(hclk/2):該時鐘用於驅動sdio的ahb匯流排介面,其頻率為hclk/2=36mhz。

f4:apb2匯流排介面時鐘(pclk2):該時鐘用於驅動sdio的apb2匯流排介面,其頻率為pclk2=84mhz。

sdio_ck計算公式:sdio_ck=sdioclk/(2+clkdiv)

注意:在sd卡初始化時,sdio_ck不可以超過400khz,初始化完成後,可以設定為最大頻率(但不可以超過sd卡最大操作頻率)。

sdio的命令分為:應用相關命令(acmd)和通用命令(cmd)兩部分。傳送acmd時,需先傳送cmd55。

sdio所有的命令和響應都是在sdio_cmd引腳上面傳輸的,命令長度固定為48位,sdio命令格式如下表所示:

其中:除了命令索引和引數需要我們設定,其他都是由sdio硬體自動控制。命令索引(如cmd0,cmd1之類)由sdio_cmd暫存器設定,命令引數則由sdio_arg暫存器設定。

一般sd卡在接收到命令列,都會有乙個應答(cmd0例外),這個應答我們也稱之為響應。stm32的sdio介面,支援2種響應型別:短響應(48位)和長響應(136位)。

stm32 sdio短響應(48位)格式如下表所示:

stm32 sdio長響應(136位)格式如下表所示:

不論是短響應還是長響應,硬體都會自動濾除了起始位、傳輸位、crc7以及結束位等資訊,對於短響應,命令索引存放在sdio_respcmd暫存器,引數則存放在sdio_resp1暫存器裡面。對於長響應,則僅留cid/csd位域,存放在sdio_resp1~sdio_resp4等4個暫存器。

sdio與sd**信一般以資料塊的形式進行傳輸,sdio(多)資料塊讀操作,如下圖所示:

從機在收到主機相關命令後,開始傳送資料塊給主機,所有資料塊都帶crc校驗(由硬體自動處理),單個資料塊讀的時候,在收到1個資料塊以後即可以停止了,不需要傳送停止命令(cmd12)。但是多塊資料讀的時候,sd卡將一直傳送資料給主機,直到接到主機傳送的stop命令(cmd12)。

usdio(多)

資料塊寫操作,如下圖所示:

資料塊寫操作同資料塊讀操作基本類似,只是資料塊寫的時候,多了乙個繁忙判斷,新的資料塊必須在sd卡非繁忙的時候傳送。這裡的繁忙訊號由sd卡拉低sdio_d0,以表示繁忙,sdio硬體自動控制,不需要我們軟體處理。

參考:開源電子網

stm32中文參考手冊

嵌入式系統學習 STM32之電容型觸控螢幕

觸控螢幕 touch screen 又稱為 觸控螢幕 觸控面板 是一種可接收觸頭等輸入訊號的感應式裝置。作為一種新型的電腦輸入裝置,可以用來取代傳統的機械按鍵等輸入裝置。它是目前最簡單 方便 自然的一種人機互動方式。主要應用於公共資訊的查詢 領導辦公 工業控制 軍事指揮 電子遊戲 點歌點菜 多 教學...

嵌入式系統學習 STM32之電阻型觸控螢幕

按照觸控螢幕的工作原理和傳輸資訊的介質,把觸控螢幕分為四種,它們分別為 電阻式 定位準確,單點觸控。電容感應式 支援多點觸控,偏貴。工業應用最廣泛 紅外線式 低廉,但其外框易碎,容易產生光干擾,曲面情況下失真。表面聲波式 解決各種缺點,但是螢幕表面如果有水滴和塵土會使觸控螢幕變的遲鈍。電阻屏的主要部...

嵌入式之STM32系列筆記

一 微控制器程式構架設計 用微控制器開發專案,當 開發到一定的程度後,由於涉及到的源程式檔案與標頭檔案眾多,若在前期為程式設計好架構,則在一定程度上便於程式的維護與管理,更有利於理清思路,加快專案的開發。通常將程式架構設定為四層,如下圖 其中middleware可以沒有,如果沒有外部擴充套件件,如外...