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