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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM