摘要: 介紹了eMMC芯片的技術(shù)特點、工作原理,以及控制器的設(shè)計方案。該設(shè)計基于Xilinx公司的Virtex6系列FPGA芯片,實現(xiàn)了控制器的設(shè)計方案,并給出了仿真結(jié)果,驗證了該設(shè)計方案的可行性。此外,該設(shè)計均采用硬件邏輯實現(xiàn),具有速度快、通用性強、可靠性高的特點。
引言
eMMC(embedded Multi Media Card)是由MMC協(xié)會所訂立的,主要針對手機、平板電腦等便攜式產(chǎn)品的內(nèi)嵌式存儲器。eMMC存儲芯片的優(yōu)勢在于將NAND Flash和主控芯片封裝成一個微型的BGA芯片,提供標準的接口并管理內(nèi)存,不需要處理復(fù)雜的Flash兼容性和管理問題,使得應(yīng)用廠商專注于產(chǎn)品開發(fā)的其他部分,從而縮短產(chǎn)品研發(fā)時間、降低研發(fā)成本。本設(shè)計是基于eMMC4.5(JESD84B45)協(xié)議,并在FPGA(XC6VLX240T)上硬件實現(xiàn),具有性能穩(wěn)定、可移植性強、通用性好的特點,用戶無需關(guān)注底層物理協(xié)議,而且操作簡單。
1eMMC工作原理
1.1初始化
① 復(fù)位進入Idle State的方式有兩種:一種是通過Power On即上電進入,另外一種是通過發(fā)送命令CMD0。復(fù)位之后所有的寄存器都復(fù)位成默認值,此時CLK需要設(shè)置成fOD的范圍,即0~400 kHz。
② 在Idle State發(fā)送命令CMD1,如果eMMC寄存器OCR回復(fù)值中的busy位為0,則上電復(fù)位仍未完成,需要一直發(fā)送命令CMD1,直到busy位為1且電壓匹配,則進入Ready State。
③ 在Ready State發(fā)送命令CMD2,如果命令發(fā)送成功,則得到CID寄存器的值,而eMMC進入Identification State,若不成功,則eMMC狀態(tài)不變。
④ 在Identification State發(fā)送命令CMD3,完成RCA地址分配,其中多片eMMC依靠分配不同的RCA地址來區(qū)分,進入Standby State,當eMMC芯片進入Standby State,不再響應(yīng)命令CMD1、CMD2和CMD3。
⑤ 在Standby State,首先發(fā)送命令CMD9,獲取設(shè)備寄存器CSD的值,可以得到如塊長度、存儲容量、最大時鐘速率等。然后發(fā)送命令CMD7,通過參數(shù)中包含設(shè)備已分配的相對地址來選定設(shè)備,進入Transfer State。
⑥ 在Transfer State發(fā)送命令CMD6,其中包含切換工作速率的參數(shù),將eMMC初始化低速時鐘切換到正常工作的高速時鐘。再次發(fā)送命令CMD6,其中包含數(shù)據(jù)位寬和單雙沿模式的參數(shù),默認模式是一位數(shù)據(jù)位寬和單沿模式,轉(zhuǎn)換數(shù)據(jù)位寬和單雙沿模式,此時eMMC停留在Transfer State,初始化工作全部完成。eMMC初始化流程圖如圖1所示。
?
圖1 eMMC初始化流程圖
1.2數(shù)據(jù)讀
eMMC初始化完成后進入數(shù)據(jù)傳輸模式(即Transfer Mode),它是eMMC的工作模式, 在此模式下可實現(xiàn)對eMMC的數(shù)據(jù)讀寫。當沒有數(shù)據(jù)傳輸時,DAT0~DAT7處于高電平狀態(tài),數(shù)據(jù)傳輸是以數(shù)據(jù)包為單位的,數(shù)據(jù)傳輸封包結(jié)構(gòu)是一位開始位0,接著是數(shù)據(jù)流,包含了數(shù)據(jù)和CRC校驗碼,最后是一位結(jié)束位1,其中數(shù)據(jù)傳輸和時鐘是同步的。數(shù)據(jù)基本的傳輸單元是Block,它的最大長度被定義在CSD中的READ_BL_LEN。
數(shù)據(jù)讀分為單塊讀和多塊讀。單塊讀操作開始時,主機先發(fā)送CMD16(SET_BLOCKLEN)設(shè)置塊長度,eMMC接收后再發(fā)送CMD17命令讀取單塊數(shù)據(jù),單塊數(shù)據(jù)讀完成后自動返回Transfer State,等待下一次讀操作。多塊讀操作開始時,主機同樣先發(fā)送CMD16設(shè)置塊長度,然后發(fā)送CMD23命令設(shè)置讀取塊個數(shù),接著發(fā)送CMD18命令開始讀取單塊數(shù)據(jù),每次單塊數(shù)據(jù)讀取完成則塊計數(shù)加1,直到塊計數(shù)等于預(yù)定塊個數(shù),多塊讀完成,返回Transfer State,進入下一輪讀過程。其中須注意命令CMD17、CMD18設(shè)置讀取塊開始地址時,地址只有32位(4 GB),對于容量小于2 GB的芯片來說,地址即為每一位字節(jié)地址,對于容量大于2 GB的芯片來說,地址為扇區(qū)地址,每個扇區(qū)為512 KB。如果想要進行局部塊讀操作,則必須事先通過發(fā)送命令CMD9查看CSD寄存器中的READ_BLK_MISALIGNED和READ_BL_PARTIAL的值是否為0,若不為0,則系統(tǒng)不允許局部塊讀,讀數(shù)據(jù)時,讀出塊大小必須為512 B或者CSD中READ_BL_LEN[83∶80]設(shè)置的值。eMMC數(shù)據(jù)讀流程圖如圖2所示。
">
?
圖2 eMMC數(shù)據(jù)讀流程圖
1.3數(shù)據(jù)寫
寫操作的數(shù)據(jù)傳輸格式與讀操作相同,均由開始位、數(shù)據(jù)、CRC校驗、結(jié)束位構(gòu)成。eMMC有嚴格的數(shù)據(jù)寫入檢查機制,通過檢查CRC校驗位來判斷接收到的數(shù)據(jù)是否正確,數(shù)據(jù)正確則允許寫入,否則將被舍棄。數(shù)據(jù)寫分為單塊寫和多塊寫。單塊寫操作開始時,主機先發(fā)送CMD16(SET_BLOCKLEN)設(shè)置塊長度,eMMC接收并響應(yīng)后,再發(fā)送CMD24命令寫入單塊數(shù)據(jù),單塊數(shù)據(jù)寫完成后自動返回Transfer Stae,等待下一次寫操作。多塊寫入方式有3種:開放式寫入、塊寫入和可靠寫入。其中前兩種方式與可靠寫入的區(qū)別在于后者具有數(shù)據(jù)的保護寫入機制:其一是新數(shù)據(jù)未寫入之前,原數(shù)據(jù)保持不變;其二是在編程過程中即使掉電數(shù)據(jù)也會保持有效。
在可靠性寫入中,所有塊長度均為512Byte,不受設(shè)置塊長度影響,可靠性寫入必須是與扇區(qū)對齊的,不能任意指定地址,如果沒有對齊將終止寫入操作。一般情況使用塊寫入方式,當多塊寫操作開始時,主機同樣先發(fā)送CMD16設(shè)置塊長度,然后發(fā)送CMD23命令設(shè)置寫入塊個數(shù),接著發(fā)送CMD25命令開始寫入數(shù)據(jù),每次單塊寫入完成則塊計數(shù)加1,直到塊計數(shù)等于預(yù)定塊個數(shù),多塊寫完成后,返回Transfer State,等待下一輪寫過程。與讀過程一樣,寫過程也分寫字節(jié)地址和寫扇區(qū)地址,如果想要局部塊寫入操作,也必須事先通過CMD9命令查看CSD寄存器中的WRITE_BLK_MISALIGNED是否為0,若不為0,則系統(tǒng)不允許局部塊寫入,塊寫入時也要注意寫入塊必須與物理地址對齊。eMMC數(shù)據(jù)寫流程圖如圖3所示。
?
圖3 eMMC數(shù)據(jù)寫流程圖
2eMMC控制器設(shè)計方案
本文設(shè)計的基于FPGA的eMMC控制器包括初始化模塊、傳輸控制模塊、時鐘模塊、命令接口模塊、數(shù)據(jù)處理模塊、緩存模塊。各模塊功能如下:
① 初始化模塊。初始化模塊的主要功能是完成對eMMC的基本配置工作(如復(fù)位、電壓匹配、RCA地址分配、時鐘切換、數(shù)據(jù)位寬設(shè)置等)。
② 傳輸控制模塊。傳輸控制模塊主要是在eMMC讀寫操作時完成讀寫命令的發(fā)送、命令響應(yīng)的對應(yīng)處理以及數(shù)據(jù)CRC校驗的比對,另外傳輸控制模塊還要與上層用戶交互。
③ 時鐘模塊。由于eMMC芯片初始化時鐘和工作時鐘速度要求不同,所以時鐘模塊要提供時鐘切換的功能,但簡單的多路選擇切換電路會產(chǎn)生毛刺,導(dǎo)致時鐘不穩(wěn)定,所以本文設(shè)計了防毛刺時鐘切換電路,電路原理圖如圖4所示。
">
?
圖4 eMMC防毛刺時鐘切換電路圖
④ 命令接口模塊。命令接口模塊的主要功能是將并行命令轉(zhuǎn)換成串行命令發(fā)送給eMMC,接收eMMC響應(yīng)的命令,并根據(jù)其響應(yīng)的結(jié)果做出相應(yīng)的處理。
⑤ 數(shù)據(jù)處理模塊。數(shù)據(jù)處理模塊的主要功能是通過eMMC的DAT接口讀寫eMMC數(shù)據(jù),并對讀寫數(shù)據(jù)進行CRC校驗。
⑥ 緩存模塊。緩存模塊是通過FPGA定制的FIFO IP核,暫存讀寫數(shù)據(jù)。
eMMC控制器各模塊之間需要相互協(xié)同工作??刂破鞴ぷ鲿r,初始化模塊發(fā)送一系列初始化命令給命令接口模塊,命令接口模塊將命令通過CMD(Inout型)信號線發(fā)送給eMMC芯片,此模塊發(fā)送命令之后就等待eMMC芯片響應(yīng),根據(jù)響應(yīng)命令來確定初始化流程狀態(tài),期間通過初始化的高速切換標志通知時鐘切換模塊切換到高速時鐘,初始化完成之后,通知用戶層可以開始進行數(shù)據(jù)傳輸;用戶層向傳輸控制模塊發(fā)送命令(如讀寫地址、讀寫塊數(shù)、讀寫屬性),然后傳輸控制模塊解析上層用戶的命令發(fā)送相應(yīng)的讀寫命令給命令接口模塊,而命令接口模塊將命令轉(zhuǎn)發(fā)給eMMC;當讀數(shù)據(jù)時,eMMC將數(shù)據(jù)通過DAT接口發(fā)送給數(shù)據(jù)處理模塊,數(shù)據(jù)處理模塊將對讀出的數(shù)據(jù)進行CRC校驗,并將eMMC響應(yīng)的CRC校驗值和數(shù)據(jù)處理模塊計算的值一起發(fā)給傳輸控制模塊,在傳輸控制模塊中對比CRC校驗值,如果一致,則讀取完成,將數(shù)據(jù)存儲到緩存模塊,然后傳輸給用戶層,否則傳輸控制模塊將重新發(fā)送讀取命令,重新讀取數(shù)據(jù),直到CRC校驗一致為止;當寫數(shù)據(jù)時,用戶層將數(shù)據(jù)暫存到緩存模塊,緩存模塊將數(shù)據(jù)傳輸給數(shù)據(jù)處理模塊并計算CRC校驗值,然后將數(shù)據(jù)封包發(fā)送給eMMC,eMMC內(nèi)部將自動對比CRC校驗值,如果一致,則寫入eMMC,否則將被舍棄,并通過命令接口反映給傳輸控制模塊,重新發(fā)送命令,直到CRC校驗值一致則寫入完成。多塊讀寫重復(fù)以上讀寫過程,直到塊數(shù)和預(yù)定的塊數(shù)一致為止。eMMC控制器框圖如圖5所示。
?
圖5 eMMC控制器框圖
3仿真驗證結(jié)果
本文在Xilinx 集成開發(fā)工具ISE14.6開發(fā)環(huán)境下,用Verilog HDL硬件編程語言實現(xiàn)eMMC控制器的總體功能以及各模塊功能,使用ISE在線邏輯分析儀Chipscope來仿真和驗證控制器功能。仿真驗證結(jié)果如圖6~圖10所示。
?
圖6 eMMC控制器初始化過程
?
?
圖7 eMMC控制器單塊讀
?
?
圖8 eMMC控制器多塊讀
?
?
圖9 eMMC控制器單塊寫
?
?
圖10 eMMC控制器多塊寫
結(jié)語
通過對eMMC的技術(shù)特點和工作原理的分析,提出了eMMC控制器的設(shè)計方案,并針對時鐘模塊提出了可靠性設(shè)計。該控制器使用Verilog HDL硬件編程語言編寫,并在Xilinx公司的Virtex6系列芯片上實現(xiàn),通過在線邏輯分析儀Chipscope在線采樣仿真,以及對比讀寫命令和讀寫數(shù)據(jù),驗證了該設(shè)計的可行性和正確性。本文設(shè)計的基于FPGA的eMMC控制器采用硬件邏輯實現(xiàn),相比傳統(tǒng)的軟件實現(xiàn)方式,具有速度快、接口簡單、靈活性強的優(yōu)勢。
?
評論
查看更多