0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SD介質(zhì)格式擴展了MAXQ2000的非易失性數(shù)據(jù)存儲空間

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-03-03 13:51 ? 次閱讀

本文演示如何使用安全數(shù)字(SD)介質(zhì)格式擴展MAXQ2000的非易失性數(shù)據(jù)存儲。

低功耗、低噪聲MAXQ2000微控制器適用于多種應(yīng)用。MAXQ2000將非易失數(shù)據(jù)存儲在閃存中,具有32k字(64kB)閃存容量,與用戶代碼空間共享。但是,如果您的應(yīng)用程序需要更多非易失性存儲,該怎么辦?本文演示如何使用安全數(shù)字 (SD?)介質(zhì)格式,以擴展MAXQ2000的非易失性數(shù)據(jù)存儲。

外部存儲的設(shè)計注意事項

應(yīng)用的首要設(shè)計考慮因素是電源電壓和電流要求。在典型的MAXQ2000應(yīng)用中,采用雙通道線性穩(wěn)壓器來運行處理器內(nèi)核電壓(VDD) 以所選設(shè)計時鐘速率所需的最低電壓。The MAXQ2000 VDD電源可低至 1.8V。MAXQ2000上的I/O引腳由V供電迪奧,其允許的較低范圍為 VDD上限為3.6V。外部存儲的可接受電流消耗取決于電源的額定電流,如果是電池供電設(shè)備,則取決于電池系統(tǒng)的容量。

其次,用于連接外部存儲器的MAXQ2000 I/O線數(shù)量必須保持在最低限度,同時仍能為預期應(yīng)用提供足夠的帶寬。例如,Atmel AT29LV512 閃存芯片在與主機微控制器連接時需要 15 條地址線、2000 條數(shù)據(jù)線和 2000 條控制線。由于MAXQ<>沒有外部地址/數(shù)據(jù)總線,因此在該示例中需要軟件控制總線事務(wù)。對于某些應(yīng)用,該方法不能有效利用MAXQ<>的I/O引腳。

SPI?和我2然而,基于 C 的外部閃存設(shè)備只需要三個或四個接口引腳。MAXQ2000具有硬件SPI模塊,而2C必須由用戶在MAXQ2000上軟件中實現(xiàn)(即“位敲擊”)。這種集成功能意味著SPI接口是訪問外部非易失性存儲器的主要途徑。

SD 存儲卡格式

SD介質(zhì)格式是一種非易失性外部存儲器,可滿足許多應(yīng)用的上述考慮因素。SD格式是“多媒體卡”格式或MMC的繼承者。SD卡存儲器通常采用3.3V電源供電,電流要求適中。SD卡容量范圍從幾兆字節(jié)到最大容量4GB。這種廣泛的可用尺寸為許多應(yīng)用提供了充足的外部存儲空間。

乍一看,SD似乎不能輕易與MAXQ2000連接,因為前者專有的共享總線。但是,SD繼承了MMC的輔助總線格式SPI。因此接口很簡單,因為MAXQ2000包含對SPI的硬件支持。

poYBAGQBituAdu5lAAARMjmhcOU719.gif

圖1.MAXQ2000可輕松連接至SD存儲卡。

圖1所示為典型應(yīng)用電路。SD 卡需要全雙工 8 位 SPI 操作。數(shù)據(jù)從MAXQ2000的MOSI引腳輸入卡的DI引腳,從卡的DO線進入MAXQ2000的MISO引腳。數(shù)據(jù)在CLK線的上升沿同時輸入和傳出卡。每筆交易結(jié)束時必須提供八個額外的時鐘,以允許SD卡完成任何未完成的操作。這些額外時鐘期間的輸入數(shù)據(jù)必須全部為 400。在識別階段,時鐘速率必須限制為最大25kHz,但一旦識別SD卡,時鐘速率可以增加到<>MHz。

MAXQ2000 SPI模塊

MAXQ2000包含一個硬件SPI模塊,易于配置為SD卡接口。為了配置時鐘極性和數(shù)據(jù)長度,SPICF寄存器編程為全零。這將SPI模塊配置為在上升時鐘邊沿鎖存數(shù)據(jù),并將數(shù)據(jù)長度設(shè)置為2000位。對于該應(yīng)用,MAXQ16的系統(tǒng)時鐘頻率為0MHz。在這種情況下,SPICK寄存器被編程為28x380,從而產(chǎn)生大約<>kHz的SPI時鐘。必須通過設(shè)置 SPICN 寄存器的兩個較低位來啟用 SPI 主模式。

標清 SPI 數(shù)據(jù)格式

SD 卡的 SPI 協(xié)議類似于其 SD 總線協(xié)議。沒有數(shù)據(jù)要發(fā)送的卡不會在每個時鐘邊沿從SD卡的DO引腳接收有效數(shù)據(jù),而是將DO引腳保持在所有時鐘邊沿的空閑狀態(tài)。當卡有數(shù)據(jù)要發(fā)送回主機時,在數(shù)據(jù)之前發(fā)送起始位為零的專用令牌。從SD卡傳輸?shù)乃袛?shù)據(jù)都會在這些令牌之后立即發(fā)送,并且長度固定。由于接收方事先知道預期的字節(jié)數(shù),因此響應(yīng)中不包含長度字節(jié)。此外,由于在發(fā)送啟動令牌和數(shù)據(jù)之前不會發(fā)生空閑狀態(tài),因此所有數(shù)據(jù)字節(jié)都將原封不動地傳輸,并且沒有前綴。與總線上的所有其他流量一樣,令牌在 SPI 事務(wù)的 8 位邊界上對齊。從主機到卡的命令和數(shù)據(jù)遵循類似的格式,所有 7 都表示空閑總線。除狀態(tài)令牌之外的所有事務(wù)都受附加到數(shù)據(jù)末尾的循環(huán)冗余校驗 (CRC) 代碼的保護。提供了兩種CRC算法:CRC-16用于短數(shù)據(jù)塊,CRC-<>用于較長的數(shù)據(jù)塊。CRC 是 SD SPI 接口的可選部分,但應(yīng)用于保證數(shù)據(jù)完整性,除非應(yīng)用限制阻止其使用。

循環(huán)冗余校驗

CRC算法通常用于檢測由不可靠的通信信道引起的錯誤。特定CRC的選擇取決于要保護的數(shù)據(jù)大小。對于標清介質(zhì),指定了CRC-7和CRC-16。

CRC算法將受保護的數(shù)據(jù)除以選定的除數(shù)并產(chǎn)生余數(shù)。由于算法中使用的多項式數(shù)學,這種除法是在沒有進位邏輯的情況下完成的。由于不需要進位,因此可以通過邏輯異或運算完成除法。選定的除數(shù)通常稱為CRC多項式。然后,生成的余數(shù)與數(shù)據(jù)一起傳輸,接收器可以使用該余數(shù)來檢查數(shù)據(jù)在傳輸過程中是否未損壞。

對于CRC-7,余數(shù)可以使用軟件中的7位移位寄存器進行計算。此移位寄存器在計算開始時初始化為所有零。當受保護數(shù)據(jù)的每個位(MSB優(yōu)先)移入移位寄存器的LSB時,移位寄存器的MSB被移出并檢查。如果剛剛移出的位是 7,則移位寄存器的內(nèi)容通過 XOR 與 CRC-0 多項式值 09x7 進行修改。如果移出移位寄存器的位為零,則不執(zhí)行異或。一旦受保護數(shù)據(jù)的最后一位被移入并且條件異或完成,就必須以類似的方式再移入七個零。此過程稱為增強,并完成多項式除法。此時,可以直接從移位寄存器讀取CRC-<>值。

pYYBAGQBityAZAy_AAAr5x-FJls590.gif

圖2.CRC-7可以使用移位寄存器架構(gòu)進行計算。

當接收器擁有所有受保護的數(shù)據(jù)時,接收器可以計算受保護數(shù)據(jù)的CRC-7值,并將其與接收到的CRC-7值進行比較。如果值不同,接收方知道受保護的數(shù)據(jù)在傳輸過程中已損壞。如果值匹配,接收方可以高度確定地知道數(shù)據(jù)完整性不會受到通信信道的影響。

CRC-16算法可以用同樣的方式構(gòu)建。在這種情況下,移位寄存器的長度為16位而不是7位,多項式值更改為0x1021,輸入數(shù)據(jù)增加了16個零位。

SD 命令格式

命令以6字節(jié)格式發(fā)送到卡(圖3)。命令的第一個字節(jié)可以通過使用十六進制6x0對 40 位命令代碼進行 OR 運算來構(gòu)造。接下來的四個字節(jié)提供單個 32 位參數(shù)(如果命令需要);最后一個字節(jié)包含字節(jié) 7 到 1 的 CRC-5 校驗和。表 1 列出了重要的 SD 命令。

poYBAGQBit2AaCllAAATmG9Of-8513.gif

圖3.SPI 模式 SD 命令以 6 字節(jié)格式發(fā)送到卡。

命令 記憶 論點 描述
0 (0x00) GO_IDLE_STATE 沒有 R1 重置 SD 卡。
9 (0x09) SEND_CSD 沒有 R1 發(fā)送特定于卡的數(shù)據(jù)。
10 (0x0a) SEND_CID 沒有 R1 發(fā)送卡標識。
17 (0x11) READ_SINGLE_BLOCK 地址 R1 讀取字節(jié)地址處的塊。
24 (0x18) WRITE_BLOCK 地址 R1 在字節(jié)地址處寫入塊。
55 (0x37) APP_CMD 沒有 R1 應(yīng)用程序命令的前綴。
59 (0x3b) CRC_ON_OFF 僅位 0 R1 參數(shù)將 CRC 設(shè)置為 (1) 或關(guān)閉 (0)。
41 (0x29) SEND_OP_COND 沒有 R1 啟動卡初始化。

在 SPI 模式下初始化 SD 卡

上電時,SD 卡默認采用專有的 SD 總線協(xié)議。要將卡切換到 SPI 模式,主機發(fā)出命令 0 (GO_IDLE_STATE)。SD 卡通過觀察卡選擇 (CS) 引腳在GO_IDLE_STATE命令期間保持低電平來檢測 SPI 模式選擇??ㄒ皂憫?yīng)格式R1響應(yīng)(圖4)。空閑狀態(tài)位設(shè)置為高,表示卡已進入空閑狀態(tài)。為了保持與MMC卡的兼容性,在此階段SPI時鐘速率不得超過400kHz。

pYYBAGQBit-ATb64AAAUa5qM8cM015.gif

圖4.響應(yīng)格式 R1 指示發(fā)出的命令成功或失敗。

現(xiàn)在 SD 卡處于 SPI 模式,SD 規(guī)范要求主機先發(fā)出初始化命令,然后才能處理任何其他請求。為了區(qū)分 MMC 和 SD 卡,SD 卡實現(xiàn)了 MMC 卡不響應(yīng)的備用初始化命令。向卡發(fā)送命令 55 (APP_CMD) 后跟應(yīng)用程序命令 41 (SEND_OP_COND) 即可完成此重要步驟。MMC 卡不響應(yīng)命令 55,該命令可用于拒絕 MMC 卡作為無效介質(zhì)。重復此命令序列,直到來自卡的R1響應(yīng)中的所有位都為零(即空閑位變低)。

poYBAGQBiuCAFL7IAAAmo-Vqiis742.gif

清單 1.代碼必須使用 SEND_OP_COND 標識 SD 和 MMC 卡。

SD 卡包含幾個重要的寄存器,這些寄存器提供有關(guān) SD 卡的信息。最重要的寄存器是卡特定數(shù)據(jù)寄存器(CSD)。對于我們的示例應(yīng)用程序,我們對內(nèi)存的塊大小和總大小感興趣。我們還必須注意卡識別數(shù)據(jù)寄存器(CID),因為它包含有關(guān)卡制造商和序列號的詳細信息。圖 5 顯示了 CSD 和 CID 寄存器的布局。

pYYBAGQBiuGAOpTZAABtc7pwkTQ236.gif

圖5.CSD 和 CID 寄存器提供有關(guān) SD 卡的信息。

檢查 SD 卡響應(yīng)

要從卡中讀取卡寄存器或塊,我們必須首先了解卡如何響應(yīng)我們的查詢。在 SPI 模式下,SD 卡使用 R9 格式回復命令SEND_CSD (10)、SEND_CID (17) 和READ_SINGLE_BLOCK (1)。接下來是開始令牌、請求的數(shù)據(jù),最后是數(shù)據(jù)的 CRC-16 校驗和。我們不能假設(shè) R1 回復和數(shù)據(jù)啟動令牌一個接一個地立即發(fā)生,因為總線可以在這兩個事件之間進入空閑狀態(tài)一段時間。圖 6 詳細介紹了數(shù)據(jù)響應(yīng)。

poYBAGQBiuKAbH6WAAAkj1avX1M985.gif

圖6.從 SD 卡到主機的數(shù)據(jù)傳輸以啟動令牌為前綴。

讀取懲教署和國際舞蹈委員會寄存器元數(shù)據(jù)

SEND_CSD 和 SEND_CID 命令發(fā)回用于確定 SD 卡參數(shù)的寄存器內(nèi)容。這些命令返回固定數(shù)量的字節(jié),分別對應(yīng)于 CSD 或 CID 寄存器的大小。這些 SEND 命令的 SD 卡將忽略命令字節(jié)中包含的參數(shù)。

從 SD 卡讀取數(shù)據(jù)塊

從SD卡讀取數(shù)據(jù)塊非常簡單。主機發(fā)出 READ_SINGLE_BLOCK 命令,并將起始字節(jié)地址作為參數(shù)。此地址必須與介質(zhì)上塊的開頭對齊。然后,SD 卡評估此字節(jié)地址,并使用 R1 命令回復進行響應(yīng)。命令回復中指示超出范圍的地址。

如果從 SD 介質(zhì)完成讀取而沒有錯誤,則會發(fā)送一個起始數(shù)據(jù)令牌,后跟固定數(shù)量的數(shù)據(jù)字節(jié)和兩個字節(jié)用于 CRC-16 校驗和。如果 SD 卡遇到硬件故障或介質(zhì)讀取錯誤,則不會發(fā)送啟動數(shù)據(jù)令牌。相反,將發(fā)送錯誤令牌并中止數(shù)據(jù)傳輸。

將數(shù)據(jù)塊寫入 SD 卡

寫入數(shù)據(jù)塊類似于讀取,因為主機必須提供與 SD 卡塊邊界對齊的字節(jié)地址。寫入塊大小必須等于 READ_BL_LEN,通常為 512 字節(jié)。通過發(fā)出 WRITE_BLOCK (24) 命令來啟動寫入,SD 卡使用 R1 命令響應(yīng)格式響應(yīng)該命令。如果命令響應(yīng)指示寫入可以繼續(xù),則主機將傳輸數(shù)據(jù)開始令牌,后跟固定數(shù)量的數(shù)據(jù)字節(jié),并以發(fā)送數(shù)據(jù)的 CRC-16 校驗和結(jié)束。SD 卡返回一個數(shù)據(jù)響應(yīng)令牌,指示接受或拒絕要寫入的數(shù)據(jù)。

如果數(shù)據(jù)被接受,SD卡在卡繁忙時將DO線持續(xù)保持低電平。主機沒有義務(wù)在繁忙時段保持卡選擇低電平,如果 CS 被取消斷言,SD 卡會釋放 DO 線路。當多個器件連接到SPI總線時,此過程非常有用。主機可以等待 SD 卡釋放忙音指示,也可以通過定期斷言芯片選擇來檢查卡。如果卡仍然繁忙,它將把 DO 線拉低以指示此狀態(tài)。否則,卡將 DO 線返回到空閑狀態(tài)(請參閱圖 7)。

pYYBAGQBiuOAOsjQAAAYbLFo8F4831.gif

圖7.從主機到 SD 卡的數(shù)據(jù)傳輸涉及更復雜的握手。

SPI 命令和數(shù)據(jù)錯誤檢測

CRC-7 和 CRC-16 校驗和可用于檢測主機和 SD 卡之間通信中的錯誤。錯誤檢測允許在發(fā)生物理引起的錯誤時進行可靠的錯誤恢復,例如插入和移除過程中的觸點反彈或可拆卸介質(zhì)固有的不理想的觸點配接情況。強烈建議使用校驗和,方法是使用參數(shù)中設(shè)置的最低位發(fā)出 CRC_ON_OFF (59) 命令。

poYBAGQBiuSALjZ_AAAXc2kf4e0550.gif

清單 2.強烈建議啟用 CRC 校驗和。

結(jié)論

SD介質(zhì)卡格式代表了一種緊湊、低功耗的非易失性存儲器解決方案,適用于嵌入式系統(tǒng)。通過使用MAXQ2000微控制器提供的硬件SPI支持,可以以很小的開銷訪問SD介質(zhì)卡。Maxim提供的參考軟件演示了最小實現(xiàn),其中包括從SD卡讀取模塊和向SD卡寫入模塊所需的基本操作。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7559

    瀏覽量

    151486
  • 嵌入式
    +關(guān)注

    關(guān)注

    5083

    文章

    19131

    瀏覽量

    305549
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7493

    瀏覽量

    163879
收藏 人收藏

    評論

    相關(guān)推薦

    如何存儲應(yīng)用程序中使用的數(shù)據(jù)?

    我應(yīng)該用什么API來存儲數(shù)據(jù)?我使用CYW43907,手冊上說它支持外部閃存。我想知道我
    發(fā)表于 11-13 15:19

    CypressSRAM技術(shù)

    SRAM的單元基于SONOS技術(shù)。他們利用Fowler-Nordheim隧穿(FN隧穿)的優(yōu)勢通過將電荷捕獲在夾層氮化物層中來存儲
    發(fā)表于 04-08 14:58

    MAXQ2000 SPI模塊與MAX6951/MAX6950怎么配合使用?

    本應(yīng)用筆記提供MAXQ?匯編程序范例,說明MAXQ2000 SPI模塊與MAX6951/MAX6950的配合使用。
    發(fā)表于 05-31 06:08

    MAXQ2000微控制器與MAX4397是如何連接的?

    MAX4397是什么?MAXQ2000微控制器與MAX4397是如何連接的?
    發(fā)表于 06-04 06:15

    IMX6UL如何從安全存儲 (SNVS) 讀取或?qū)懭耄?/a>

    我目前正在使用 YOCTO sumo linux 內(nèi)核 L4.14.98-2.3.1 和 imx6ul。在我的應(yīng)用程序中,我們需要將安全數(shù)據(jù)(例如密鑰)存儲在安全
    發(fā)表于 04-14 07:38

    MAXQ2000數(shù)據(jù)存儲器中實現(xiàn)軟堆棧

    摘要:本應(yīng)用筆記介紹匯編應(yīng)用中在數(shù)據(jù)存儲器內(nèi)實現(xiàn)軟堆棧的簡單方法。該方法使用了MAXQ2000和其他基于MAXQ20的微控制器。采用了MA
    發(fā)表于 04-23 16:04 ?970次閱讀

    利用MAXQ2000設(shè)計電壓表

    摘要:本應(yīng)用筆記演示了如何配置MAXQ2000微控制器實現(xiàn)簡單的電壓表設(shè)計。該應(yīng)用采用MAXQ2000評估板,其中包括4½位段式LCD顯示器和MAX1407數(shù)據(jù)采集系統(tǒng)(DAS)以及一對外部電阻。
    發(fā)表于 04-23 16:07 ?836次閱讀
    利用<b class='flag-5'>MAXQ2000</b>設(shè)計電壓表

    利用SD存儲介質(zhì)擴展MAXQ2000數(shù)據(jù)存儲空間

    摘要:本文討論如何使用安全數(shù)字(SD)媒體格式擴展MAXQ2000
    發(fā)表于 04-23 16:25 ?1204次閱讀
    利用<b class='flag-5'>SD</b><b class='flag-5'>存儲</b><b class='flag-5'>介質(zhì)</b><b class='flag-5'>擴展</b><b class='flag-5'>MAXQ2000</b>的<b class='flag-5'>非</b><b class='flag-5'>易</b><b class='flag-5'>失</b><b class='flag-5'>性</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>存儲空間</b>

    充分利用MAXQ®處理器的存儲服務(wù)

    充分利用MAXQ®處理器的存儲服務(wù) 摘要:需要
    發(fā)表于 05-02 09:28 ?908次閱讀
    充分利用<b class='flag-5'>MAXQ</b>®處理器的<b class='flag-5'>非</b><b class='flag-5'>易</b><b class='flag-5'>失</b><b class='flag-5'>存儲</b>服務(wù)

    MAXQ處理器的存儲功能

    MAXQ器件包含的硬件部分可以實現(xiàn)偽馮諾依曼架構(gòu),如同訪問數(shù)據(jù)空間一樣訪問代碼空間。這種額外的多功能,結(jié)合
    發(fā)表于 05-31 11:51 ?1236次閱讀
    <b class='flag-5'>MAXQ</b>處理器的<b class='flag-5'>非</b><b class='flag-5'>易</b><b class='flag-5'>失</b><b class='flag-5'>存儲</b>功能

    新型存儲MVM數(shù)據(jù)管理

    為適應(yīng)底層存儲架構(gòu)的變化,上層數(shù)據(jù)庫系統(tǒng)已經(jīng)經(jīng)歷多輪的演化與變革.在大數(shù)據(jù)環(huán)境下,以
    發(fā)表于 01-02 19:04 ?0次下載
    新型<b class='flag-5'>非</b><b class='flag-5'>易</b><b class='flag-5'>失</b><b class='flag-5'>存儲</b>MVM<b class='flag-5'>數(shù)據(jù)</b>管理

    利用SD存儲介質(zhì)擴展MAXQ2000數(shù)據(jù)存儲空間

    本文討論如何使用安全數(shù)字(SD)媒體格式打“展MAXQ2000
    發(fā)表于 04-08 09:59 ?4次下載

    MAXQ2000數(shù)據(jù)存儲器中實現(xiàn)軟堆棧

    本應(yīng)用筆記演示一種在數(shù)據(jù)存儲器中實現(xiàn)軟堆棧的簡單方法,用于基于匯編的應(yīng)用。該方法使用MAXQ2000和其他基于MAXQ20的微控制器。示例
    的頭像 發(fā)表于 01-11 11:20 ?729次閱讀

    MAXQ2000數(shù)據(jù)存儲器中實現(xiàn)軟堆棧

    MAXQ2000微控制器與Maxim的RISC微控制器系列MAXQ器件一樣,都是基于MAXQ20內(nèi)核?;?b class='flag-5'>MAXQ20的微控制器通??蓪崿F(xiàn)一個16位寬硬堆棧,其深度固定不變(
    的頭像 發(fā)表于 02-14 18:20 ?812次閱讀

    使用MAXQ2000進行音頻濾波

    乘法累加單元(MAC)和單周期內(nèi)核的組合使MAXQ2000成為多功能微控制器(μC)。MAXQ2000具有性能和I/O外設(shè),非常適合許多應(yīng)用:鬧鐘、手持醫(yī)療設(shè)備、數(shù)字讀數(shù)——任何需要低功耗、高性能和大量I/O的應(yīng)用。通過集成MAC,MA
    的頭像 發(fā)表于 03-02 14:13 ?928次閱讀
    使用<b class='flag-5'>MAXQ2000</b>進行音頻濾波