久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > STM32F407之(zhi)SD卡讀數據介紹

STM32F407之SD卡(ka)讀(du)數據介紹 時間:2019-07-09      來源:長沙中心,劉老(lao)師

1,SD卡(ka)基礎知識(shi)

SD卡(Secure Digital Memory Card)即(ji):安(an)全(quan)數字存儲卡,它是在MMC的(de)基(ji)礎(chu)上(shang)發展而來(lai),作為存儲器件廣泛應用于(yu)電子產(chan)品中(zhong)。

1.1  SD卡有SDIO和SPI兩種傳輸方式,具體信號定義如下:

其(qi)中紅(hong)色選(xuan)中的信號是必需的。

1.2   SD卡的內部結構

1.3  SD中的兩個重要概念: Sector與Block

Sector:  A number of blocks, basic erase unit (SD擦除單位)

可以設置為N*block。

Block :   A number of bytes, basic data transfer unit (SD中最小的讀寫單位)。

block length 可(ke)以被(bei) SET_BLOCKLEN (CMD16)設置 。

1.4 SD 常用命令

Class0 :(卡(ka)的識(shi)別、初始化等基(ji)本命令集)

CMD0:復位SD 卡.

CMD1:讀(du)OCR寄存器.

CMD9:讀(du)CSD寄存器(qi).

CMD10:讀(du)CID寄存器.

CMD12:停(ting)止讀多塊時的(de)數據傳輸(shu)

CMD13:讀 Card_Status 寄存器

Class2 (讀(du)卡命令(ling)集):

CMD16:設置塊的長度

CMD17:讀單塊.

CMD18:讀(du)多塊,直至(zhi)主機發送CMD12為止 . 

Class4(寫卡命令集) :

CMD24:寫單塊(kuai).

CMD25:寫(xie)多塊(kuai).

CMD27:寫CSD寄(ji)存器 .

Class5 (擦(ca)除卡命令集):

CMD32:設置擦(ca)除塊的起始地址.

CMD33:設(she)置擦(ca)除塊的終(zhong)止地址.

CMD38: 擦除所選擇的塊.

2,STM32讀(du)取SD流程

STM32的SDIO接口(kou)提供 APB2 外(wai)設總線與多媒(mei)體卡 (MMC)、SD 卡、SDIO 卡以及(ji) CE-ATA 設備之間的接口(kou)。

2.1 時鐘

三(san)個時(shi)(shi)鐘(zhong)信號:卡(ka)時(shi)(shi)鐘(zhong)SDIO_CK(傳輸(shu)速率0-25MHZ)、SDIO適(shi)配器時(shi)(shi)鐘(zhong)SDIOCLK(用于驅動適(shi)配器來產生卡(ka)時(shi)(shi)鐘(zhong),與(yu)所(suo)掛(gua)載(zai)的總線(xian)時(shi)(shi)鐘(zhong)相同)、總線(xian)時(shi)(shi)鐘(zhong)PCLK2(F1為HCLK2)

   SDIO_CK計算公式:SDIO_CK=SDIOCLK/(2+CLKp)   CLKp為可配置的(de)分頻(pin)系數,在初(chu)始(shi)化時不可以超過400khz ,初(chu)始(shi)化完成后(hou)可全速運行。

2.2 操作流(liu)程

A, 初始化相關(guan) GPIO 及 SDIO 外(wai)設;

B, 配置 SDIO 基本通(tong)信環境進入卡(ka)識別(bie)模式,通(tong)過幾個命令處(chu)理(li)后得到卡(ka)類型(xing);

C,  如果是可用卡就進(jin)入數據傳輸模式,接下來(lai)就可以進(jin)行讀(du)、寫、擦除(chu)的操作(zuo)。

2.3  SD 卡初始化

SD 卡初始化過程主要是卡識別和相關 SD 卡狀(zhuang)態獲取。整個初始化函(han)數流程如下:

具體執行流程如下:

(1) 配置(zhi) NVIC,SD 卡通(tong)信用到 SDIO 中斷,如果(guo)用到 DMA 傳輸還(huan)需要(yao)配置(zhi) DMA 中 斷。注意中斷服務(wu)函數不是定(ding)義(yi)在(zai) stm32f4xx_it.c 文(wen)(wen)件的,是直接定(ding)義(yi)在(zai) bsp_sdio_sd.c 文(wen)(wen)件中,中斷服務(wu)函數定(ding)義(yi)在(zai)個文(wen)(wen)件問題都不大,只要(yao)定(ding)義(yi)正確(que)就(jiu) 可以的,編譯器會自動(dong)尋找。 

(2) 執行 SD_LowLevel_Init 函數,其功(gong)能是對(dui)底層 SDIO 引腳進(jin)行初始化以及(ji)開啟相 關(guan)時(shi)鐘(zhong),該函數在之(zhi)前已經講(jiang)解。

(3) SDIO_DeInit 函數(shu)用(yong)于(yu)解除(chu)初始化 SDIO 接(jie)口,它(ta)只是簡(jian)單調用(yong) SD_LowLevel_DeInit 函數(shu)。而(er) SD_LowLevel_DeInit 函數(shu)是與(yu) SD_LowLevel_Init 函數(shu)相反功能,關閉相關時鐘,關閉 SDIO 電源(yuan),讓 SDIO 接(jie)近上電復(fu)位(wei)狀態(tai)(tai)。 恢復(fu)復(fu)位(wei)狀態(tai)(tai)后(hou)再進行相關配(pei)置(zhi),可以防(fang)止部分沒有(you)配(pei)置(zhi)的參數(shu)采用(yong)非默認值而(er) 導(dao)致錯(cuo)誤,這是 ST 官方(fang)驅動常(chang)用(yong)的一(yi)種初始化方(fang)式。 

(4) 調用 SD_PowerON 函數,它用于(yu)查詢卡的工作電壓和時鐘控(kong)制配(pei)置,并返回 SD_Error 類型(xing)錯誤。

2.4 SD卡讀(du)操(cao)作

從 SD 卡讀取數(shu)據可分為(wei)單塊讀取和(he)多塊讀取。這(zhe)里介紹單塊讀操作流(liu)程。

SD_ReadBlock 函數執行(xing)流(liu)程如下: 

(1) 將 SDIO 外設的數據控制寄存器(qi) (SDIO_DCTRL)清理,復位(wei)之前的傳輸設置。 

(2) 調(diao)用 SDIO_ITConfig 函數使能(neng)(neng)相關中(zhong)斷(duan),包括數據(ju)(ju) CRC 失敗(bai)中(zhong)斷(duan)、數據(ju)(ju)超時中(zhong)斷(duan)、數 據(ju)(ju)結束中(zhong)斷(duan)等(deng)等(deng)。然后(hou)調(diao)用 SD_LowLevel_DMA_RxConfig 函數,配(pei)置(zhi)使能(neng)(neng) SDIO 從 SD 卡(ka)的(de)(de)(de)讀取(qu)數據(ju)(ju)的(de)(de)(de) DMA 請(qing)(qing)求。為(wei)(wei)使 SDIO 發送 DMA 請(qing)(qing)求,需要調(diao)用 SDIO_DMACmd 函數使能(neng)(neng)。對于高(gao)容量(liang)的(de)(de)(de) SD 卡(ka)要求塊大小(xiao)必 須為(wei)(wei) 512 字節,程序員有責任保證目(mu)標讀取(qu)地址(zhi)與塊大小(xiao)的(de)(de)(de)字節對齊(qi)問題。 

(3) 對(dui) SD 卡進(jin)行數(shu)據讀寫之前,都必須發送(song) CMD16 指(zhi)定(ding)塊的大(da)小,對(dui)于(yu)標(biao)準卡,讀取 BlockSize 長度字(zi)節的塊;對(dui)于(yu) SDHC 卡,讀取 512 字(zi)節的塊。 

(4) 利用 SDIO_DataInitTypeDef 結構(gou)體類(lei)型變量(liang)配置(zhi)數(shu)(shu)(shu)據傳輸的超時、塊(kuai)數(shu)(shu)(shu)量(liang)、數(shu)(shu)(shu)據塊(kuai)大 小、數(shu)(shu)(shu)據傳輸方向(xiang)等(deng)參數(shu)(shu)(shu)并使(shi)用 SDIO_DataConfig 函數(shu)(shu)(shu)完成數(shu)(shu)(shu)據傳輸環境配置(zhi)。 

(5) 最后(hou)控制(zhi)(zhi)器(qi)向 SD 卡(ka)發送(song)單塊(kuai)讀數據(ju)(ju)命令(ling) CMD17,SD 卡(ka)在(zai)接收到命令(ling)后(hou)就會通過(guo)數據(ju)(ju)線把數據(ju)(ju)傳(chuan)輸到控制(zhi)(zhi)器(qi)數據(ju)(ju) FIFO 內,并(bing)自動生成 DMA 傳(chuan)輸請(qing)求。

(6)SD_WaitReadOperation 函數用于等待數據讀取操作完成(cheng),只(zhi)有在確(que)保數據讀取完成(cheng)了,我們就可以放心使用數據。

 


上一篇:STM32 keil開發環境搭建

下一篇:Java數據結構——線性表

熱(re)點(dian)文章(zhang)推薦
華清學員就(jiu)業榜單
高薪學(xue)員經(jing)驗分享
熱點新聞(wen)推薦
前臺(tai)專線:010-82525158 企業培(pei)訓洽(qia)談(tan)專線:010-82525379 院(yuan)校(xiao)合作洽談專(zhuan)線(xian):010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部