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命令被分為erase
和discard
兩種操作。其中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。