1. 程式人生 > >基於eMMC芯片技術特點工作原理以及控制器的設計方案

基於eMMC芯片技術特點工作原理以及控制器的設計方案

扇區 out 靈活性 可行性 校驗碼 ali 所有 配置 用戶

摘要: 介紹了eMMC芯片的技術特點、工作原理,以及控制器的設計方案。該設計基於Xilinx公司的Virtex6系列FPGA芯片,實現了控制器的設計方案,並給出了仿真結果,驗證了該設計方案的可行性。此外,該設計均采用硬件邏輯實現,具有速度快、通用性強、可靠性高的特點。

技術分享圖片

引言
eMMC(embedded Multi Media Card)是由MMC協會所訂立的,主要針對手機、平板電腦等便攜式產品的內嵌式存儲器。eMMC存儲芯片的優勢在於將NAND Flash和主控芯片封裝成一個微型的BGA芯片,提供標準的接口並管理內存,不需要處理復雜的Flash兼容性和管理問題,使得應用廠商專註於產品開發的其他部分,從而縮短產品研發時間、降低研發成本。本設計是基於eMMC4.5(JESD84B45)協議,並在FPGA(XC6VLX240T)上硬件實現,具有性能穩定、可移植性強、通用性好的特點,用戶無需關註底層物理協議,而且操作簡單。

1eMMC工作原理

1.1初始化

系統上電後,在eMMC能進行正常讀寫之前,必須按照協議規定的步驟完成初始化。 初始化過程如下:

① 復位進入Idle State的方式有兩種:一種是通過Power On即上電進入,另外一種是通過發送命令CMD0。復位之後所有的寄存器都復位成默認值,此時CLK需要設置成fOD的範圍,即0~400 kHz。

② 在Idle State發送命令CMD1,如果eMMC寄存器OCR回復值中的busy位為0,則上電復位仍未完成,需要一直發送命令CMD1,直到busy位為1且電壓匹配,則進入Ready State。

③ 在Ready State發送命令CMD2,如果命令發送成功,則得到CID寄存器的值,而eMMC進入Identification State,若不成功,則eMMC狀態不變。

④ 在Identification State發送命令CMD3,完成RCA地址分配,其中多片eMMC依靠分配不同的RCA地址來區分,進入Standby State,當eMMC芯片進入Standby State,不再響應命令CMD1、CMD2和CMD3。

⑤ 在Standby State,首先發送命令CMD9,獲取設備寄存器CSD的值,可以得到如塊長度、存儲容量、最大時鐘速率等。然後發送命令CMD7,通過參數中包含設備已分配的相對地址來選定設備,進入Transfer State。

⑥ 在Transfer State發送命令CMD6,其中包含切換工作速率的參數,將eMMC初始化低速時鐘切換到正常工作的高速時鐘。再次發送命令CMD6,其中包含數據位寬和單雙沿模式的參數,默認模式是一位數據位寬和單沿模式,轉換數據位寬和單雙沿模式,此時eMMC停留在Transfer State,初始化工作全部完成。eMMC初始化流程圖如圖1所示。

技術分享圖片

圖1 eMMC初始化流程圖

1.2數據讀
eMMC初始化完成後進入數據傳輸模式(即Transfer Mode),它是eMMC的工作模式, 在此模式下可實現對eMMC的數據讀寫。當沒有數據傳輸時,DAT0~DAT7處於高電平狀態,數據傳輸是以數據包為單位的,數據傳輸封包結構是一位開始位0,接著是數據流,包含了數據和CRC校驗碼,最後是一位結束位1,其中數據傳輸和時鐘是同步的。數據基本的傳輸單元是Block,它的最大長度被定義在CSD中的READ_BL_LEN。
數據讀分為單塊讀和多塊讀。單塊讀操作開始時,主機先發送CMD16(SET_BLOCKLEN)設置塊長度,eMMC接收後再發送CMD17命令讀取單塊數據,單塊數據讀完成後自動返回Transfer State,等待下一次讀操作。多塊讀操作開始時,主機同樣先發送CMD16設置塊長度,然後發送CMD23命令設置讀取塊個數,接著發送CMD18命令開始讀取單塊數據,每次單塊數據讀取完成則塊計數加1,直到塊計數等於預定塊個數,多塊讀完成,返回Transfer State,進入下一輪讀過程。其中須註意命令CMD17、CMD18設置讀取塊開始地址時,地址只有32位(4 GB),對於容量小於2 GB的芯片來說,地址即為每一位字節地址,對於容量大於2 GB的芯片來說,地址為扇區地址,每個扇區為512 KB。如果想要進行局部塊讀操作,則必須事先通過發送命令CMD9查看CSD寄存器中的READ_BLK_MISALIGNED和READ_BL_PARTIAL的值是否為0,若不為0,則系統不允許局部塊讀,讀數據時,讀出塊大小必須為512 B或者CSD中READ_BL_LEN[83∶80]設置的值。eMMC數據讀流程圖如圖2所示。

技術分享圖片

">

圖2 eMMC數據讀流程圖

1.3數據寫
寫操作的數據傳輸格式與讀操作相同,均由開始位、數據、CRC校驗、結束位構成。eMMC有嚴格的數據寫入檢查機制,通過檢查CRC校驗位來判斷接收到的數據是否正確,數據正確則允許寫入,否則將被舍棄。數據寫分為單塊寫和多塊寫。單塊寫操作開始時,主機先發送CMD16(SET_BLOCKLEN)設置塊長度,eMMC接收並響應後,再發送CMD24命令寫入單塊數據,單塊數據寫完成後自動返回Transfer Stae,等待下一次寫操作。多塊寫入方式有3種:開放式寫入、塊寫入和可靠寫入。其中前兩種方式與可靠寫入的區別在於後者具有數據的保護寫入機制:其一是新數據未寫入之前,原數據保持不變;其二是在編程過程中即使掉電數據也會保持有效。

在可靠性寫入中,所有塊長度均為512Byte,不受設置塊長度影響,可靠性寫入必須是與扇區對齊的,不能任意指定地址,如果沒有對齊將終止寫入操作。一般情況使用塊寫入方式,當多塊寫操作開始時,主機同樣先發送CMD16設置塊長度,然後發送CMD23命令設置寫入塊個數,接著發送CMD25命令開始寫入數據,每次單塊寫入完成則塊計數加1,直到塊計數等於預定塊個數,多塊寫完成後,返回Transfer State,等待下一輪寫過程。與讀過程一樣,寫過程也分寫字節地址和寫扇區地址,如果想要局部塊寫入操作,也必須事先通過CMD9命令查看CSD寄存器中的WRITE_BLK_MISALIGNED是否為0,若不為0,則系統不允許局部塊寫入,塊寫入時也要註意寫入塊必須與物理地址對齊。eMMC數據寫流程圖如圖3所示。

技術分享圖片

圖3 eMMC數據寫流程圖

2eMMC控制器設計方案

本文設計的基於FPGA的eMMC控制器包括初始化模塊、傳輸控制模塊、時鐘模塊、命令接口模塊、數據處理模塊、緩存模塊。各模塊功能如下:
① 初始化模塊。初始化模塊的主要功能是完成對eMMC的基本配置工作(如復位、電壓匹配、RCA地址分配、時鐘切換、數據位寬設置等)。
② 傳輸控制模塊。傳輸控制模塊主要是在eMMC讀寫操作時完成讀寫命令的發送、命令響應的對應處理以及數據CRC校驗的比對,另外傳輸控制模塊還要與上層用戶交互。
③ 時鐘模塊。由於eMMC芯片初始化時鐘和工作時鐘速度要求不同,所以時鐘模塊要提供時鐘切換的功能,但簡單的多路選擇切換電路會產生毛刺,導致時鐘不穩定,所以本文設計了防毛刺時鐘切換電路,電路原理圖如圖4所示。

技術分享圖片

">

圖4 eMMC防毛刺時鐘切換電路圖

④ 命令接口模塊。命令接口模塊的主要功能是將並行命令轉換成串行命令發送給eMMC,接收eMMC響應的命令,並根據其響應的結果做出相應的處理。
⑤ 數據處理模塊。數據處理模塊的主要功能是通過eMMC的DAT接口讀寫eMMC數據,並對讀寫數據進行CRC校驗。
⑥ 緩存模塊。緩存模塊是通過FPGA定制的FIFO IP核,暫存讀寫數據。

eMMC控制器各模塊之間需要相互協同工作。控制器工作時,初始化模塊發送一系列初始化命令給命令接口模塊,命令接口模塊將命令通過CMD(Inout型)信號線發送給eMMC芯片,此模塊發送命令之後就等待eMMC芯片響應,根據響應命令來確定初始化流程狀態,期間通過初始化的高速切換標誌通知時鐘切換模塊切換到高速時鐘,初始化完成之後,通知用戶層可以開始進行數據傳輸;用戶層向傳輸控制模塊發送命令(如讀寫地址、讀寫塊數、讀寫屬性),然後傳輸控制模塊解析上層用戶的命令發送相應的讀寫命令給命令接口模塊,而命令接口模塊將命令轉發給eMMC;當讀數據時,eMMC將數據通過DAT接口發送給數據處理模塊,數據處理模塊將對讀出的數據進行CRC校驗,並將eMMC響應的CRC校驗值和數據處理模塊計算的值一起發給傳輸控制模塊,在傳輸控制模塊中對比CRC校驗值,如果一致,則讀取完成,將數據存儲到緩存模塊,然後傳輸給用戶層,否則傳輸控制模塊將重新發送讀取命令,重新讀取數據,直到CRC校驗一致為止;當寫數據時,用戶層將數據暫存到緩存模塊,緩存模塊將數據傳輸給數據處理模塊並計算CRC校驗值,然後將數據封包發送給eMMC,eMMC內部將自動對比CRC校驗值,如果一致,則寫入eMMC,否則將被舍棄,並通過命令接口反映給傳輸控制模塊,重新發送命令,直到CRC校驗值一致則寫入完成。多塊讀寫重復以上讀寫過程,直到塊數和預定的塊數一致為止。eMMC控制器框圖如圖5所示。

技術分享圖片

圖5 eMMC控制器框圖

3仿真驗證結果

本文在Xilinx 集成開發工具ISE14.6開發環境下,用Verilog HDL硬件編程語言實現eMMC控制器的總體功能以及各模塊功能,使用ISE在線邏輯分析儀Chipscope來仿真和驗證控制器功能。仿真驗證結果如圖6~圖10所示。

技術分享圖片

圖6 eMMC控制器初始化過程

技術分享圖片

圖7 eMMC控制器單塊讀

技術分享圖片

圖8 eMMC控制器多塊讀

技術分享圖片

圖9 eMMC控制器單塊寫

技術分享圖片

圖10 eMMC控制器多塊寫

結語
通過對eMMC的技術特點和工作原理的分析,提出了eMMC控制器的設計方案,並針對時鐘模塊提出了可靠性設計。該控制器使用Verilog HDL硬件編程語言編寫,並在Xilinx公司的Virtex6系列芯片上實現,通過在線邏輯分析儀Chipscope在線采樣仿真,以及對比讀寫命令和讀寫數據,驗證了該設計的可行性和正確性。本文設計的基於FPGA的eMMC控制器采用硬件邏輯實現,相比傳統的軟件實現方式,具有速度快、接口簡單、靈活性強的優勢。

基於eMMC芯片技術特點工作原理以及控制器的設計方案