一、UFS簡介
隨著智能手機的快速發(fā)展,手機已經(jīng)變成了一種生活中的必需品。人們對于智能手機的要求也越來越高。卓越的手機性能可以給用戶帶來指尖跳舞的感覺。為了滿足這種需求,各大廠家對手機的CPU,內(nèi)存,存儲設(shè)備都投入了大量的研發(fā)?,F(xiàn)在CPU和內(nèi)存的發(fā)展已經(jīng)是相當(dāng)?shù)匮杆?,運行速度在成倍增長。但是傳統(tǒng)的存儲設(shè)備運行速度已經(jīng)遠遠落后于CPU和內(nèi)存。高速的CPU和內(nèi)存搭配低速的存儲設(shè)備,就像是大牛拉小車發(fā)揮不出自己的優(yōu)勢。所以對于快速存儲設(shè)備的需求尤為迫切,從而有了UFS(Universal Flash Storage)的誕生。
二、UFS與eMMC
說起UFS,必須要講講它的前輩eMMC。eMMC是一種嵌入式多媒體卡,是由JEDEC協(xié)會所制定的一種嵌入式非易失性存儲器。它采用并行傳輸技術(shù),讀寫必須分開執(zhí)行,雖然僅提供單路讀寫功能,但仍具備體積小、高度集成與低復(fù)雜度的優(yōu)勢。目前最新的 eMMC 5.1 標準,連續(xù)讀取速度約為 250MB/s。
UFS最早是由JEDEC在2011年推出的,采用全新的串行傳輸技術(shù),可同時讀寫操作。第一代 UFS 由于與當(dāng)時 eMMC 標準速度差異不大,且成本較為高昂,因此并未成功普及。直至 2014 年 UFS 2.0 標準問世后,連續(xù)讀取速度約達 800MB/s,UFS 才成為 Android 旗艦手機逐漸采用的標準配置。目前最新的 UFS 3.1 標準,連續(xù)讀取速度約為 1,700MB/s。這時,UFS的傳輸速度已遠遠領(lǐng)先于eMMC。
表1:不同協(xié)議下的理想傳輸速度
圖1:UFS 實測速度 圖2:eMMC實測速度
圖1,圖2分別是用AndroBench實測的UFS和eMMC的讀寫速率。新手機發(fā)布后,很多手機測評自媒體都會使用AndroidBench測試手機的讀寫速率來判斷其性能。對于AndroBench所測的數(shù)據(jù),業(yè)內(nèi)也是比較認可的。從圖1和圖2來看,UFS的速率是eMMC的兩倍,但也不難發(fā)現(xiàn),這一速率和理想的數(shù)據(jù)還是有差距的。理想總歸是理想,實際的速率還要結(jié)合整機的性能。
為什么UFS的速率要高于eMMC?
具體有兩方面的原因:
1. 數(shù)據(jù)信號的處理方式不同
UFS是差分串行傳輸,與單端信號傳輸相比,差分信號抗干擾能力強,能提供更寬的帶寬處理,速度更快。eMMC使用的是并行數(shù)據(jù)傳輸。并行最大的問題是速度上不去,因為一旦時鐘上去,干擾就變大,信號完整性無法保證。
圖3:UFS與eMMC的通訊方式不同
2.協(xié)議的不同
好的器件如果沒有優(yōu)良的上層軟件(firmware)就相當(dāng)于法拉利不加98號汽油,再好也跑不快。eMMC和UFS的協(xié)議都是由JEDEC制定的,器件廠家根據(jù)協(xié)議來設(shè)計器件。eMMC的通訊方式是半雙工的,讀寫不能同時進行。UFS是全雙工通訊,讀寫是可以同時進行的。簡單來說,eMMC的通訊方式是一種應(yīng)答式的,host發(fā)送數(shù)據(jù)給eMMC 需要等eMMC應(yīng)答之后才可以繼續(xù)發(fā)送數(shù)據(jù)。UFS則不一樣,host只管向UFS發(fā)送數(shù)據(jù)誰先完成誰先返回狀態(tài)不需要等待。所以,速度就會比eMMC要快,如圖3。
三、UFS架構(gòu)設(shè)計
圖4:UFS協(xié)議棧
整個UFS協(xié)議??梢苑譃槿龑樱簯?yīng)用層(UFS Application Layer(UAP)),傳輸層(UFS Transport Layer(UTP)),鏈路層(UIC InterConnect Layer(UIC))。應(yīng)用層發(fā)出SCSI命令(UFS沒有自己的命令使用的是簡化的SCSI命令),在傳輸層將SCSI分裝為UPIU,再經(jīng)過鏈路層將命令發(fā)送給Devices。下面分別介紹這三層:
1.應(yīng)用層(UFS Application Layer(UAP))
- UFS command set(UCS):使用的命令是簡化的SCSI命令(SCSI Primary Command(SPC),SCSI Block Command(SBC)),如讀寫命令等。
- Device Manager: 用于管理UFS設(shè)備、設(shè)備集操作(對設(shè)備的工作模式或狀態(tài)進行控制),設(shè)備集配置(對設(shè)備硬件屬性進行設(shè)置)。
- Task Manager:任務(wù)管理器用于管理命令隊列中的命令。比如任務(wù)管理器可以發(fā)Abort命令,終止之前發(fā)下去的命令。它也可以清空命令隊列中的所有命令。
2.傳輸層(UFS Transport Layer(UTP))
這一層是JEDEC協(xié)議制定的,其他兩層都是引用別人的協(xié)議。這一層也是UFS最重要的一層。在這一層將應(yīng)用層的SCSI命令封裝為 UFS可以識別的UPIU(固定格式的數(shù)據(jù)結(jié)構(gòu),用以傳輸應(yīng)用層發(fā)來的命令或者請求),通過互聯(lián)層到Devices實現(xiàn)端到端的數(shù)據(jù)傳輸。
圖5:UPIU的格式
最小的UPIU是32字節(jié),根據(jù)不同的Transaction Type這個大小也是不同的。0~11是12字節(jié)的幀頭。具體的UPIU類型和12字節(jié)的幀頭可以參考“JESD220D_UFS3.0”,這里就不在贅述。
3.鏈路層(UIC InterConnect Layer(UIC))
主要包括MIPI UniPro 數(shù)據(jù)鏈路層和MIPI M-PHY 物理層。其中,MIPI UniPro 數(shù)據(jù)鏈路層負責(zé)主機和設(shè)備的鏈接,它本身是一個完整的協(xié)議棧;MIPI M-PHY 物理層負責(zé)傳輸實實在在的物理信號,使用8/10編碼、差分信號串行數(shù)據(jù)傳輸。數(shù)據(jù)傳輸分高低速模式,每種模式下又有幾種不同的速度檔。
四、結(jié)語
UFS的整個架構(gòu)要比eMMC的復(fù)雜,有些知識點可以用晦澀難懂來形容。十分考驗個人的功底。UFS的整個系統(tǒng)很龐大,本文只是一個入門的介紹,如果想深入去學(xué)習(xí),建議先啃協(xié)議,后續(xù)結(jié)合協(xié)議看代碼。
作者介紹
陳豪,51CTO社區(qū)編輯,具有6年工作經(jīng)驗的高級系統(tǒng)工程師。擅長技能有Linux內(nèi)嵌匯編語言,Python,C,C++,Java,Linux內(nèi)核分析,智能機器人軟件設(shè)計等。
參考文獻:JESD220D_UFS3.0
??https://blog.csdn.net/guozhidixian/article/details/112797245??
??https://blog.csdn.net/guozhidixian/article/details/100626691??