當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]S3C2416裸機(jī)開(kāi)發(fā)系列十六_sd卡驅(qū)動(dòng)實(shí)現(xiàn)標(biāo)簽:S3C2416裸機(jī)開(kāi)發(fā)sd卡驅(qū)動(dòng)sd2.0gcc2014-05-26 12:562429人閱讀評(píng)論(3)收藏舉報(bào)分類(lèi):s3c2416裸機(jī)開(kāi)發(fā)(24)版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。目錄(?)

S3C2416裸機(jī)開(kāi)發(fā)系列十六_sd卡驅(qū)動(dòng)實(shí)現(xiàn)

標(biāo)簽:S3C2416裸機(jī)開(kāi)發(fā)sd卡驅(qū)動(dòng)sd2.0gcc

2014-05-26 12:562429人閱讀評(píng)論(3)收藏舉報(bào)

分類(lèi):

s3c2416裸機(jī)開(kāi)發(fā)(24)

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

目錄(?)[+]

S3C2416裸機(jī)開(kāi)發(fā)系列十六sd卡驅(qū)動(dòng)實(shí)現(xiàn)

象棋小子 1048272975

SD卡(Secure Digital Memory Card)具有體積小、容量大、數(shù)據(jù)傳輸快、可插拔、安全性好等優(yōu)點(diǎn),被廣泛應(yīng)用于便攜式設(shè)備上。例如作為數(shù)碼相機(jī)的存儲(chǔ)卡,作為手機(jī)、平板多媒體擴(kuò)展卡用的TF卡(micro sd)。筆者此處就s3c2416 sd卡驅(qū)動(dòng)的實(shí)現(xiàn)作一個(gè)簡(jiǎn)單的介紹。

1. sd卡概述

sd卡技術(shù)是在MMC卡的基礎(chǔ)上發(fā)展起來(lái)的,其尺寸與MMC卡一樣,只是比MMC卡厚了0.7mm,因此sd設(shè)備可以識(shí)別并存取MMC卡。sd卡接口除了保留MMC卡的7針外,還在兩邊加了2針,作為數(shù)據(jù)線,目的是通過(guò)把傳輸方式由串行變成并行,以提高傳輸速率。此時(shí)的規(guī)范為sd1.0版本,最高容量只能到4GB。為了跟進(jìn)產(chǎn)品的更新?lián)Q代,sd聯(lián)合協(xié)會(huì)在06年發(fā)布了容量更大、存儲(chǔ)更快的下一代sd卡規(guī)范sd2.0。該規(guī)范重新定義了sd卡的速度等級(jí),分為三檔:Class 2、4、6,分別對(duì)應(yīng)寫(xiě)入速度2MB/s、4MB/s、6MB/s。根據(jù)卡容量又分為標(biāo)準(zhǔn)卡(小于2GB)和高容量卡(2GB~32GB),目前市面上應(yīng)用的sd卡絕大部分都是sd2.0版本的卡。為了讓儲(chǔ)存卡更加迷你,通過(guò)sd卡規(guī)范標(biāo)準(zhǔn),又衍生了MiniSD卡和Micro SD卡,這些卡均比標(biāo)準(zhǔn)sd卡尺寸小,通過(guò)sd轉(zhuǎn)接卡可以當(dāng)作一般的sd卡使用。尤其是Micro SD卡,可以算是最小的存儲(chǔ)卡了,超小的體積可以極大的節(jié)省消費(fèi)電子產(chǎn)品內(nèi)部設(shè)計(jì)的空間,基本目前的Android手機(jī)均是選用Micro SD卡作為多媒體擴(kuò)展儲(chǔ)存卡。隨著科技的進(jìn)步,sd2.0規(guī)范sd卡也漸漸無(wú)法滿足應(yīng)用的需求,在10年sd聯(lián)合協(xié)會(huì)又發(fā)布了新的sd3.0規(guī)范,該規(guī)范定義了sdxc和uhs,并增加了Class10,容量范圍為32GB~2TB。在sdxc卡仍需進(jìn)一步坐等其價(jià)格下降的情況下,sd4.0規(guī)范已經(jīng)開(kāi)始在緊張的制訂中,這已超出本文的討論范圍內(nèi)了。

2. sd卡驅(qū)動(dòng)編寫(xiě)

sd卡共支持三種傳輸模式:spi模式、1位sd模式、4位sd模式。所有的sd卡都必須支持較老的spi/mmc模式,這個(gè)模式支持慢速的四線spi接口,使很多微控制器都可以通過(guò)spi或模擬spi接口來(lái)讀寫(xiě)sd卡。由于s3c2416具有sd總線控制器,并且兼容sd2.0的sd卡,因此此處只分析4位sd模式、sd2.0及sd1.0版本的sd卡驅(qū)動(dòng)實(shí)現(xiàn),sd2.0以上版本sd卡、MMC卡、spi方式讀寫(xiě)sd卡在本文不適用。

sd卡驅(qū)動(dòng)的編寫(xiě)必須參考sd2.0規(guī)范,此處只根據(jù)sd2.0規(guī)范講解幾個(gè)重要的過(guò)程或概念,這些過(guò)程具體的實(shí)現(xiàn)請(qǐng)參考sd驅(qū)動(dòng)模塊中相應(yīng)的函數(shù)實(shí)現(xiàn)。

2.1. sd卡初始化及識(shí)別過(guò)程

sd卡上電后,將進(jìn)入idle狀態(tài),此時(shí)的sd卡為1位sd模式。通過(guò)拉低CS線將可使sd進(jìn)入spi模式(不再討論范圍內(nèi)),在sd模式下卡的初始化及識(shí)別過(guò)程見(jiàn)圖2.1.1,其步驟如下:

1) 發(fā)送CMD0軟件復(fù)位所有的卡到idle狀態(tài)。

2) 發(fā)送CMD8來(lái)檢查卡是否支持主機(jī)電壓(2.7v~3.3v),這個(gè)命令在sd2.0以上才被定義,若沒(méi)有收到回復(fù)信號(hào),則可能為sd1.0或MMC卡,若接收到卡回復(fù)信號(hào),說(shuō)明為sd2.0版本卡,跳轉(zhuǎn)到步驟5

3) CMD8沒(méi)有收到回復(fù)信號(hào),可進(jìn)一步發(fā)送ACMD41(CMD55+CMD41),參數(shù)HCS位為0(非高容量卡),如果沒(méi)有回復(fù)信號(hào),說(shuō)明是MMC卡或其它不能識(shí)別的卡,可進(jìn)一步發(fā)送CMD1確定是否MMC卡(此處不再分析)

4) ACMD41能收到回復(fù),并且從回復(fù)中確定sd卡己準(zhǔn)備好,即可確定這是sd1.x版本的卡,若回復(fù)中表明sd卡未準(zhǔn)備好,則需重復(fù)發(fā)送ACMD41等待卡準(zhǔn)備好,可通過(guò)超時(shí)(卡一直busy)判斷卡不支持主機(jī)電壓,此時(shí)表明卡不可用。判斷出sd1.x的卡后,跳轉(zhuǎn)到步驟9

5) CMD8有回復(fù)說(shuō)明為sd2.0以上的卡,從回復(fù)中確定卡是否能在該電壓下工作,不能則認(rèn)為卡不可用。

6) 回復(fù)中確定卡能在2.7v~3.3v電壓工作后,進(jìn)一步發(fā)送ACMD41(CMD55+CMD41),參數(shù)HCS位為1表明主機(jī)支持高容量的卡

7) 檢查ACMD41卡回復(fù)中忙標(biāo)志,若卡處于忙狀態(tài),則重復(fù)發(fā)送ACDM41,直到卡準(zhǔn)備好,可通過(guò)超時(shí)(卡一直忙狀態(tài))可認(rèn)為該卡不可用。

8) ACMD41回復(fù)準(zhǔn)備好后,再檢查回復(fù)中的CCS位,該位為1說(shuō)明是sd2.0高容量sdhc卡,若為0,則說(shuō)明為sd2.0標(biāo)準(zhǔn)容量卡。

9) 在識(shí)別出sd1.x、sd2.0標(biāo)準(zhǔn)卡或sd2.0高容量卡后,此時(shí)卡進(jìn)入ready態(tài)。進(jìn)一步通過(guò)CMD2請(qǐng)求卡發(fā)送其CID(Card Identification),此時(shí)卡進(jìn)入Identification態(tài)。

10) 卡在Identification態(tài)后,發(fā)送CMD3請(qǐng)求卡發(fā)布一個(gè)16位新的相對(duì)地址(RCA),以后主機(jī)與卡之間的點(diǎn)對(duì)點(diǎn)通信均會(huì)以這個(gè)RCA地址來(lái)進(jìn)行,此時(shí)卡進(jìn)入Stand-by態(tài)。

11) 至此,卡的初始化及識(shí)別過(guò)程結(jié)束,此時(shí)卡進(jìn)入數(shù)據(jù)傳輸模式(data transfer mode)


圖2.1.1. sd卡初始化及識(shí)別流程

2.2. 數(shù)據(jù)傳輸模式

sd卡主控制器是一個(gè)非常典型的狀態(tài)機(jī),每個(gè)狀態(tài)只會(huì)響應(yīng)該個(gè)狀態(tài)下的特定命令,不要嘗試在某個(gè)狀態(tài)下發(fā)送這個(gè)狀態(tài)不支持的命令,sd卡不會(huì)對(duì)該命令進(jìn)行響應(yīng),命令只會(huì)超時(shí)。應(yīng)該通過(guò)特定的觸發(fā)條件轉(zhuǎn)變狀態(tài)或等待狀態(tài)遷移完成后,再發(fā)送對(duì)應(yīng)狀態(tài)的命令。如圖2.2.1,要想寫(xiě)一個(gè)塊的數(shù)據(jù)到sd卡,在stand-by態(tài)的情況下,必須通過(guò)CMD7選擇卡,讓卡進(jìn)入transfer態(tài),然后再發(fā)送CMD24單塊寫(xiě)命令,再發(fā)送一塊的數(shù)據(jù),此時(shí)卡進(jìn)入Programming態(tài),這時(shí)如果又緊接發(fā)送CMD24進(jìn)行單塊寫(xiě)將不會(huì)成功,必須等待sd卡編程完,從Programming態(tài)返回到transfer態(tài)才能再次接收下一個(gè)塊寫(xiě)命令。同樣,在transfer態(tài)想通過(guò)CMD9來(lái)獲得Card-Specific Data(CSD),必須通過(guò)CMD7取消選擇卡,此時(shí)卡進(jìn)入stand-by態(tài)后,即可通過(guò)CMD9來(lái)獲得卡信息。


圖2.2.1. sd卡數(shù)據(jù)傳輸模式

2.3. 主機(jī)控制器具體對(duì)卡的初始化

任何cpu的sd卡主機(jī)控制器都可以根據(jù)sd2.0規(guī)范給出的卡初始化及識(shí)別流程進(jìn)行卡的初始化,對(duì)于具體的cpu,需要進(jìn)行一些與控制器相關(guān)的設(shè)置,主要有以下幾點(diǎn),具體的實(shí)現(xiàn)可參考Hsmmc_Init()這個(gè)初始化函數(shù)。

1) 設(shè)置功能引腳,把相應(yīng)引腳配置成sd接口用引腳

2) 設(shè)置sd卡時(shí)鐘在100k~400k,sd卡在識(shí)別階段必須用慢速時(shí)鐘進(jìn)行訪問(wèn)

3) 按照規(guī)范給出的卡初始化流程對(duì)卡進(jìn)行發(fā)送相應(yīng)的命令并處理回復(fù),成功后卡進(jìn)入stand-by態(tài)

4) 通過(guò)發(fā)送CMD7選擇卡,使卡進(jìn)入transfer態(tài),因?yàn)榭ǖ拇蟛糠植僮魅缱x、寫(xiě)、擦除等均是在這個(gè)狀態(tài)下來(lái)進(jìn)行的,此時(shí)卡已完全準(zhǔn)備好接收讀寫(xiě)命令了。

5) 設(shè)置sd卡的時(shí)鐘到一個(gè)較高值,sd卡默認(rèn)支持最高25M時(shí)鐘,可以設(shè)置成高速模式,最高支持50M,頻率越高,數(shù)據(jù)傳輸速率越快

6) 通過(guò)ACMD6(CMD55+CMD6)來(lái)設(shè)置sd模式的位寬為4,sd卡初始化后默認(rèn)是1線寬,更多的數(shù)據(jù)線將有更大的帶寬,數(shù)據(jù)傳輸速率最高12.5MB/s(25M、4線)或25MB/s(50M、4線)。

7) 發(fā)送CMD16設(shè)置塊長(zhǎng)度,對(duì)于標(biāo)準(zhǔn)卡,可通過(guò)CMD16來(lái)設(shè)置塊命令(如塊讀、塊寫(xiě))所操作塊的長(zhǎng)度(以字節(jié)數(shù)計(jì)),可實(shí)現(xiàn)字節(jié)的讀寫(xiě),但對(duì)于高容量卡這個(gè)命令將被忽略,高容量卡一個(gè)塊的長(zhǎng)度均是固定512字節(jié)的。通常通過(guò)CMD16設(shè)置塊長(zhǎng)度為512字節(jié)。至此卡初始化完成。

2.4. 主機(jī)命令的發(fā)送

sd規(guī)范對(duì)命令包格式、回復(fù)包、數(shù)據(jù)的傳輸方式等均作了詳細(xì)的要求。雖然sd卡主機(jī)控制器可以幫我們對(duì)命令進(jìn)行打包,對(duì)回復(fù)進(jìn)行解包,產(chǎn)生CRC,并在sd總線上輸出相應(yīng)的時(shí)序。我們?nèi)孕枰嬖Vsd卡主機(jī)控制器需發(fā)送的命令、這個(gè)命令的參數(shù)、這個(gè)命令發(fā)送后是否需要使用data線, sd卡的回復(fù)類(lèi)型。具體到s3c2416的sd卡主機(jī)控制器,這些設(shè)置通過(guò)CMDREG寄存器來(lái)實(shí)現(xiàn)。主要有以下幾點(diǎn),具體的實(shí)現(xiàn)可參考Hsmmc_IssueCommand()這個(gè)命令發(fā)送函數(shù)。

1) 命令發(fā)送時(shí),需檢查命令線是否已被使用,若是,則等待正在發(fā)送的命令發(fā)送完才能發(fā)送這個(gè)命令

2) 如果命令回復(fù)會(huì)帶忙信號(hào)(如R1b回復(fù)),則需檢查數(shù)據(jù)線是否已被使用,若是,則等待數(shù)據(jù)線空閑,帶忙回復(fù)命令發(fā)送后,sd卡會(huì)拉低DAT[0]線表明sd卡正忙,數(shù)據(jù)線不可用。

3) 把命令參數(shù)寫(xiě)入ARGUMENT這個(gè)寄存器中

4) 在CMDREG中設(shè)置命令值[13:8]

5) 設(shè)置是否需使用data線,如塊讀、塊寫(xiě)等命令發(fā)送后,會(huì)緊接著在data線上傳輸數(shù)據(jù),其它不需傳輸數(shù)據(jù)的命令不要設(shè)置使用data線CMDREG[5]

6) 設(shè)置sd卡的回復(fù)類(lèi)型,絕大部分命令在sd卡正確響應(yīng)后,都會(huì)對(duì)主機(jī)進(jìn)行回復(fù)(R1-R7,R1b),每個(gè)命令對(duì)應(yīng)的回復(fù)類(lèi)型請(qǐng)參考sd卡規(guī)范。回復(fù)類(lèi)型長(zhǎng)度可能為136或48,回復(fù)中是否包含CRC或命令值的反饋,如果包含,則告訴主控制器檢查回復(fù)中相應(yīng)的CRC或命令值反饋是否正確,以確定傳輸正確。CMDREG設(shè)置好后,主控制器就會(huì)發(fā)送命令并接收設(shè)定長(zhǎng)度的回復(fù)并根據(jù)設(shè)定檢查CRC、命令值反饋是否正確(若回復(fù)中包含CRC或命令值反饋的話)

7) 等待命令完成,檢查中斷狀態(tài)位NORINTSTS[15]以確定命令是否有錯(cuò)誤,若沒(méi)有錯(cuò)誤并且檢測(cè)到NORINTSTS[0]命令完成位為1,則說(shuō)明命令發(fā)送成功。其它情況說(shuō)明命令未能成功發(fā)送。

2.5. 主機(jī)對(duì)sd卡的讀寫(xiě)

通常對(duì)于一個(gè)sd卡驅(qū)動(dòng)模塊,至少實(shí)現(xiàn)卡初始化、塊讀、塊寫(xiě)這三個(gè)接口函數(shù)。塊讀、塊寫(xiě)必須在卡初始化完成后,在transfer態(tài)下才有效。通常有以下幾點(diǎn)需要注意,具體可參考Hsmmc_ReadBlock()和Hsmm

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉