7-1多媒體卡控制器7-2大綱概論MMC控制器功能說明卡片溝通協定說明MMC控制器操作MMC控制器暫存器7-3概論多媒體卡(MMC)控制器用來連接存取應用處理器的軟體與MMC堆疊主要以TheMultiMediaCardSystemSpecificationVersion2.1的標準為基礎MMC控制器支援從標準MMC或序列週邊介面(SPI)匯流排至MMC堆疊的解譯協定軟體必須指示與MMC控制器溝通的協定為MMC模式或SPI模式7-4概論(cont.)MMC控制器特徵:–資料傳送率最高可達20Mbps–1個回應FIFO(ResponseFIFO)–2個接收FIFO(DualReceiveFIFO)–2個傳送FIFO(DualTransmitFIFO)–不論MMC或SPI模式皆可支援2個MMCMMC控制器處理卡片初始化、CRC的產生與確認、命令、回復,以及資料交易7-5概論(cont.)MMC控制器包含命令與控制暫存器、回應FIFO,與資料FIFO軟體存取這些暫存器與FIFO,並且產生命令、中斷回應,與控制後續動作MMC系統互動圖7-6概論(cont.)MMC匯流排連結卡片堆疊與控制器軟體與控制器可開啟或關閉MMC時脈卡片堆疊與控制器經由命令與資料線進行連續溝通,協定所使用的訊息包含下列的符號:–命令(Command)–回應(Response)–資料(Data)7-7命令符號命令集包含卡片初始化、卡片暫存器讀取與寫入、資料傳送…等MMC控制器會在MMCMD訊號線上連續傳送命令符號位元位置4746[45:40][39:8][7:1]0寬(位元)1163271值01×××1說明起始位元傳送位元命令索引參數CRC7結束位元命令符號格式7-8回應符號為命令符號的回覆每個命令都具有特定的回應類型或是無回應類型其格式取決於回應類型與卡片模式7-9資料符號控制器與卡片之間,資料以8位元區塊做連續的傳送,速率可達20Mbps其格式依卡片的模式為MMC或SPI而有所不同串流資料1×無CRC1區塊資料0××1說明起始位元資料CRC7結束位元值11111110××說明起始位元組資料CRC16MMC資料符號格式SPI資料符號格式7-10命令符號在MMC模式中,所有的操作都包含命令符號,而大部分的命令具有一個相關聯的回應符號在雙向的MMCMD訊號中會傳送與接收命令符號與回應符號在雙向的MMDAT訊號中會傳送與接收資料符號7-11無資料符號之MMC模式操作圖有資料符號之MMC模式操作圖7-12SPI模式在SPI模式中,命令都具有命令符號與回應符號MMCMD與MMDAT訊號在SPI模式中為單向在MMCMD訊號中會寫入傳送命令符號與資料符號在MMDAT訊號中會接收回應符號與讀取的資料符號無資料符號的SPI模式操作圖7-13SPI模式寫入操作圖SPI模式讀取操作圖7-14MMC控制器功能說明概論MMC控制器訊號描述MMC控制器重置MMC卡片初始化程序MMC與SPI模式錯誤偵測中斷與時脈控制資料FIFO7-15概論軟體必須讀取與寫入MMC控制器暫存器與FIFO來初始啟動與卡片的溝通MMC控制器為軟體與MMC匯流排之間的介面,負責軟體與MMC匯流排之間的時序與協定MMC控制器包含:–控制與狀態暫存器–一個16位元的回應FIFO(ResponseFIFO)–兩個8位元的接收FIFO(ReceiveFIFO)–兩個8位元的傳送FIFO(TransmitFIFO)7-16MMC控制器訊號描述訊號名稱輸入/輸出說明MMCLK輸出MMC時脈訊號MMCMD雙向命令線MMDAT雙向資料線MMCCS0輸出晶片選擇0(僅於SPI模式中使用)MMCCS1輸出晶片選擇1(僅於SPI模式中使用)7-17MMC控制器重置只可藉由應用處理器的硬重置(hardreset)或軟重置(softreset)來重置重置之後,所有的暫存器與FIFO控制會設定為初始值7-18MMC卡片初始化程序藉由將MMC_CMDAT[INIT]位元設定為1來初始化MMC卡此功能可用來取得已插入匯流排的新卡片初始化程式期間不會觸發晶片選擇7-19MMC與SPI模式重置之後,MMC卡會處於MMC模式卡片可維持在MMC模式中,或是藉由設定MMC_SPI暫存器位元來改變為SPI模式7-20MMC模式在MMC模式中,MMCMD與MMDAT訊號為雙向的藉由MMCMD訊號可傳送與接收命令與回應符號藉由MMDAT訊號可讀取與寫入資料支援下列資料傳送模式:–單一區塊(SingleBlock)讀取/寫入–多重區塊(MultipleBlock)讀取/寫入–串流(Stream)讀取/寫入7-21SPI模式在SPI模式中,MMCMD與MMDAT線為單向的,而且只允許單一區塊資料傳送MMCMD訊號為控制器的輸出,用來傳送命令符號與寫入資料至MMC卡MMDAT訊號為控制器的輸入,用來接收來自MMC卡的回應符號與讀取資料7-22錯誤偵測MMC控制器會偵測MMC匯流排上的下列錯誤,並回報給狀態暫存器(MMC_STAT):–回應CRC錯誤:在命令回應上發生計算CRC錯誤–回應逾時:在特定的時脈數目之前還沒有開始回應–寫入資料CRC錯誤:卡片傳回資料上的CRC狀態錯誤–讀取資料CRC錯誤:資料上發生計算CRC錯誤–讀取逾時:在特定的時脈數目之前不會開始讀取資料操作–SPI資料錯誤:SPI模式內偵測出讀取資料錯誤符號7-23中斷與時脈控制MMC控制器產生中斷來發出命令序列的狀態訊號,而軟體負責遮蔽中斷、驗證中斷,並執行適當的動作MMC控制器與軟體可開啟或關閉MMC匯流排時脈(MMCLK)–MMC控制器具有一個內部頻率產生器,可啟動、停止,與劃分MMC匯流排時脈–軟體可能藉由設定MMC_STRPCL暫存器適當的位元來啟動與停止時脈有助於控制資料流來預防underrun與oveflow,也可節省電源7-24資料FIFO概論回應資料FIFO(MMC_RES)接收資料FIFO(MMC_RXFIFO)傳送資料FIFO(MMC_TXFIFO)DMA與程式I/O7-25概論包含回應資料FIFO、接收資料FIFO,與傳送資料FIFO,其控制器FIFO分別為MMC_RES、MMC_RXFIFO與MMC_TXFIFO。7-26回應資料FIFO(MMC_RES)包含控制器傳送命令之後從MMC卡所接收的回應此FIFO不包含回應CRC,CRC確認之狀態位於狀態暫存器MMC_STAT內7-27接收資料FIFO(MMC_RXFIFO)具有兩個接收資料FIFO,對軟體為唯讀在系統重置之後與所有命令程序開始時,會清除兩個FIFO與其控制成為啟動狀態FIFO在軟體與MMC匯流排之間替換(swap),在任何時候,當軟體讀取其中一個FIFO時,MMC匯流排會寫入至另一個FIFO當兩個FIFO都成為full而且資料傳送未完成時,控制器會關閉MMCLK,以預防發生overflow當時脈已關閉,來自卡片的資料傳送會停止,直到再次啟動時脈在軟體清空所連接的FIFO之後,控制器會啟動時脈來繼續執行資料傳送軟體所連接的FIFO之狀態會註冊至MMC_STAT[RECV_FIFO_FULL]位元之中7-28傳送資料FIFO(MMC_TXFIFO)具有兩個傳送資料FIFO,只可以由軟體寫入在系統重置後以及所有指令程序的開始,會將兩個FIFO和其控制清除為最初狀態FIFO在軟體與MMC匯流排之間swap,在任何時候,當軟體寫入其中一個FIFO,MMC匯流排就會讀取另一個FIFO當兩個FIFO都成為empty而且資料傳送未完成時,控制器會關閉MMCLK,以預防發生underrun當時脈已關閉,至卡片的資料傳送會停止,直到再次啟動時脈當傳送FIFO不再為空的時,MMC控制器會自動重新啟動時脈軟體所連結的FIFO之狀態會註冊到MMC_STAT[XMIT_FIFO_EMPTY]位元內7-29DMA與程式I/O軟體可能會經由DMA或程式I/O來和MMC控制器做溝通為了以DMA存取FIFO,軟體必須程式化DMA來讀取或寫入MMCFIFOCMDAT[DMA_EN]位元之設定:–1:啟動與DMA的溝通–0:啟動與程式I/O的溝通7-30卡片溝通協定說明基本、無資料、命令與回應程序資料傳送忙碌程序7-31基本、無資料、命令與回應程序(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_RESFIFO與MMC_STAT暫存器命令的結果可能會使某些卡片變為忙碌狀態軟體可能藉由寫入MMC_I_MASK暫存器並等待MMC_I_REG[PRG_DONE]中斷來等待卡片變為不忙碌,也可啟動與另一個卡片的溝通7-32基本、無資料、命令與回應程序應用處理器之MMC控制器MMC堆疊Step1停止時,Step4啟動時脈*MMC_CMDAT不論有資料是否有改變都要寫入●●●●●●●●●●●●Step2寫入0x6至MMC_1_MASKStep3MMC_CMD,MMC_ARGH,MMC_ARGL,MMC_CMDAT*,MMC_CLKRT,MMC_SPI,MMC_RESTO寫入資料Step5寫入0x7b至MMC_1_MASKStep6讀取MMC_RESFIFO和MMC_STAT7-33資料傳送(cont.)資料傳送為傳送至卡片的附加資料之命令與回應程序在啟動時脈之前,軟體必須寫入下列暫存器:–MMC_RDTO–MMC_BLKLEN–MMC_NOB啟動時脈之後,軟體必須讀取MMC_RES,並讀取或寫入MMC_RXFIFO或MMC_TXFIFO在寫入資料傳送時,卡片可能變為忙碌狀態軟體可能會藉由寫入MMC_I_MASK暫存器與等待MMC_I_REG[PRG_DONE]中斷來等待卡片變為不忙碌,也可啟動與另一個卡片的溝通資料交易之模式:–單一區塊、多重區塊、串流模式7-34資料傳送(cont.)Step1資料寫入:MMC_RDTO,MMC_BLKLEN,MMC_NOBStep21.讀取MMC_RES2.讀取MMC_RXFIFO或寫入MMC_TXFIFOStep3確認MMC_STATStep41MMC_TXFIFO未填滿設定MMC_PRTBUF[BUF_PART_FULL]2.設定MMC_BLKLEN來指定傳送資料大小或大小寫入MMC_TXFIFOStep5MMC匯流排忙碌時會觸發MMC_I_REG[DATA_TRAN_DONE]Step6寫入MMC_I_MASK與等待MMC_I_REG[PRG_DONE]中斷來待卡片變為不忙碌7-35資料傳送7-36忙碌程序在單一區塊與多重區塊寫入操作每個資料區塊之後,MMC控制器會自動預期一個來自卡片的忙碌訊號當MMC匯流排上有忙碌訊號,軟體只可傳送以下其中之一命令:–傳送狀態命令(CMD13)–切斷連結命令(CMD7)在卡片為忙碌狀態時,若軟體切斷與卡片的連結,則會關閉忙碌訊號,而軟體可連結另一個不同的卡片7-37MMC控制器操作軟體指示卡片與控制器之間所有溝通的方向啟動與停止時脈:–軟體藉由停止時脈、寫入暫存器,與啟動時脈來存取暫存器集初始化:–在卡片初始化程序之前必須加入80的時脈週期–軟體藉由設定MMC_CMDAT[INIT]位元來產生80個時脈週期7-38MMC控制器操作(cont.)啟動SPI模式之程序:1.MMC_SPI[SPI_EN]設定為12.MMC_SPI[SPI_CS_EN]設定為13.設定MMC_SPI[SPI_CS_ADDRESS]來指定軟