<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        SD卡的詳細資料(開發文檔)

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月18日   【字體:

        1、簡介  

        SD卡是基于flash的存儲卡。 
        SD卡和MMC卡的區別在于初始化過程不同。 
        SD卡的通信協議包括SD總線和SPI兩類。 
        SD卡使用卡內智能控制模塊進行FLASH操作控制,包括協議、安全算法、數據存取、ECC算法、缺陷處理和分析、電源管理、時鐘管理。
        通信電壓范圍:2.0-3.6V;工作電壓范圍:2.0-3.6V
        最大讀寫速率:10Mbyte/s  
        最大10 個堆疊的卡(20MHz,Vcc=2.7-3.6V)
         
         
        2:卡類型
        MMC卡: MultiMedia card,有 7 個觸點( 引腳),分為兩種操作模式,分別為 MMC模式與SPI 模式,兩種模式對引腳的定義是不同的。SPI 模式只有 Host 具有SPI 接口時才能使用。MMC只具有存儲功能,不像SD卡還具有加密功能。
        SD卡: Security Digtial card,共有9 個觸點( 引腳),多余的 2 個引腳為數據線,但使用與 MMC卡兼容的模式時,這兩個多余的引腳沒有起到作用。SD卡除了存儲功能外,還有一種加密功能,但加密功能是收費的(所以開源的linux中只包含mmc的驅動目錄),因為當初SD卡聯盟中(索尼)就是發明這種卡就是用來存儲音樂(淘汰卡帶),并使用加密特性,防止拷貝。

        TF卡:軟件上SD卡一致,只是在硬件的體積上比SD卡西小,所以市場上很多的TF卡的SD外形卡套
        SDIO卡: 這種卡并不是存儲卡,可以理解為一個SDIO接口卡,如WIFI(SDIO接口);并非memory卡,故名思意,
        就是輸入/ 輸出卡,這種卡有用于 LAN的、也有用于藍牙的。

        3、SD卡協議

        1.x:小于2GB的卡(但通過相關的軟件,可以模擬實現大于2GB)

        2.0: 2<SD卡<32 GB

        3.0: >32GB

        4、SD卡通信接口

        SD卡有9個pin:1個VDD,2個VSS(GND),CLK,CMD,DATA0-DATA3, 【DATA3可以作為卡檢測腳】

        SD卡可以使用SD總線接口,也可以使用SPI通信接口;

        SD總線接口描述:

        CMD:Command is a bi-directional signal. (Host and card drivers are operating in push pull mode.) 【命令與響應都是走這條線】

        DAT0-3:Data lines are bi-directional signals. (Host and card drivers are operating in push pull mode.) 【真正的數據走這幾條線,數據位是可以配置:1~4】

        CLK:Clock is a host to cards signal. (CLK operates in push pull mode.) 

        VDD:VDD is the power supply line for all cards. 

        VSS[1:2]:VSS are two ground lines. 

        SPI接口描述:

        CS:Host to card Chip Select signal.

        CLK:Host to card clock signal. 

        DataIn:Host to card data signal. 

        DataOut:Card to host data signal. 

        5、SD卡內部結構

        Each card has a set of information registers 
        The RCA register is not available in SPI Mode. 
        OCR: 卡操作電壓寄存器 32位, 只讀,每隔0.1V占1位, 第31位卡上電過程是否完成
        CID: 卡身份識別寄存器 128bit,只讀, 廠家號,產品號,串號,生產日期
        SCR: 卡配置寄存器, 可寫的 64bit 是否用Security特性(LINUX不支持),以及數據位寬(1bit或4bit)
        RCA: 卡地址寄存器: 可寫的 16bit SD host和卡進行協商的一個地址,內核中會在代碼里面記錄這個地址,卡這      邊則寫到RCA寄存器
        CSD: 卡專有數據寄存器 部分可讀寫 128bit, 卡容量,最大傳輸速率,讀寫操作的最大電流、電壓,讀寫擦出塊的最大長度等
         
        The host may reset the cards by switching the power supply off and on again. The card has its own power-on detection circuitry which puts the card into an idle state after the power-on. The card can also be reset by sending the GO_IDLE (CMD0) command.
         
        5、SD卡上電過程

        上電初始化需要1ms或者74 CLOCK(SD卡的clock,400KHZ)兩者大致,SD卡的電壓上到2.0V,SD卡開始工作,此時支持的命令非常有限(其中最主要支持ACMD41命令,sd host問卡的操作電壓時多少? 卡就會從它的OCR寄存器里面讀出SD卡出廠就燒錄在里面的卡的操作電壓值返回給sd host),當電壓調整到它要求的VDD時候(SD卡的工作電壓在2.7~3.6V,常見3.3V),同時SD的CLK從400KHZ調整到更高頻率(比如25MHZ),這時卡就完全正常的工作了。接下來可以去獲取卡的生產廠家,容量等信息。

        6、SD卡的命令和響應以及數據傳送的格式

        MMC/SD通過發命令的方式來實現卡的初始化和數據訪問

        卡尋址通過會話地址方式實現,地址在初始化的時候分配給卡。SD 總線上
        的基本操作是command/response。 
        數據傳送采用塊方式,數據塊后接CRC 校驗位,操作包括單數據塊和多數據
        塊。多數據塊更適合快速寫操作,多數據塊傳輸當在 CMD 線出現停止命令時結束。
        數據傳輸可以在主機端設置采用單數據線或多數據線方式。 
        塊寫操作在DAT0 數據線寫操作期間使用忙信號,無論用來傳輸的信號線數
        目是多少。

        命令:通過CMD線
         
        響應:通過CMD線
        數據:通過4條數據線

        最多支持64個命令: CMD0~CMD63,(其中CMD57~63是保留的)
        ACMD: Application Sepcific command:
        ACMD41 =cmd55 + cmd41,組合命令,CMD55是前導命令,提醒卡后面的CMD41是一個特殊的命令
        命令的類型

        廣播命令(bc,bcr)——廣播命令發送給所有SD卡,有些命令需要響應。 

        尋址(點對點)命令

        (ac,adtc)

        ——

        尋址命令只發送給具有相應地址的卡,并

        需要從卡返回一個響應。

        Broadcast Commands ( bc), no response
        The broadcast feature is applicable only if all the CMD linesare connected together in the host. If they are separated then each card will accept it separately on histurn.
        Broadcast Commands with Response (bcr )
        response from all cards simultaneously. Since there is no Open Drain mode in SD Card, this type of command is used only if all the CMD lines are separated.The command will be accepted and responded to by every card separately.
        Addressed (point-to-point) Commands (ac )
        no data transfer on DAT.
        Addressed (point-to-point) Data Transfer Commands (adtc)
        data transfer on DAT.

        響應:
        R1 (standard response): response length 48 bit
        R1b is identical to R1 with an optional busy signal transmitted on the data line
        R2 (CID, CSD register): response length 136 bits. The content of the CID register is sent as a response to CMD2 and CMD10. The content of the CSD register is sentas a response to CMD9.
        R3 (OCR register): response length 48 bits. The contents of the OCR register are sent as a response to ACMD41.
        R4~R5: responses are not supported.
        R6:(Published RCA response): code length 48-bit, response to CMD3


        7、SD卡的狀態

         
        8、SD卡的操作模式
        對卡而言也有兩類操作:
        卡識別模式——在重置(reset)后當主機查找總線上的新卡時,處
        于卡識別模式。重置后SD卡將始終處于該模式,直到收到
        SEND_RCA命令(CMD3)。 
        數據傳輸模式—一旦卡的REC發布后,將進入數據傳輸模式。主機一旦識別了所有總線上的卡后,將進入數據傳輸模式。 
        卡識別模式


           GO_IDLE_STATE(CMD0)是軟件重置命令,設置每個SD卡進入Idle狀態。處于Inactive狀態的卡不受此命令影響。主機上電后,所有SD卡進入Idle狀態,包括處于Inactive狀態的卡。至少74個時鐘周期后才能開始總線傳輸。上電或CMD0(重置)后,所有SD卡的命令線處于輸入模式,等待下一個命令的起始位?ㄍㄟ^一個默認的相對卡地址RCA(RCA=0x0000)和默認驅動寄存器設置(最低速,最高驅動電流)初始化。
           SD的物理規范標準要求所有SD卡能通過最小和最大供電電壓間的任何電壓和主機建立通信。然而,數據傳輸時的最小和最大電壓值在操作條件寄存器OCR中定義,可能并不能覆蓋所有的電壓范圍。SD卡主機希望通過讀取卡的OCR寄存器獲取合適的電壓值或彈出卡。
            在識別時鐘速率fOD下主機開始卡識別過程。SD卡的CMD線輸出驅動是push-pull驅動。 總線激活后,主機要求卡發送它們的有效操作條件(ACMD41 preceding with APP_CMD—CMD55 with RCA=0x0000)。ACMD41命令的響應是卡的操作條件寄存器。相同的命令將發送給系統中所有的卡。不兼容的卡將進入Inactive狀態。主機然后發送命令ALL_SEND_CID(CMD2)到每個卡以獲取每個卡的唯一標識CID號。未識別的卡通過CMD線發送CID號作為響應。當卡發送CID號后,進入識別狀態(Identification State)。此后,主機發送CMD3(SEND_RELATIVE_ADDR)要求卡發布一個新的相對卡地址RCA,地址比CID短,在以后的數據傳輸模式中用來尋址卡。一旦獲得RCA后,卡狀態變成就緒狀態(Stand-by state)。此時,如果主機要求卡換成其他的RCA號,可以通過發送另一個SEND_RELATIVE_ADDR命令給卡,要求發布一個新的RCA,最后發布的RCA是實際使用的RCA。主機對系統中的每個卡重復識別過程。 所有的SD卡初始化完以后,系統將開始初始化MMC卡(如果有的話),使用MMC卡的CMD2和CMD3。

                                             數據傳輸模式
           直到主機知道所有CSD寄存器的內容,fpp 時鐘速率必須保持在fOD,因為
        一些卡有操作頻率限制。主機發送SEND_CSD(CMD9)獲取卡定義數據(Card 
        Specific Data,CSD寄存器),如塊大小、卡存儲容量、最大時鐘速率等。 
            CMD7用來選擇一個卡并將它置于傳輸狀態(Transfer state),在任何時間只能有一個卡處于傳輸狀態。如果已有一個卡處于傳輸狀態,它和主機的連接將釋放,并返回到Stand-by狀態。
            當CMD7以保留相對地址“0x0000”發送時,所有卡將返回到Stand-by狀態。這可以用來識別新的卡而不重置其他已注冊的卡。在這種狀態下已有一個RCA地址的卡不響應識別命令(ACMD41,CMD2,CMD3)。 
           注意:當卡接收到一個帶有不匹配RCA的CMD7時,卡將取消選中。在公用CMD線時,選中一個卡時將自動不選中其他卡。
           因此,在SD卡系統中,主機具有如下功能:
                初始化完成后,在公用CMD線時,不選中卡是自動完成的。
                如果使用單獨的CMD線,需要關注不選中卡的操作
           在主機和選擇的SD卡之間的所有數據通信是點對點的方式。所有尋址命令都需要響應。 
           不同數據傳輸模式的關系如圖4-8所示,使用如下步驟: 
           所有讀數據命令可以在任何時候通過停止命令(stop command,CMD12)中止。數據傳輸將中止,卡回到傳輸狀態(Transfer State)。讀命令有:塊讀命令(CMD17),多塊讀命令(CMD18),發送讀保護(CMD30),
        發送scr(ACMD51),以及讀模式的通用命令(CMD56)。 
           所有寫數據命令可以在任何時候通過停止命令(stop command,CMD12)中止。在不選中卡命令CMD7前寫命令必須停止。寫命令有:塊寫命令 (CMD24 and CMD25),  寫CID (CMD26), 寫CSD(CMD27), lock/unlock 
        命令(CMD42) 以及寫模式通用命令(CMD56)。 
           一旦數據傳輸完成,卡將退出數據寫狀態并進入Programming State(傳輸成功)或Transfer State(傳輸失。。 
           如果一個快寫操作停止,而且最后一塊塊長度和CRC是有效的,那么數據可以被操作(programmed)。 
           卡可能提供塊寫緩沖。這意味著在前一塊數據被操作時,下一塊數據可以傳送給卡。如果所有卡寫緩沖已滿,只要卡在Programming State,DAT0將保持低電平(BUSY)。 
           寫CSD、CID、寫保護和擦除時沒有緩沖。這表明在卡因這些命令而處于忙時,不再接收其他數據傳輸命令。在卡忙時DAT0保持低電平,并處于Programming State。實際上如果CMD和DAT0線分離,而且主機占有的忙DAT0線和其他DAT0線分開,那么在卡忙時,主機可以訪問其他卡。 
           在卡被編程(programming)時,禁止參數設置命令。參數設置命令包括:設置塊長度(CMD16),擦除塊開始(CMD32)和擦除塊結束(CMD33)。 
           卡在操作時不允許讀命令。 
           使用CMD7指令把另一個卡從Stand-by狀態轉移到Transfer狀態不會中止擦除和編程(programming)操作?▽⑶袚Q到Disconnect狀態并釋放DAT線。 
           使用CMD7指令可以不選中處于Disconnect狀態的卡?▽⑦M入Programming狀態,重新激活忙指示。 
           使用CMD0或CMD15重置卡將中止所有掛起和活動的編程(programming)操作。這可能會破壞卡上的數據內容,需要主機保證避免這樣的操作。

        9、SD卡是否選擇寬總線選擇
           寬總線(4位總線寬度)操作模式通過ACMD6選擇和不選擇。在上電后或GO_IDLE(CMD0)命令后默認的總線寬度是1位。ACMD6命令只在“tran state”有效,即只有在卡選中后(CMD7)總線寬度才能修改。
         
        10、SD卡讀數據格式
           DAT總線在沒有數據傳輸時處于高電平。一個傳輸數據塊包含一個起始位(LOW),接著連續的數據流。數據流包含有效數據(如果使用了ECC了還包括錯誤糾正位)。數據流以一個結束位(HIGH)結束。數據傳輸和時鐘信號同步。 
          以塊傳輸的有效數據包含CRC校驗和。產生多項式是標準CCITT 多項式。 采用了縮短的BCH碼,d=4,有效數據長度最長為2048字節。CRC校驗和對每個DAT線單獨計算并附加在每個數據塊后。在寬總線模式操作
        (DAT0-DAT3)中,16位的CRC校驗對每個DAT分別計算。 
          數據塊讀: 傳輸的基本單位是數據塊,最大尺寸在CSD中定義(READ_BL_LEN)。開始和結束地址完全包含在一個物理數據快(如READ_BL_LEN定義)中的較小的塊也可以傳遞。CRC附加在每個數據塊的尾部用來保證數據傳輸的完整性。CMD17(READ_SINGLE_BLOCK)開始一個塊讀操作,然后傳輸完成后進入Transfer狀態。CMD18(READ_MULTIPLE_BLOCK)開始連續的塊傳輸,直到停止命令。停止命令有一個執行延遲。在停止命令最后一位發送完以后數據傳輸停止。 如果主機使用累計長度不是塊對齊的部分塊,在第一個不對齊塊的開始,卡會發現一個塊未對齊錯誤,在狀態寄存器中設置ADDRESS_ERR錯誤,中止傳輸并等待(在Data狀態)停止命令。

        11、SD卡寫數據格式
         
        數據寫傳輸格式類似于讀格式。對于以塊為單位的寫數據傳輸,CRC檢驗
        位附加到每個數據塊?ǖ拿扛鶖祿在接收到數據并在寫操作前,執行CRC
        校驗。 
        數據塊寫 
        數據塊寫(CMD24-27,42,56(W)),一個或多個數據塊從主機發送給卡,主機
        在每個數據塊后附加CRC校驗。數據塊長度WRITE_BL_LEN(512B)。如果
        CRC校驗失敗,卡將在DAT數據線上指示錯誤。傳輸的數據將被拋棄,而且后
        續傳輸的數據塊(在多數據塊寫模式)也都會被忽略。 
        多數據塊寫命令比連續的單數據塊寫命令速度快。不允許部分塊寫(小于
        512B)。 
        當主機試圖在寫保護區域寫數據時寫操作將中止。在這種情況下,卡在狀態
        寄存器設置WP_VIOLATION位,并忽略所有后續數據傳輸,并在Receive-data
        狀態下等待停止命令。 
        對CID和CSD寄存器進行編程操作不需要實現設置塊長度,傳輸的數據也
        是CRC保護的。如果CSD或CID寄存器一部分存儲于ROM中,那么不可改變
        部分必須和接收緩沖中的相應部分內容保持一致。如果匹配失敗,卡將報告一個
        錯誤,而且不改變任何寄存器內容。 
        接收到一個數據塊并完成CRC校驗后,卡將開始寫,如果寫緩沖滿而且不
        能從一個新的WRITE_BLOCK命令接收新數據時,  DAT0 線保持為低電平。任
        何時候主機都可以通過SEND_STATUS(CMD13)命令獲取卡的狀態。狀態位
        READY_FOR_DATA指示卡是否可以接收新數據或寫操作還在進行中。主機通
        過CMD7(選中另一個卡)不選中卡,這個操作可以把卡的狀態編程Disconnect
        并釋放DAT線而不中斷寫操作。當不選中卡時,如果編程還在進行而且寫緩沖
        不可用時,將通過下拉DAT為低電平來重新激活忙信號。實際上,主機通過
        interleaving可以實現多個卡同時寫操作,interleaving過程可以通過在卡忙時訪問
        其他卡實現。 
        預擦除設置優先于多數據塊寫操作 
        設置多個寫數據塊的預擦除(ACMD23)可以使得接下來的多個數據塊寫操
        作比沒有預先執行ACMD23的相同操作更快。主機可以通過該命令設置多少個
        數據塊將在接下來的寫操作中發送。如果在所有數據塊發送給卡時中止了寫操作
        (使用停止傳輸命令),殘余寫數據塊的內容(指要寫入新內容的數據塊?)將變
        得不確定(可能已擦除或還是原來的數據)。如果主機發送了超過ACMD23中
        定義的數據塊數目的數據,卡將逐個擦除數據塊(在收到新數據時)。多數據塊
        寫操作完成后值將重新設置為默認值1。 
        建議在CMD25命令前使用該命令以加速寫操作。如果需要預擦除主機在寫
        命令前發送ACMD23。如果不發送ACMD23命令,設置的預擦除數將在其他指
        令執行時自動清除。 
        發送寫數據塊數目 
        系統使用管道機制進行數據緩沖管理,有時候在多數據塊寫操作過程中發生
        錯誤,使得無法確定哪一個數據塊是最后成功寫入的數據塊?ǹ梢园颜懭
        的數據塊數(the number of well-written blocks)作為對命令ACMD22的響應。 
        擦除 
        同時擦除多個寫數據塊可以提高數據吞吐量。通過
        ERASE_WR_BLK_START(CMD32)和ERASE_WR_BLK_END(CMD33)實現寫
        數據塊的識別。 
        主機必須嚴格按照下列的命令操作順序:ERASE_WR_BLK_START,
        RASE_WR_BLK_END,and ERASE (CMD38)。 
        如果不按順序接收到擦除指令(CMD38)或地址設置指令(CMD32,33),
        卡將在狀態寄存器中設置ERASE_SEQ_ERROR位,并重置整個順序(sequence)。 
        如果接收到一個不順序的命令(除了SEND_STATUS),卡將在狀態寄存
        器設置ERASE_RESET狀態位,重置擦除順序和執行最后的命令。 
        如果擦除范圍包括寫保護扇區,將不被擦除,擦除命令只擦除無保護的扇區。
        狀態寄存器的WP_ERASE_SKIP位將設置。 
        地址設置命令中的地址是以字節為單位的塊寫地址?▽⒑雎运行∮
        WRITE_BLK_LEN(CSD)LSB(最低有效位)。 
        如上所述的塊寫操作,卡通過保持DAT0為低電平指示擦除操作正在進行中。
        實際的擦除操作時間可能會很長,主機可以通過CMD7不選中卡或執行卡斷開
        操作。 
        卡上擦除操作后的數據為“0”或“1”,由卡制造商確定。SCR寄存器的
        DATA_STAT_AFTER_ERASE(bit55)定義了是“0”或“1”。
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮