多媒體卡控制器 7-1 大綱 概論 MMC控制器功能說明 卡片溝通協定說明 MMC控制器操作 MMC控制器暫存器 7-2 概論 多媒體卡(MMC)控制器用來連接存取應用 處理器的軟體與MMC堆疊 主要以The MultiMediaCard System Specification Version 2.1的標準為基礎 MMC控制器支援從標準MMC或序列週邊介面 (SPI)匯流排至MMC堆疊的解譯協定 軟體必須指示與MMC控制器溝通的協定為 MMC模式或SPI模式 7-3 概論(cont.) MMC控制器特徵: – – – – – 資料傳送率最高可達20Mbps 1個回應FIFO(Response FIFO) 2個接收FIFO(Dual Receive FIFO) 2個傳送FIFO(Dual Transmit FIFO) 不論MMC或SPI模式皆可支援2個MMC MMC控制器處理卡片初始化、CRC的產生與 確認、命令、回復,以及資料交易 7-4
Download ReportTranscript 多媒體卡控制器 7-1 大綱 概論 MMC控制器功能說明 卡片溝通協定說明 MMC控制器操作 MMC控制器暫存器 7-2 概論 多媒體卡(MMC)控制器用來連接存取應用 處理器的軟體與MMC堆疊 主要以The MultiMediaCard System Specification Version 2.1的標準為基礎 MMC控制器支援從標準MMC或序列週邊介面 (SPI)匯流排至MMC堆疊的解譯協定 軟體必須指示與MMC控制器溝通的協定為 MMC模式或SPI模式 7-3 概論(cont.) MMC控制器特徵: – – – – – 資料傳送率最高可達20Mbps 1個回應FIFO(Response FIFO) 2個接收FIFO(Dual Receive FIFO) 2個傳送FIFO(Dual Transmit FIFO) 不論MMC或SPI模式皆可支援2個MMC MMC控制器處理卡片初始化、CRC的產生與 確認、命令、回復,以及資料交易 7-4
多媒體卡控制器 7-1 大綱 概論 MMC控制器功能說明 卡片溝通協定說明 MMC控制器操作 MMC控制器暫存器 7-2 概論 多媒體卡(MMC)控制器用來連接存取應用 處理器的軟體與MMC堆疊 主要以The MultiMediaCard System Specification Version 2.1的標準為基礎 MMC控制器支援從標準MMC或序列週邊介面 (SPI)匯流排至MMC堆疊的解譯協定 軟體必須指示與MMC控制器溝通的協定為 MMC模式或SPI模式 7-3 概論(cont.) MMC控制器特徵: – – – – – 資料傳送率最高可達20Mbps 1個回應FIFO(Response FIFO) 2個接收FIFO(Dual Receive FIFO) 2個傳送FIFO(Dual Transmit FIFO) 不論MMC或SPI模式皆可支援2個MMC MMC控制器處理卡片初始化、CRC的產生與 確認、命令、回復,以及資料交易 7-4 概論(cont.) MMC控制器包含命令與控制暫存器、回應FIFO,與資料FIFO 軟體存取這些暫存器與FIFO,並且產生命令、中斷回應,與控 制後續動作 MMC系統互動圖 7-5 概論(cont.) MMC匯流排連結卡片堆疊與控制器 軟體與控制器可開啟或關閉MMC時脈 卡片堆疊與控制器經由命令與資料線進行連續 溝通,協定所使用的訊息包含下列的符號: – – – 命令(Command) 回應(Response) 資料(Data) 7-6 命令符號 命令集包含卡片初始化、卡片暫存器讀取與寫入、資 料傳送…等 MMC控制器會在MMCMD訊號線上連續傳送命令符號 命令符號格式 位元位置 47 46 [45:40] [39:8] [7:1] 0 寬(位元) 1 1 6 32 7 1 0 1 × × × 1 CRC 7 結束位元 值 說明 起始位元 傳送位元 命令索引 參數 7-7 回應符號 為命令符號的回覆 每個命令都具有特定的回應類型或是無回應類 型 其格式取決於回應類型與卡片模式 7-8 資料符號 控制器與卡片之間,資料以8位元區塊做連續的傳送, 速率可達20Mbps 其格式依卡片的模式為MMC或SPI而有所不同 MMC資料符號格式 串流資料 1 × 無CRC 1 區塊資料 0 × × 1 說明 起始位元 資料 CRC7 結束位元 SPI資料符號格式 值 說明 11111110 × × 起始位元組 資料 CRC16 7-9 命令符號 在MMC模式中,所有的操作都包含命令符號, 而大部分的命令具有一個相關聯的回應符號 在雙向的MMCMD訊號中會傳送與接收命令符 號與回應符號 在雙向的MMDAT訊號中會傳送與接收資料符 號 7-10 無資料符號之MMC模式操作圖 有資料符號之MMC模式操作圖 7-11 SPI模式 在SPI模式中,命令都具有命令符號與回應符號 MMCMD與MMDAT訊號在SPI模式中為單向 在MMCMD訊號中會寫入傳送命令符號與資料符號 在MMDAT訊號中會接收回應符號與讀取的資料符號 無資料符號的SPI模式操作圖 7-12 SPI模式讀取操作圖 SPI模式寫入操作圖 7-13 MMC控制器功能說明 概論 MMC控制器訊號描述 MMC控制器重置 MMC卡片初始化程序 MMC與SPI模式 錯誤偵測 中斷與時脈控制 資料FIFO 7-14 概論 軟體必須讀取與寫入MMC控制器暫存器與FIFO來初 始啟動與卡片的溝通 MMC控制器為軟體與MMC匯流排之間的介面,負責 軟體與MMC匯流排之間的時序與協定 MMC控制器包含: – – – – 控制與狀態暫存器 一個16位元的回應FIFO(Response FIFO) 兩個8位元的接收FIFO(Receive FIFO) 兩個8位元的傳送FIFO(Transmit FIFO) 7-15 MMC控制器訊號描述 訊號名稱 輸入/輸 出 說明 MMCLK 輸出 MMC時脈訊號 MMCMD 雙向 命令線 MMDAT 雙向 資料線 MMCCS0 輸出 晶片選擇0(僅於SPI模式中使用) MMCCS1 輸出 晶片選擇1(僅於SPI模式中使用) 7-16 MMC控制器重置 只可藉由應用處理器的硬重置(hard reset) 或軟重置(soft reset)來重置 重置之後,所有的暫存器與FIFO控制會設定 為初始值 7-17 MMC卡片初始化程序 藉由將MMC_CMDAT[INIT]位元設定為1來初 始化MMC卡 此功能可用來取得已插入匯流排的新卡片 初始化程式期間不會觸發晶片選擇 7-18 MMC與SPI模式 重置之後,MMC卡會處於MMC模式 卡片可維持在MMC模式中,或是藉由設定 MMC_SPI暫存器位元來改變為SPI模式 7-19 MMC模式 在MMC模式中,MMCMD與MMDAT訊號為雙向的 藉由MMCMD訊號可傳送與接收命令與回應符號 藉由MMDAT訊號可讀取與寫入資料 支援下列資料傳送模式: – 單一區塊(Single Block)讀取/寫入 – 多重區塊(Multiple Block)讀取/寫入 – 串流(Stream)讀取/寫入 7-20 SPI模式 在SPI模式中,MMCMD與MMDAT線為單向 的,而且只允許單一區塊資料傳送 MMCMD訊號為控制器的輸出,用來傳送命令 符號與寫入資料至MMC卡 MMDAT訊號為控制器的輸入,用來接收來自 MMC卡的回應符號與讀取資料 7-21 錯誤偵測 MMC控制器會偵測MMC匯流排上的下列錯誤, 並回報給狀態暫存器(MMC_STAT): – – – – – – 回應CRC錯誤:在命令回應上發生計算CRC錯誤 回應逾時:在特定的時脈數目之前還沒有開始回應 寫入資料CRC錯誤:卡片傳回資料上的CRC狀態 錯誤 讀取資料CRC錯誤:資料上發生計算CRC錯誤 讀取逾時:在特定的時脈數目之前不會開始讀取 資料操作 SPI資料錯誤:SPI模式內偵測出讀取資料錯誤符號 7-22 中斷與時脈控制 MMC控制器產生中斷來發出命令序列的狀態訊號,而 軟體負責遮蔽中斷、驗證中斷,並執行適當的動作 MMC控制器與軟體可開啟或關閉MMC匯流排時脈 (MMCLK) – – MMC控制器具有一個內部頻率產生器,可啟動、停止,與劃 分MMC匯流排時脈 軟體可能藉由設定MMC_STRPCL暫存器適當的位元來啟動與 停止時脈 有助於控制資料流來預防underrun與oveflow,也可節 省電源 7-23 資料FIFO 概論 回應資料FIFO(MMC_RES) 接收資料FIFO(MMC_RXFIFO) 傳送資料FIFO(MMC_TXFIFO) DMA與程式I/O 7-24 概論 包含回應資料FIFO、接收資料FIFO,與傳送 資料FIFO,其控制器FIFO分別為MMC_RES、 MMC_RXFIFO與MMC_TXFIFO。 7-25 回應資料FIFO(MMC_RES) 包含控制器傳送命令之後從MMC卡所接收的 回應 此FIFO不包含回應CRC,CRC確認之狀態位 於狀態暫存器MMC_STAT內 7-26 接收資料FIFO(MMC_RXFIFO) 具有兩個接收資料FIFO,對軟體為唯讀 在系統重置之後與所有命令程序開始時,會清除兩個FIFO與其控 制成為啟動狀態 FIFO在軟體與MMC匯流排之間替換(swap),在任何時候,當軟 體讀取其中一個FIFO時,MMC匯流排會寫入至另一個FIFO 當兩個FIFO都成為full而且資料傳送未完成時,控制器會關閉 MMCLK,以預防發生overflow 當時脈已關閉,來自卡片的資料傳送會停止,直到再次啟動時脈 在軟體清空所連接的FIFO之後,控制器會啟動時脈來繼續執行資 料傳送 軟體所連接的FIFO之狀態會註冊至 MMC_STAT[RECV_FIFO_FULL]位元之中 7-27 傳送資料FIFO(MMC_TXFIFO) 具有兩個傳送資料FIFO,只可以由軟體寫入 在系統重置後以及所有指令程序的開始,會將兩個FIFO和其控制 清除為最初狀態 FIFO在軟體與MMC匯流排之間swap,在任何時候,當軟體寫入 其中一個FIFO,MMC匯流排就會讀取另一個FIFO 當兩個FIFO都成為empty而且資料傳送未完成時,控制器會關閉 MMCLK,以預防發生underrun 當時脈已關閉,至卡片的資料傳送會停止,直到再次啟動時脈 當傳送FIFO不再為空的時,MMC控制器會自動重新啟動時脈 軟體所連結的FIFO之狀態會註冊到 MMC_STAT[XMIT_FIFO_EMPTY]位元內 7-28 DMA與程式I/O 軟體可能會經由DMA或程式I/O來和MMC控制 器做溝通 為了以DMA存取FIFO,軟體必須程式化DMA 來讀取或寫入MMC FIFO CMDAT[DMA_EN]位元之設定: – – 1:啟動與DMA的溝通 0:啟動與程式I/O的溝通 7-29 卡片溝通協定說明 基本、無資料、命令與回應程序 資料傳送 忙碌程序 7-30 基本、無資料、命令與回應程序(cont.) MMC控制器執行基本的MMC或SPI匯流排交易 軟體之事件協定: 1. 停止時脈 2. 寫入0x6至MMC_I_MASK暫存器並等待與驗證 MMC_I_REG[CLK_IS_OFF]中斷 3. 寫入至暫存器 (MMC_CMD,MMC_ARGH,MMC_ARGL,MMC_CMDAT,… 4. 啟動時脈 5. 寫入0x7b至MMC_I_MASK暫存器並等待與驗證 MMC_I_REG[END_CMD_RES]中斷 6. 讀取MMC_RES FIFO與MMC_STAT暫存器 命令的結果可能會使某些卡片變為忙碌狀態 軟體可能藉由寫入MMC_I_MASK暫存器並等待 MMC_I_REG[PRG_DONE]中斷來等待卡片變為不忙碌,也可啟 動與另一個卡片的溝通 7-31 基本、無資料、命令與回應程序 Step 2 寫入0x6至MMC_1_MASK Step 3 MMC_CMD, MMC_ARGH, MMC_ARGL, MMC_CMDAT*,MMC_CLKRT,MMC_SPI, MMC_RESTO寫入資料 Step 5 寫入0x7b至MMC_1_MASK Step 6 讀取MMC_RES FIFO和MMC_STAT Step 1 停止時, Step 4 啟動時脈 ●●● ● ● ● 應用處理器 之 MMC控制器 MMC 堆疊 ●●● ●●● * MMC_CMDAT不論有資料是否有改變都要寫入 7-32 資料傳送(cont.) 資料傳送為傳送至卡片的附加資料之命令與回應程序 在啟動時脈之前,軟體必須寫入下列暫存器: – – – MMC_RDTO MMC_BLKLEN MMC_NOB 啟動時脈之後,軟體必須讀取MMC_RES,並讀取或寫入 MMC_RXFIFO或MMC_TXFIFO 在寫入資料傳送時,卡片可能變為忙碌狀態 軟體可能會藉由寫入MMC_I_MASK暫存器與等待 MMC_I_REG[PRG_DONE]中斷來等待卡片變為不忙碌,也可啟 動與另一個卡片的溝通 資料交易之模式: – 單一區塊、多重區塊、串流模式 7-33 資料傳送(cont.) Step 1 資料寫入: MMC_RDTO,MMC_BLKLEN, MMC_NOB Step 6 寫入MMC_I_MASK與等待 MMC_I_REG[PRG_DONE]中斷 來待卡片變為不忙碌 Step 2 1.讀取MMC_RES 2.讀取MMC_RXFIFO或寫入 MMC_TXFIFO Step 5 MMC匯流排忙碌時會觸發 MMC_I_REG[DATA_TRAN_DONE] Step 3 確認MMC_STAT Step 4 1 MMC_TXFIFO未填滿設定 MMC_PRTBUF[BUF_PART_FULL] 2.設定MMC_BLKLEN來指定傳送資料 大小或大小寫入MMC_TXFIFO 7-34 資料傳送 7-35 忙碌程序 在單一區塊與多重區塊寫入操作每個資料區塊之 後,MMC控制器會自動預期一個來自卡片的忙 碌訊號 當MMC匯流排上有忙碌訊號,軟體只可傳送以 下其中之一命令: – – 傳送狀態命令(CMD13) 切斷連結命令(CMD7) 在卡片為忙碌狀態時,若軟體切斷與卡片的連結, 則會關閉忙碌訊號,而軟體可連結另一個不同的 卡片 7-36 MMC控制器操作 軟體指示卡片與控制器之間所有溝通的方向 啟動與停止時脈: – 軟體藉由停止時脈、寫入暫存器,與啟動時脈來存 取暫存器集 初始化: – – 在卡片初始化程序之前必須加入80的時脈週期 軟體藉由設定MMC_CMDAT[INIT]位元來產生80個 時脈週期 7-37 MMC控制器操作(cont.) 啟動SPI模式之程序: 1. MMC_SPI[SPI_EN] 設定為1 2. MMC_SPI[SPI_CS_EN] 設定為1 3. 設定MMC_SPI[SPI_CS_ADDRESS]來指定軟體 欲 定址的卡片,1 = CS0,0 = CS1 7-38 MMC控制器操作(cont.) 無資料命令與回應程序: – 對於基本無資料傳輸、命令,與回應交易,軟體必須: 1. 關閉時脈 2. 寫入命令索引至MMC_CMD[CMD_INDEX]位元 3. 寫入命令參數至MMC_ARGH與MMC_ARGL暫存器 4. 以適當的數值寫入MMC_CMDAT暫存器集 5. 以適當的數值寫入MMC_RESTO暫存器 6. 寫入0x1b至MMC_I_MASK來反遮蔽 MMC_I_REG[END_CMD_RES]中斷 7. 啟動時脈 7-39 MMC控制器操作(cont.) 資料傳送操作分為: – – – 單一區塊(Single Block)寫入/讀取 多重區塊(Multiple Block)寫入/讀取 串流(Stream)寫入/讀取 在寫入/讀取命令中,軟體必須先停止時脈、 設定暫存器,再啟動時脈執行操作 7-40 MMC控制器暫存器 位址 名稱 描述 0x4110 0000 MMC_TRPCL 控制MMC時脈啟動或停止。 0x4110 0004 MMC_STAT MMC狀態暫存器(唯讀)。 0x4110 0008 MMC_CLKRT MMC時脈率。 0x4110 000c MMC_SPI SPI模式控制位元。 0x4110 0010 MMC_CMDAT 指令/回應/資料順序控制。 0x4110 0014 MMC_RESTO 預期回應逾時。 0x4110 0018 MMC_RDTO 預期資料讀取逾時。 0x4110 001c MMC_BLKLEN 資料交易的區塊長度。 0x4110 0020 MMC_NOB 區塊模式,區塊的數目。 0x4110 0024 MMC_PRTBUF 局部MMC_TXFIFO FIFO寫入。 0x4110 0028 MMC_I_MASK 中斷遮罩。 0x4110 002c MMC_I_REG 中斷暫存器(唯讀)。 0x4110 0030 MMC_CMD 目前指令索引。 0x4110 0034 MMC_ARGH 目前指令參數的MSW部分。 0x4110 0038 MMC_ARGL 目前指令參數的LSW部分。 0x4110 003c MMC_RES 回應FIFO(唯讀)。 0x4110 0040 MMC_RXFIFO 接收FIFO(唯讀)。 0x4110 0044 MMC_TXFIFO 傳送FIFO(唯寫)。 7-41