UFS系列二 協議棧

2021-09-18 06:20:44 字數 3174 閱讀 2275

任何一種介面或者協議,都是由乙個完整的協議棧組成的。ufs也不例外。

ufs定義了乙個完整的協議棧。從上到下,依次為應用層、傳輸層、資料鏈路層和物理層。ufs使用mipi(mobile industry processor inte***ce ,移動產業處理器介面)聯盟的unipro作為資料鏈路層和mipi的m-phy作為物理層,兩者合起來稱之為互連層(ufs interconnect layer)。與之相比,pcie介面只定義了下三層(如下圖),沒有應用層。只有加上上層nvme,才構成乙個完整的ssd通訊協議。

目前ufs沒有定義自己的命令(沒有ufs native command set),使用的命令是簡化的scsi命令(基於sbc和spc),由incits t10組織定義的。關於scsi相關協議,大家可以參看相應的spec。

四層中,只有傳輸層是jedec自己定義的。所以,ufs四層中有三層是別人的,命令層是t10的,資料鏈路層和物理層是mipi的,傳輸層是jedec自己的。jedec移花接木的水平真是高。不由的想到乙個廣告:「我們不生產水,我們只是大自然的搬運工!」

ufs至今已經有五個版本,每層的版本也不盡相同。

我們依次來看看這幾層。

ufs應用層

應用層包括ufs命令集、裝置管理器(device manager)和任務管理器(task manager)。應用層處於整個協議棧的最高層,所有的命令或者請求都**於該層。它是最高統帥,所有的戰術和策略都是它制定的,然後真正去衝鋒陷陣的是將軍和士兵(應用層下面的傳輸層和內聯層)。

命令集

如前所述,目前ufs沒有定義自己的命令,使用簡化的scsi命令。

其中包括一些spc(scsi primary commands)命令:

和一些sbc(scsi block commands)命令:

ufs除了定義基本的讀寫命令,也有trim命令(unmap),還有其它一些命令。我們不打算深入其中。

裝置管理器

顧名思義,裝置管理器用以管理ufs裝置。

裝置管理器有兩個功能:一是處理裝置級操作,二是管理裝置級配置。

前者包括管理裝置功耗、設定資料傳輸相關引數、使能/禁止裝置後台操作(background operation)以及其它裝置相關操作。

後者通過維護和儲存一系列的描述符(deor,後面有章節介紹),通過諸如query請求修改或獲取裝置的配置資訊。

從ufs層次架構圖來看,裝置管理器既可以通過下層的傳輸層為其服務(通過udm_sap):

裝置管理器也可以繞過傳輸層(通過uio_sap),直接管理與控制互聯層:

裝置管理器可以通過互聯層提供的介面(uio_sap),使用一系列的原語(primitive)直接控制操作互聯層(uic)。這些原語包括重啟裝置、重啟互聯層、讓物理層進入和退出休眠模式(hibernate)等原語。

總之,裝置管理器既可以走常規渠道(通過傳輸層,以資料報upiu的形式),也可以走快速通道(傳送uic能理解的命令,原語的形式)管理和操作裝置。

任務管理器

任務管理器用以管理命令佇列中的命令。比如任務管理器可以發abort命令,終止之前發下去的命令。它也可以清空命令佇列中的所有命令。具體如下:

當某個命令超時時,系統可能發abort命令把這個命令終止掉。

ufs傳輸層

傳輸層為它上面的應用層服務。當傳輸層收到應用層命令或者請求後,它會產生upiu(ufs protocol information unit),把命令塊或者請求封裝成固定格式的資料結構,然後交由下層傳到接收端的傳輸層。和命令相關的資料、狀態,也有相應的upiu資料報。upiu是主機和裝置進行資訊交換的基本資料單元。

upiu,和sata中的fis,pcie中的tlp,是同一層次的東西,上層命令或者資料都是通過此類資料報封裝起來,然後傳輸到接收端。

如果說應用層是統帥的話,傳輸層可以認為是將軍了。

下一章節為專門介紹upiu,這裡就不細講。

ufs互聯層

ufs互聯層包括mipi unipro和m-phy,分別充當ufs資料鏈路層和物理層的角色。資料鏈路層負責主機和裝置的鏈結,物理層傳輸實實在在的物理訊號。

unipro其實不僅僅只定義了資料鏈路層,它本是也是乙個比較完整的協議棧,如下圖所示:

傳輸層(l4)支援多裝置之間的雙向連線,但ufs只支援cport0;

網路層(l3)支援通過裝置id定址多達128個裝置,但由於ufs是點到點傳輸,所以無需網路層;

資料鏈路層(l2)支援流控、crc生成和校驗、重傳機制等,ufs利用了unipro的資料鏈路層為主機和裝置之間通訊提供可靠的連線。

物理層(m-phy)使用8/10編碼、差分訊號序列資料傳輸。資料傳輸分高低速模式,每種模式下又有幾種不同的速度檔。

關於mipi unipro和m-phy,讀者可以看相關的spec,這裡不細講。

本章對ufs協議棧做了簡單介紹,下一章將會對傳輸層發起的upiu進行詳細的介紹。

UFS系列2 協議棧

任何一種介面或者協議,都是由乙個完整的協議棧組成的。ufs也不例外。ufs定義了乙個完整的協議棧。從上到下,依次為應用層 傳輸層 資料鏈路層和物理層。ufs使用mipi mobile industry processor inte ce 移動產業處理器介面 聯盟的unipro作為資料鏈路層和mipi...

UFS系列6 UFS裝置初始化和啟動

這一節講講ufs初始化。初始化和啟動包括三個階段 部分初始化,載入啟動 可選 和初始化完成。這個階段開始於上電或者裝置重啟,它涉及到整個ufs棧的初始化。這個初始化階段完成後,整個物理層 m phy 和資料鏈路層 unipro 應該被初始化好,傳輸層可以和主機互動read命令和 test unit ...

uip協議棧學習(二)

uip的記憶體管理方法 記憶體管理的實現在memb.c memb.h裡。這兩個檔案負責 uip的記憶體塊的管理,記憶體塊是由 memb 巨集宣告。記憶體從宣告的記憶體塊裡用 memb alloc 分配,用 memb free 釋放。因為命名空間的衝突,每個 c模組只能有乙個 memb 巨集宣告。先看...