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