国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

【Linux驅(qū)動(dòng)學(xué)習(xí)】SD卡規(guī)范學(xué)習(xí)

2024-06-28 13:23:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
【linux驅(qū)動(dòng)學(xué)習(xí)】SD卡規(guī)范學(xué)習(xí)摘要:

學(xué)習(xí)SD卡的相關(guān)規(guī)范,包括定義,硬件特性,數(shù)據(jù)傳輸,命令系統(tǒng)等。不涉及代碼。

文章針對(duì)Linux驅(qū)動(dòng)開發(fā)而寫,以助于理解SD卡驅(qū)動(dòng),不會(huì)涉及過(guò)多硬件內(nèi)容。

綱要:

1. SD卡介紹

2. SD卡硬件規(guī)范

3. SD卡指令規(guī)范

4. SD卡寄存器

1. SD卡介紹 1.1 各類型儲(chǔ)存卡/接口

首先了解一下我們?cè)赟D卡驅(qū)動(dòng)學(xué)習(xí)中會(huì)碰到的主要幾個(gè)儲(chǔ)存卡名詞:

SD:Security Digital Memory Card,新一代多媒體儲(chǔ)存卡,高速,安全(但安全機(jī)制貌似很少用到)MMC:Multimedia Card,SD卡的上一代多媒體儲(chǔ)存卡,已基本被SD卡代替eMMC:Embedded Multimedia Card,內(nèi)嵌式存儲(chǔ)器,一般焊在PCB上。內(nèi)置主控制器,以實(shí)現(xiàn)統(tǒng)一MMC接口(在傳統(tǒng)MMC接口上拓展,集成了整套理論),Nand Flash就是eMMCSDIO:Secure Digital Input and Output Card,SD標(biāo)準(zhǔn)上定義了一種外設(shè)接口,有很多設(shè)備模塊采用。如Wifi,GPS,Bluetooth

1.2 SD卡特性

以下是SD卡的部分特性。

  • 正向兼容MMC卡:能插SD卡的接口也可以插MMC卡
  • 最大10個(gè)堆疊的卡
  • SD模式和SPI模式
  • 可變時(shí)鐘(0~25MHz),可變電壓(2.0~3.6V)
  • 帶電插拔保護(hù)
  • 安全系統(tǒng),雙方認(rèn)證和“新的密碼算法”技術(shù)

更多的特性請(qǐng)閱讀SD卡官方規(guī)范。

2. SD卡硬件規(guī)范 2.1 SD卡物理接口

下圖是SD卡和MMC卡的針腳:

SD,MMC卡針腳

可以看到,SD卡在MMC卡基礎(chǔ)上增加了8、9兩個(gè)針腳,這兩個(gè)針腳將被用作數(shù)據(jù)傳輸,以支持SD傳輸模式。SD卡支持SD模式(4數(shù)據(jù)線)和SPI模式(2數(shù)據(jù)線),MMC卡只支持SPI模式。

SD卡針腳對(duì)應(yīng)的功能:(SD模式)

SD卡針腳對(duì)應(yīng)功能

SD模式:數(shù)據(jù)并行傳輸,2地,1電源,1時(shí)鐘,1命令,4數(shù)據(jù)線(4出入)(SD模式的命令通過(guò)命令線傳輸)SPI模式:數(shù)據(jù)串行傳輸,2地,1電源,1時(shí)鐘,1片選,2數(shù)據(jù)線(1入1出)(SPI模式的命令通過(guò)數(shù)據(jù)線傳輸)

以下內(nèi)容,如無(wú)分開說(shuō)明,默認(rèn)指SD模式。(本文不會(huì)涉及SPI模式學(xué)習(xí))

2.2 SD卡與主機(jī)的連接

SD模式和SPI模式中與主機(jī)的連接拓?fù)鋱D如下:

image

在SD模式中,數(shù)據(jù)線和命令線是分開連接到主機(jī)各GPIO口中的。在SPI模式中,片選線分別連接到主機(jī)各GPIO口,數(shù)據(jù)線在同一條總線上。

因?yàn)镾PI模式的數(shù)據(jù)線在同一總線上,所以需要片選來(lái)選擇不同的儲(chǔ)存卡;SD模式分別連接到主機(jī),不需要片選線。

3. SD卡命令規(guī)范 3.1 命令類型

SD卡有數(shù)十種指令,但無(wú)非都是一些獲取信息,數(shù)據(jù)傳輸?shù)墓δ埽⒉粫?huì)很難理解。規(guī)范書上有詳細(xì)的狀態(tài)轉(zhuǎn)換圖,下面會(huì)有介紹。

下面是4種指令類型:

  • 廣播指令,無(wú)應(yīng)答(代號(hào)bc):發(fā)送完此類命令后,并不會(huì)有反饋,但操作已經(jīng)生效。
  • 廣播指令,有應(yīng)答(代號(hào)bcr):發(fā)送完此類命令后,SD卡會(huì)給予反饋。可能是一些寄存器信息,可能是
  • 尋址(點(diǎn)對(duì)點(diǎn))指令(代號(hào)ac):發(fā)送完此類命令后,只有指定地址的SD卡會(huì)給予反饋(地址通過(guò)命令請(qǐng)求SD卡發(fā)布,是唯一的)。此時(shí)DAT線上無(wú)數(shù)據(jù)傳輸。
  • 尋址(點(diǎn)對(duì)點(diǎn))數(shù)據(jù)傳輸指令(adtc):發(fā)送完此類命令后,只有制定地址的SD卡會(huì)給予反饋。此時(shí)DAT線上有數(shù)據(jù)傳輸。
3.2命令表

官方文檔將命令分成了好幾種功能。下面將所有命令列出,僅作查閱了解用,不需要每個(gè)命令都記?。?/p>

基礎(chǔ)命令:用于重置、切換SD卡狀態(tài),獲取相關(guān)信息

SD卡命令表class0

讀塊命令:讀單個(gè)、多個(gè)塊數(shù)據(jù),設(shè)置塊長(zhǎng)度

SD卡命令表class2

寫塊命令:寫單個(gè)、多個(gè)塊數(shù)據(jù),設(shè)置塊長(zhǎng)度

SD卡命令表class4

擦除塊命令:把對(duì)應(yīng)的塊數(shù)據(jù)擦除

SD卡命令表class5

寫保護(hù)命令:設(shè)置、取消對(duì)應(yīng)地址的數(shù)據(jù)的寫保護(hù),可以使其他程序無(wú)法寫入指定的地址,達(dá)到保護(hù)目的。用的情況不太多。

SD卡命令表class6

鎖卡命令:設(shè)置、取消鎖卡。鎖卡后需要密碼才能訪問(wèn)SD卡。

SD卡命令表class7

應(yīng)用特殊命令:Cmd55,使用ACMD前必須先發(fā)送的命令;CMD56是標(biāo)準(zhǔn)的讀、寫命令,會(huì)讀、寫一個(gè)block的數(shù)據(jù)。

SD卡命令表class8_thumb[1]

SDIO命令:預(yù)留給SDIO設(shè)備使用(CMD5也是預(yù)留給SDIO設(shè)備),在SD卡官方文檔中沒有說(shuō)明具體用途

SD卡命令表class9

SD卡專用命令:MMC卡無(wú)法使用這些命令,里面包括如設(shè)置數(shù)據(jù)總線位寬,獲取SD卡信息(寄存器)。

SD卡命令表ACMD1

SD卡命令表ACMD2

3.2 命令/數(shù)據(jù)傳輸方式

命令的傳輸協(xié)議大致如下:

  • 0開頭,1結(jié)尾
  • 大端傳輸:先MSB,最后LSB
  • CRC校驗(yàn)

下面這幅圖是無(wú)響應(yīng)和無(wú)數(shù)據(jù)兩種命令的傳輸情況:

SD卡命令傳輸方式(無(wú)數(shù)據(jù)傳輸)

非常清晰易懂,就不贅述了。

下面這幅圖是多塊數(shù)據(jù)讀的數(shù)據(jù)傳輸情況:

SD卡命令傳輸方式(有數(shù)據(jù)傳輸)

主機(jī)發(fā)送多塊讀命令時(shí),首先sd卡會(huì)做出回應(yīng),同時(shí)準(zhǔn)備數(shù)據(jù)。數(shù)據(jù)準(zhǔn)備完成后開始發(fā)送,并在每個(gè)block傳輸完成后加入crc校驗(yàn)碼。傳輸完一個(gè)block和crc后緊跟著下一個(gè)block的數(shù)據(jù)傳輸,直到傳輸完成,或主機(jī)發(fā)送了新的命令。

SD模式有4根數(shù)據(jù)線,一次可以傳輸半個(gè)字節(jié),兩次一個(gè)字節(jié)。他們的傳輸方式如下圖:

SD卡命令傳輸方式

同樣是先傳MSB,再傳LSB,一次傳半個(gè)字節(jié),這樣做可以方便主機(jī)做位移組合成一個(gè)字節(jié)。如果每條線單獨(dú)傳一個(gè)字節(jié),則需要移位8次才可以獲得一個(gè)完整的byte。

3.3 狀態(tài)轉(zhuǎn)換

下圖為SD卡狀態(tài)轉(zhuǎn)換圖。重新上電時(shí)為Idle狀態(tài):

SD卡狀態(tài)轉(zhuǎn)換圖1

SD卡狀態(tài)轉(zhuǎn)換圖2

看起來(lái)這個(gè)狀態(tài)圖很復(fù)雜,其實(shí)我們要走的流程并不復(fù)雜。Linux驅(qū)動(dòng)對(duì)SD卡做初始化會(huì)經(jīng)過(guò)如下步驟:

CMD0上電重置到idle狀態(tài)(防止一些機(jī)型關(guān)機(jī)不掉電,如某些FPGA平臺(tái))->ACMD41獲取SD卡支持的電壓信息(還需要通過(guò)主機(jī)控制器設(shè)置電壓)->CMD2獲取卡商信息->CMD3請(qǐng)求SD卡發(fā)布相對(duì)地址->CMD9獲取CSD寄存器,即卡的電氣特性數(shù)據(jù)(需要使用SD卡相對(duì)地址)->CMD7通過(guò)相對(duì)地址選擇對(duì)應(yīng)的SD卡,該卡進(jìn)入數(shù)據(jù)傳輸Transfer State狀態(tài)->各種CMD進(jìn)行block讀寫

3.4 流程差異

不同種類的卡初始化過(guò)程是不一樣的,通過(guò)流程差異我們可以判斷不同類型的卡。

SDIO:CMD0之后執(zhí)行CMD5,CMD5只有SDIO類型才會(huì)有響應(yīng)。

MMC:ACMD 41換為CMD1,ACMD類命令只有SD或SDIO卡才有響應(yīng)。所以要先檢測(cè)是否是SDIO,再檢測(cè)是否是SD,最后檢測(cè)是否是MMC(core層代碼中也是這個(gè)順序),否則會(huì)出現(xiàn)誤判。

4. SD卡寄存器

SD卡一共有6個(gè)寄存器,我們用的對(duì)多的是CID(卡商信息),RCA(相對(duì)地址)和OCR(電壓信息):

SD卡寄存器

CID:卡信息:生產(chǎn)商,OEM,產(chǎn)品名,版本,出產(chǎn)日期,CRC校驗(yàn)(所有寄存器都有,下同),常用RCA:卡地址:在初始化時(shí)發(fā)布,用于與host通信,0x0000表示與所有卡通信,常用DSR:驅(qū)動(dòng)相關(guān),總線電流大小,上升沿時(shí)間,最大開啟時(shí)間,最小開啟時(shí)間CSD:數(shù)據(jù)傳輸要求:包括讀寫時(shí)間,讀寫電壓最大最低值,寫保護(hù),塊讀寫錯(cuò)誤SCR:特性支持,如CMD支持,總線數(shù)量支持OCR:支持的電壓,常用SSR:特有特性,卡類型(OTP,SD等),一次擦除塊數(shù)量CSR:R1返回指令的卡狀態(tài),此寄存器用與傳輸卡狀態(tài)給host

命令系統(tǒng)中有對(duì)應(yīng)的指令獲取這6個(gè)寄存器。

版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處:

http://www.CUOXin.com/sickworm/p/4015932.html


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡觉县| 克什克腾旗| 徐闻县| 崇州市| 元氏县| 昌都县| 乳山市| 蒙城县| 江口县| 建阳市| 平远县| 迭部县| 潢川县| 阳山县| 米脂县| 鄂尔多斯市| 桐柏县| 扶绥县| 贡觉县| 许昌县| 遵义市| 盐池县| 遂宁市| 扶余县| 白水县| 南通市| 循化| 金昌市| 双桥区| 武定县| 额敏县| 尚义县| 康乐县| 太康县| 册亨县| 大丰市| 青海省| 栾城县| 乐昌市| 永善县| 大化|