1. 程式人生 > 其它 >UFS 3.1協議命令集--SCSI命令

UFS 3.1協議命令集--SCSI命令

目錄

UFS 3.1協議命令集--SCSI命令

0.前言

​ 記錄一下UFS 3.1相關內容。

1.UFS協議棧

​ UFS協議和網路協議類似,也包含了應用層、傳輸層、資料鏈路層、物理層。協議棧中主要涉及到三種命令集合,第一種是用於裝置管理(device manager)的query命令,其中比較重要的就是用於配置device各個邏輯單元的容量及其相關屬性(configuration LU)。第二種是實現UFS裝置功能的命令,協議中稱其為 UFS Command Set(UCS)。按照JEDEC的想法,UCS以簡化版本的SCSI命令為基礎的情況下,使用 UFS Native Command Set擴充套件UFS協議支援的命令與功能。但是到目前為止 UFS協議自定的命令集合還沒有被提出,所以目前可以將UCS等價為SCSI命令集。此外還有一種用於任務管理(task manager

)的命令被稱為TM命令,主機使用TM命令管理已經下發的SCSI命令。

2.SCSI命令作用

2.1 查詢類

INQUIRY

​ inquiry命令用於查詢device的一些關鍵資訊,例如裝置製造商,產品名稱,FW版本號等,通常host上電啟動時會下發inquiry命令獲取裝置資訊,針對不同廠商的器件可能會使用不同的配置項。

REPORT LUNS

​ report luns命令用於像host上報當前device中使能的normal lun的lun ID,以及device中支援的well know lun 的lun ID。

READ CAPACITY

​ 讀取指定邏輯單元的容量和部分配置資訊。

REQUEST SENSE

​ request sense命令用於查詢指定的lun是否存在sense data,如果有的話會通過data in UPIU返回給主機。同時request sense命令可以清除device復位產生的UAC標記,並且命令不會報失敗(可能這才是host發request sense的主要目的)。

TEST UNIT READY

​ test unit ready命令主要用於測試指定邏輯單元是否能夠響應命令,但是實際使用場景不多。

SEND DIAGNOSTIC

​ host下發send diagnostic命令讓device執行指定的自檢操作。但是host並不能判斷device是否真的正確的執行了自檢,換句話說host無法感知自檢結果,所以對於device而言此功能可有可無。

2.2 讀寫類

PRE-FETCH

​ 主機下發pre-fetch命令,讓device將指定LBA的資料取出放在指定的buffer中。從命令的字面意思上看,host想在讓device執行預取的操作,提升後續讀命令的效能。但是host同樣無法感知device是否真的執行的pre-fetch命令。這是因為在不考慮效能的情況下,先下發預取再下發讀命令 和 直接下發讀命令對於host的結果是完全相同的。同時由於UFS裝置資源有限,可能並沒有專用的buffer用於預取命令(空閒時device GC等後臺操作仍舊會佔用buffer)。

READ

​ read命令包含read(6)/read(10)/read(16),不同的read命令LBA的定址範圍存在區別。主機下發讀命令讀取指定LBA的資料,device FW會通過FTL對映表獲得指定LBA對應的實體地址,然後讀取相應資料返回給主機。

WRITE

​ write命令包含write(6)/write(10)/write(16),不同的write命令LBA的定址範圍存在區別。主機下發寫命令修改指定LBA的資料,device將資料寫入到flash之後需要修改FTL對映表(flash無法在有資料的地址上覆蓋寫)。

UNMAP

​ 主機下發unmap命令要求device清除某個LUN中指定LBA的資料,實際上只會修改對映表。根據LU中bProvisionType的不同,unmap命令被分為erasediscard兩種操作。其中erase要求host讀取經過unmap的LBA時返回全0,而discard則返回隨機值。

FORMAT UNIT

​ 格式化指定邏輯單元,如果指定了device well know lun,則將格式化全盤。實現上與UNMAP命令相似。

SYNCHRONIZE CACHE

​ 將device中指定LBA的資料下刷到flash中,也可以將buffer中所有資料一起下刷,因為host無法預期哪些資料會快取在device buffer中。

VERIFY

​ 下發verify命令校驗指定LBA中的資料能否被正常讀出。

SECURITY PROTOCOL OUT

​ 用與下發加密類的操作。例如讀取/寫入 RPMB LUN的資料,或者配置各個邏輯單元的安全防寫。

SECURITY PROTOCOL IN

​ 用於獲取SECURITY PROTOCOL OUT命令攜帶指令的執行結果,與SECURITY PROTOCOL OUT組成一個完整的命令序列。寫入類操作需要2個SECURITY PROTOCOL OUT 加 1個SECURITY PROTOCOL IN。讀取類操作需要1個SECURITY PROTOCOL OUT和1個SECURITY PROTOCOL IN。

2.3 管理類

START STOP UNIT

​ 用於調整device的電源狀態以及指定LU的啟動與關閉。在調整device電源狀態的場景中,start stop unit命令與硬體平臺息息相關,不同的UFS裝置硬體資源不同,需要執行的操作也並不相同。可以通過query配置上電啟動時的電源狀態。

MODE SENSE

​ 用於查詢mode pages當前值/儲存值/預設值/可變值,UFS協議中支援control,caching以及read write error recovery。

MODE SELECT

​ 與mode sense配合使用,用於修改mode pages的當前值或者儲存值。可以用於配置指定LU的軟體防寫。

2.4 雜項

READ BUFFER

​ 讀取指定buffer中的資料,可以用與讀取device側的err history資訊。

WRITE BUFFER

​ 向指定buffer中寫入資料,可以用於FFU升級device FW。

​ 另外read buffer與write buffer通常更多的用於實現VCMD。