NVMe · 規格與原理

NVMe Base 2.4:Boot Partitions:讀取、更新與寫入保護

00.01.Boot Partitions 提供存放開機映像的空間。這篇從「還沒建立一般 I/O 佇列時,主機如何取到開機資料」開始,再說明映像更新、選擇啟用的分割區與寫入保護。

I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。

這篇的主軸

01

取出開機映像

01-01從選擇分割區、指定讀取範圍,到把資料放入主機記憶體,理解開機讀取的完整流程。

02

更新並選擇啟用映像

02-01傳入新映像、替換分割區內容、選擇啟用分割區,各自解決不同問題。

03

保護已寫入的內容

03-01比較不同寫入保護狀態,以及重設或斷電後哪些限制仍然保留。

把主軸連起來

00.02.讀取時要選對分割區與範圍,並提供接收資料的主機記憶體;更新時則要分清傳入映像、替換內容與選擇啟用分割區。寫入保護限制的是更新行為,其狀態在不同 reset 或斷電條件下的保留方式需要另外判讀。

01 Boot 的兩條讀取路徑

將開機映像讀進主機記憶體

先認出讀取對象

01.01.Boot Partition 是開機映像的儲存空間,不是一般 I/O 命令用 NSID 選取的 namespace。讀取前要知道控制器支援的路徑、目標分割區及大小;目前啟用的分割區編號與這次想讀的目標編號可以不同。

namespace
namespace,主機透過 controller 存取的一份已格式化非揮發性容量。
NSID
Namespace Identifier,controller 用來指向 namespace 的數值 handle;identifier 不等於 namespace 物件本身。

沿 Properties 路徑組合要求

01.02.CAP.BPS 用於確認支援,BPINFO 提供大小、啟用資訊及讀取狀態。BPRSEL 的 BPID、BPROF、BPRSZ 分別選目標、起點及長度;BPMBL 的 BMBBA 指向主機接收記憶體。把來源範圍與目的位址分開畫,才不會把映像 offset 填到主機位址欄位。

offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
BMBBA
Boot Memory Buffer Base Address;BPMBL bits 63:12,低 12 bits 保留。
BPROF
Boot Partition Read Offset;BPRSEL bits 29:10,以 4 KiB 為單位;bit 30 保留。
BPRSZ
Boot Partition Read Size;以 4 KiB 為單位,不能套用 BPSZ 的單位。
BPID
Boot Partition Identifier;選取 0 或 1,與目前 active partition 分開。
CAP
Controller Capabilities,offset 00h 的 controller property,回報 queue、page size、timeout 與其他能力。

沿 log 路徑先讀表頭

01.03.使用 LID 15h 時,先以對應的 BPID 選分割區,再讀 header 中的 BPINFO。Boot Partition Data 接在 log 的表頭後面;log 內的位移與映像本身的位移有不同起點。計畫分段讀取時,先把兩個起點標在同一張資料配置圖上。

LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。

確認資料已經可用

01.04.Properties 路徑依 BRS 等狀態判斷讀取是否完成;Get Log Page 路徑則由該命令的 CQE 判斷結果。主機已配置好 buffer,只代表有接收位置,不能據此認定內容已完成更新。

BRS
Boot Read Status;00b 未請求、01b 進行中、10b 成功、11b 錯誤。
CQE
Completion Queue Entry,CQ 中的一筆完成結果資料結構。
來源:Base 2.4 §8.1.3 · Base 2.4 §8.1.3.1 · Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, 文件頁 586-587, PDF 頁 612-613

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, 文件頁 283-284, PDF 頁 309-310

讀取 Boot 資料時,來源與目的各有自己的座標說明性例子:BPSZ=2,每個分割區有 256 KiB;選 BP1、BPROF=1、BPRSZ=2,表示從 BP1 的 4 KiB 位置取 8 KiB。BMBBA 指向 4 KiB 對齊的主機接收位址;BRS=10b 才表示這條 Properties 路徑讀取成功。LID 15h 是另一條 Admin 路徑,含 16-byte header,不能沿用同一個 log offset 起點。BP1 · 256 KiB來源起點:1 × 4 KiB本次長度:2 × 4 KiBHost memory目的:BMBBA << 12接收空間至少 8 KiB8 KiBBRS:01b 讀取中 → 10b 成功11b 錯誤:buffer 內容未定義
說明性例子:BPSZ=2,每個分割區有 256 KiB;選 BP1、BPROF=1、BPRSZ=2,表示從 BP1 的 4 KiB 位置取 8 KiB。BMBBA 指向 4 KiB 對齊的主機接收位址;BRS=10b 才表示這條 Properties 路徑讀取成功。LID 15h 是另一條 Admin 路徑,含 16-byte header,不能沿用同一個 log offset 起點。
Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
BPSZ
Boot Partition Size;每單位 128 KiB。
Host
主機;執行作業系統並送出 NVMe 命令的一端。

把流程對回規格條件

01.06.Boot Partitions 是選用功能;支援時有兩個等大的 partition,ID 為 0h、1h。Host 可在未建立 queues、未啟用 controller 時透過 properties 讀取。

controller
controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
來源:Base 2.4 §8.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612

01.07.Host 先檢查 CAP.BPS、BPINFO 的 active ID/size,再配置連續 buffer 與 BPMBL,確認沒有讀取進行中後寫入 BPRSEL。BRS=01b 表示傳輸中,10b 表示成功,11b 表示錯誤;讀取中不得 reset、shutdown 或改動 transport-specific properties。

來源:Base 2.4 §8.1.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, 文件頁 586-587, PDF 頁 612-613

01.08.LID 15h 以 CDW10.LSP 的 BPID 選 partition,回傳 16-byte header 與其後的資料;BPSZ 以 128 KiB 計。此 log 讀取不改變 BPINFO、BPRSEL 或 BPMBL properties。

CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。
LSP
Log Specific Field,意義由所選 log page 定義的 command selector。
來源:Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, 文件頁 283-284, PDF 頁 309-310

Boot 的兩條讀取路徑
讀取路徑或欄位從哪裡取得資料或狀態操作環境與單位
PropertiesBRS 回報讀取狀態不要求 CC.EN=1
LID 15h16-byte header + data由 Admin command CQE 判斷命令結果
BPID選取讀取 partition不等於 active ID
BPSZ每單位 128 KiB不是 bytes
CC
Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。
EN
Enable,CC 中控制 controller enable state 的 bit。
閱讀相關規格圖表 → Boot 的兩條讀取路徑

02 映像更新、啟用與寫入保護

更新 BP1 時,同時追蹤內容與保護狀態

把四件事分開記錄

02.01.假設目前使用 BP0,準備更新 BP1。下載新映像只把映像交給控制器;Firmware Commit 才依動作與 BPID 寫入目標;選擇 active partition 又是另一個動作。寫入保護決定目標是否允許被修改,並不直接表示哪個映像正在啟用。

用 FID 85h 只解鎖目標

02.02.假設目前由 Set Features 控制保護,且 BP1 的狀態允許變更。BP1WPS 在 bits 5:3,填 001b 要求解鎖;BP0WPS 填 000b 表示不要求改變 BP0。CDW11=(1<<3)=08h。Get Features 回覆 BP0 時會給真實狀態,不會回傳這個「不改變」要求值。

BP0WPS
Boot Partition 0 Write Protection State;FID 85h 的 bits 2:0。
BP1WPS
Boot Partition 1 Write Protection State;FID 85h 的 bits 5:3。

比較重設與斷電

02.03.在這套機制下,解鎖狀態可跨 Controller Level Reset 保留,power cycle 後回到 Write Locked。若先前設成 Write Locked Until Power Cycle,要求改變保護狀態的 Set Features 命令會被拒絕;要等 power cycle 才離開該狀態,重新上電後仍是鎖定,還需要明確解鎖才能改寫。

共享分割區要再檢查裝置配置

02.04.若 multi-domain NVM subsystem 的控制器 A、B 共享 BP0,將 BP0 設為 Write Locked Until Power Cycle 的要求會以 Feature Not Changeable 結束。這個限制針對特定狀態設定;共享分割區本身並未因此變成不可讀。解除該狀態牽涉共享控制器的同時 power cycle,不能只由其中一個控制器的重設來理解。

NVM subsystem
NVM subsystem,包含 controller、port、namespace 與非揮發性儲存資源的 NVMe 系統邊界。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。

RPMB 啟用後改走另一套控制流程

02.05.RPMB 是 Replay Protected Memory Block,提供有驗證的操作。啟用其 Boot 保護後,FID 85h 的 Get 回報 100b,保護狀態改由 RPMB 的設定操作控制。解鎖的分割區遇 Controller Level Reset 或 power cycle 會重新鎖定。保護機制不能被停用,與各分割區仍可依規定鎖定或解鎖,是兩個不同層次。

FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。
來源:Base 2.4 §8.1.3.2 · Base 2.4 §8.1.3.3 · Base 2.4 §5.2.30.1.39 · Base 2.4 §8.1.3.3.1-8.1.3.3.3 · Base 2.4 §5.2.30.1.39; 8.1.3.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 588, PDF 頁 614

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3, 文件頁 588-589, PDF 頁 614-615

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, 文件頁 513-514, PDF 頁 539-540

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1-8.1.3.3.3, 文件頁 589-594, PDF 頁 615-620

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39; 8.1.3.3.3, 文件頁 513-514,593-594, PDF 頁 539-540,619-620

Set Features 控制時的 Boot 寫入保護狀態這張圖只描述目前由 Set Features 控制、且允許使用圖中狀態的分割區。Write Unlocked 跨 Controller Level Reset 保留,但 power cycle 後回 Write Locked。Write Locked Until Power Cycle 的變更要求會被拒絕;power cycle 後回到 Write Locked,仍須明確解鎖才能更新。multi-domain 且跨控制器共享的分割區不得進入 until-power-cycle 狀態;RPMB 控制時改用另一套操作及保留規則。Write Locked禁止修改內容Write Unlocked允許依更新流程寫入Set:解鎖 001bSet:鎖定 010bWrite Locked UntilPower CycleSet:011bpower cycle → Write LockedUntil Power Cycle 中:一般 Set 變更 → Feature Not Changeable
這張圖只描述目前由 Set Features 控制、且允許使用圖中狀態的分割區。Write Unlocked 跨 Controller Level Reset 保留,但 power cycle 後回 Write Locked。Write Locked Until Power Cycle 的變更要求會被拒絕;power cycle 後回到 Write Locked,仍須明確解鎖才能更新。multi-domain 且跨控制器共享的分割區不得進入 until-power-cycle 狀態;RPMB 控制時改用另一套操作及保留規則。

把流程對回規格條件

02.07.Boot image 從開頭依序用 Firmware Image Download 傳送;將目標解鎖後,以 Firmware Commit CA=110b 寫入 BPID 指定的 partition。Host 可讀回驗證,再以 CA=111b 更新 active ID,最後重新上鎖。更新中斷可能留下新舊混合內容,因此宜先驗證再設為 active。

CA
Commit Action,Firmware Commit 中選擇 replace、activate 與 reset policy 的欄位。
來源:Base 2.4 §8.1.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614

02.08.Host 不宜在寫入 Boot Partition 時同時讀取,也不宜重疊 firmware/boot image 更新序列。單一序列宜使用同一 controller 或 Management Endpoint;跨端點提交可能使 Commit 以 Invalid Firmware Image 結束。

來源:Base 2.4 §8.1.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 588, PDF 頁 614

02.09.BPCAP 回報 Set Features 與 RPMB Boot 保護能力。只有 Set Features 機制或 RPMB 尚未啟用時由 FID 85h 控制;RPMB 保護啟用後由 RPMB 控制。同一時刻只有一套機制控制狀態,共享 partition 的所有 controllers 都須執行其保護。

BPCAP
Boot Partition Capabilities;辨識 Set Features 與 RPMB 保護機制的支援組合。
來源:Base 2.4 §8.1.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3, 文件頁 588-589, PDF 頁 614-615

02.10.BP0WPS 位於 CDW11[2:0],BP1WPS 位於 [5:3]。000b 僅用於 Set 的不改變請求;001b/010b/011b 分別為 unlocked/locked/locked until power cycle;100b 由 Get 回報 RPMB 控制,不能作為 Set 值。此 Feature 不可 save,power cycle 後預設 locked。

來源:Base 2.4 §5.2.30.1.39

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, 文件頁 513-514, PDF 頁 539-540

02.11.Set Features 的 unlocked 狀態跨 Controller Level Reset 保留,但 power cycle 後回到 locked;目前為 locked-until-power-cycle 時,Set Features 變更要求會以 Feature Not Changeable 結束;power cycle 後回到 locked,仍需明確解鎖才能寫入。RPMB 保護啟用後,unlocked 遇 power cycle 或 Controller Level Reset 會回到 locked,且啟用本身不可撤回。

來源:Base 2.4 §8.1.3.3.1-8.1.3.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1-8.1.3.3.3, 文件頁 589-594, PDF 頁 615-620

02.12.嘗試修改 locked-until-power-cycle 或 RPMB 控制中的狀態,FID 85h 以 Feature Not Changeable 拒絕。Multi-domain subsystem 中共享的 partition 不允許 locked-until-power-cycle。兩套機制並存時,只要任一 partition 在該狀態,就不得啟用 RPMB Boot 保護來繞過它。

來源:Base 2.4 §5.2.30.1.39; 8.1.3.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39; 8.1.3.3.3, 文件頁 513-514,593-594, PDF 頁 539-540,619-620

映像更新、啟用與寫入保護
目前的控制機制與狀態Controller Level Reset 後Power cycle 後
Set Features:Write Unlocked保持 Write Unlocked回到 Write Locked
Set Features:Write Locked Until Power Cycle保持原狀態回到 Write Locked,需另行解鎖才能寫入
RPMB 已啟用:Write Unlocked回到 Write Locked回到 Write Locked
閱讀相關規格圖表 → 映像更新、啟用與寫入保護

03 讀懂本篇的規格圖表

03.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。

圖表組 01 · Boot 的兩條讀取路徑 · 14 張圖表

03.02.Properties 路徑依序連接 CAP.BPS、BPINFO、BPRSEL、BPMBL:支援能力、狀態、讀取選擇、主機緩衝區。LID 15h 則分開讀 header 與 data,並以 Admin CQE 解讀這筆命令的結果。

回到本節的解釋與範例

同時標出映像座標與主機記憶體座標

03.03.Properties 路徑與 LID 15h 路徑都讀 Boot Partition,但要求與完成證據不同;兩條路徑的位移起點也應分別標示。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ABPID/BPSZ/BRS分別給 active partition、以 128 KiB 為單位的分割區大小及 Properties 讀取狀態;ABPID 不等於本次目標 BPID。目前 active 是 BP0 時,主機仍可能指定讀取 BP1。
BPID/BPROF/BPRSZBPID 選目標分割區;BPROF 與 BPRSZ 分別以 4 KiB 為單位指定起點與讀取量。先用起點加長度檢查未超出 BPSZ,再提供主機接收位置。
BMBBA指向接收開機資料的主機記憶體;與 HMB Feature 借給控制器的記憶體用途不同。圖上標為 Host Memory Buffer 的接收區,不代表必須先啟用 Host Memory Buffer Feature。
LID 15h 的 BPID/BPINFO/BPDlog 先有表頭,再有 Boot Partition Data;Get Log Page 的 offset 從 log 起點計算。讀映像 offset 0 的資料時,需考慮它在 log 內位於表頭之後,不能直接把兩種 offset 畫在同一起點。
ABPID
Active Boot Partition ID;指出目前選為啟動映像的 partition。
HMB
Host Memory Buffer,由 host 配置並在 enable 期間交由 controller 專用的 volatile memory ranges。
來源:Base 2.4 §5.2.13.1.21 · Base 2.4 §8.1.3.1 · Base 2.4 §3.1.4.13 · Base 2.4 §3.1.4.14 · Base 2.4 §3.1.4.15

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, Figure 679, 文件頁 587, PDF 頁 613

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.13, Figure 49, 文件頁 69, PDF 頁 95

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 50, 文件頁 69-70, PDF 頁 95-96

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.15, Figure 51, 文件頁 70, PDF 頁 96

Base Figure 279 · Boot Partition Log Specific Parameter Field

一句話重點

Base279-1Boot Partition log 的參數用 BPID 選要讀的分割區。

來源:Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309

用例子讀懂

Base279-2同一 LID 配 BPID=0 或 1 會選到不同 partition;LID 指紀錄種類,BPID 才指此次目標。

Base Figure 280 · Boot Partition Log Page

一句話重點

Base280-1Boot Partition log 先回報 header,再提供分割區資料。

來源:Base 2.4 §5.2.13.1.21

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310

用例子讀懂

Base280-2讀回 buffer 後先找 BPD 的開始位置;不能把 header 內容當成開機映像的第一段 bytes。

Base Figure 679 · Boot Partition Overview

一句話重點

Base679-1Boot Partition 圖連起裝置分割區與主機接收 buffer。

來源:Base 2.4 §8.1.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, Figure 679, 文件頁 587, PDF 頁 613

用例子讀懂

Base679-2沿一次讀取追 Partition 0 或 1 到主機記憶體的資料方向,分清來源、讀取選擇與目的位址。

有 Boot 讀取能力,不等於所有保護機制都支援

03.04.CAP.BPS 決定 Boot Partitions 能力;LPA 與 BPCAP 再分別補充 log 讀取及保護方式。multi-domain 是共享配置的判斷條件,不是一種保護狀態。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CAP.BPS/LPA 的 Boot Partition Log Page Support先確認 Boot 功能,再確認是否能透過 LID 15h 取得內容。CAP.BPS=1 不能單獨代替 LPA 的 log 支援檢查。
BPCAP回報 Set Features 與 RPMB Boot 保護能力;啟用哪一個機制還要看目前控制狀態。同時支援兩套機制時,不是把兩個解鎖命令都送一次;先確認現在由誰控制。
CTRATT.MDS/分割區共享關係MDS=1 且分割區跨控制器共享,才形成這裡的 until-power-cycle 限制條件。A、B 共享 BP0 的 multi-domain subsystem:不得把 BP0 設為 Write Locked Until Power Cycle;正常讀取 BP0 並未因此被禁止。
MDS
Multiple Domain Subsystem,指出 NVM subsystem 是否包含多個 domains 的能力 bit。
來源:Base 2.4 §3.1.4.1 · Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408

Base Figure 36 · Offset 0h: CAP - Controller Capabilities

一句話重點

Base36-1CAP 描述控制器能力,主機設定必須落在其支援範圍。

來源:Base 2.4 §3.1.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84

用例子讀懂

Base36-2設定記憶體頁大小前,先比對 MPSMIN 與 MPSMAX;主機偏好的頁大小不一定就是控制器接受的大小。

Base Figure 49 · Offset 40h: BPINFO - Boot Partition Information

一句話重點

Base49-1BPINFO 把啟用分割區、讀取狀態與大小放在一起回報。

來源:Base 2.4 §3.1.4.13

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.13, Figure 49, 文件頁 69, PDF 頁 95

用例子讀懂

Base49-2主機要求讀 Partition 1 後,BRS 用來觀察讀取狀態;ABPID 仍是啟用分割區資訊,不能拿它替代此次讀取選擇。

Base Figure 50 · Offset 44h: BPRSEL - Boot Partition Read Select

一句話重點

Base50-1BPRSEL 指定 Boot Partition 讀取的目標、起点與長度。

來源:Base 2.4 §3.1.4.14

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 50, 文件頁 69-70, PDF 頁 95-96

用例子讀懂

Base50-2要讀 Partition 1 的一段資料,BPID 選 1,BPROF 與 BPRSZ 按欄位單位設定;三者合起來才是一個完整讀取範圍。

Base Figure 51 · Offset 48h: BPMBL - Boot Partition Memory Buffer Location

一句話重點

Base51-1BPMBL 提供接收 Boot Partition 資料的主機記憶體位置。

來源:Base 2.4 §3.1.4.15

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.15, Figure 51, 文件頁 70, PDF 頁 96

用例子讀懂

Base51-2BPRSEL 選的是裝置上的來源區段,BPMBL 選的是主機目的 buffer;相同的數字在兩處代表不同位址空間。

同一筆 Get Log Page 的目標、範圍與資料位置

03.05.讀 log 先選 LID 與命令集,再解讀該 log 的 LSP/LSI;NUMD 決定本次量,LPO 決定本次起點,DPTR 決定主機接收位置。

DPTR
Data Pointer,SQE 中指出 command data buffer 的欄位。
NUMD
Number of Dwords,0's-based transfer dword count;實際 bytes = (NUMD + 1) × 4。
LSI
Log Specific Identifier,意義由所選 log page 定義的 identifier。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
LID/CSI/LSP/LSILID 與 CSI 選紀錄種類,LSP、LSI 的含義由所選 log 定義。LSP 在 Boot 中可含 BPID,在 Telemetry 中有建立 capture 的控制位元,不能跨 log 照搬。
NUMDU/NUMDL先合成 NUMD=(NUMDU<<16)|NUMDL,再計算 (NUMD+1)×4 bytes。512 bytes 對應 NUMD=127;高低部分不能各自加 1。
LPOU/LPOL/OT高低欄位組成 64-bit offset;OT 決定按 byte 位移或項目索引解讀。byte-offset 模式下,從 512-byte 表頭後開始讀資料要保留起點差異;index 模式不能直接使用同一個 byte 數。
DPTR/RAEDPTR 給接收記憶體,RAE 控制相關事件的保留行為。分段讀取先準備每段 buffer,再在恰當時機確認事件,避免中途改變可取得的紀錄。
LSUPP/LID Specific ParameterSupported Log Pages 回報實際支援及 log 專屬能力。規格列有某個 LID,不代表此裝置一定實作;先查支援再使用進階選項。
NUMDL
Number of Dwords Lower,Get Log Page 的 NUMD 低 16 bits。
NUMDU
Number of Dwords Upper,Get Log Page 的 NUMD 高 16 bits。
index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
LPOL
Log Page Offset Lower,Get Log Page byte offset 的低 32 bits。
LPOU
Log Page Offset Upper,Get Log Page byte offset 的高 32 bits。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
RAE
Retain Asynchronous Event;Telemetry 收集中用 1 保留通知狀態,完成後用 0 acknowledgement。
來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242

Base Figure 203 · Get Log Page - Data Pointer

一句話重點

Base203-1Get Log Page 的 DPTR 指向主機接收 log 資料的空間。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239

用例子讀懂

Base203-2同樣是 512-byte buffer,LID 不同會得到不同結構;DPTR 只提供位置,不會決定 log 類型。

Base Figure 204 · Get Log Page - Command Dword 10

一句話重點

Base204-1Get Log Page 的 CDW10 選擇 log、低位長度及相關控制參數。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239

用例子讀懂

Base204-2讀取 512 bytes 共 128 Dwords,長度原始值為 127;同時填正確 LID,才能知道回來的是哪一份紀錄。

Base Figure 206 · Get Log Page - Command Dword 12

一句話重點

Base206-1LPOL 是 log offset 的低 32 bits,單位還要看 offset 模式。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

用例子讀懂

Base206-2byte-offset 模式下讀下一段 512 bytes,LPOL 設 512;index-offset 模式則以項目索引解釋,數字 512 不再表示相同位置。

index-offset
index-offset 對比;index 選取項目,offset 計算位置。例如從 0 起算的 Format Index=2 選第 3 個格式,而 OFST=256 表示從 image 起點位移 256 個 Dwords。

Base Figure 208 · Get Log Page - Command Dword 14

一句話重點

Base208-1CDW14 的 CSI、OT、UIDX 決定命令集、offset 模式與相關選擇。

UIDX
UUID Index,指向 UUID List 位置的 index;0 表示未指定 UUID。
來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

用例子讀懂

Base208-2相同 LPOL=4,在 byte-offset 與 index-offset 下表示不同事物;先看 OT 才能正確解讀位置。

Base Figure 209 · Get Log Page - Log Page Identifiers

一句話重點

Base209-1LID 清單把紀錄編號與其命令集、範圍連在一起。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242

用例子讀懂

Base209-2先依本篇所需的紀錄選取清單中的對應列,再看 CSI 與作用範圍;編號只選紀錄種類,完整欄位排列仍到該 log 的結構表閱讀。

圖表組 02 · 映像更新、啟用與寫入保護 · 27 張圖表

03.06.保護狀態表先選定 FID 85h 或 RPMB 控制,再沿「目前狀態→允許的操作→重設/斷電後狀態」閱讀。RPMB frame 與訊息流程應配對看,分清要求、回應、計數器和驗證資料各自的位置。

回到本節的解釋與範例

把保護機制、分割區狀態與操作結果分開

03.07.先判斷目前由 Set Features 或 RPMB 控制,再選 BP0 或 BP1。讀值、要求變更、重設後保留與驗證操作分別有自己的規則。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
BP0WPS bits 2:0/BP1WPS bits 5:3兩個 3-bit 欄位獨立描述分割區狀態。只要求解鎖 BP1 並保留 BP0,CDW11=(001b<<3)|000b=08h。
000b/001b/010b/011b/100b依序為 Set 不改變、解鎖、鎖定、鎖到 power cycle,以及 Get 回報 RPMB 控制;不是所有編碼都能同時用於 Set 與 Get。Get 不回 000b;Set 指定 100b 會是 Invalid Field in Command。
Controller Level Reset/power cycleSet Features 的解鎖可跨 controller reset;power cycle 會回 locked。RPMB 啟用後,兩種事件都會使已解鎖分割區重新鎖定。要恢復寫入,先看是哪個機制控制,再採用對應的解鎖操作。
Write Locked Until Power Cycle/CTRATT.MDS/共享關係目前狀態與裝置配置一起限制是否可變更;multi-domain 且跨控制器共享的分割區禁止使用此狀態。A、B 共享 BP0,將 BP0 設 011b 的要求會回 Feature Not Changeable;不能以只重設 A 來解除。
RPMB Enable/各分割區 Write Protection bits啟用機制與分割區鎖定是不同層次;啟用後不能停用機制,但可依驗證流程變更各分割區保護狀態。FID 85h 回 100b 表示應改走 RPMB 控制,不表示所有分割區永遠不可解鎖。
Request/Response/Result/Counter/Nonce/MAC訊息類型選操作,Result 回報結果,Counter 與 Nonce 配合驗證避免把舊回覆當成新操作結果。Configuration Write 後依流程取回結果;Configuration Read 要核對驗證資訊,不能只看到有資料就認定操作成功。
來源:Base 2.4 §5.2.30.1.39 · Base 2.4 §8.1.3.3.1 · Base 2.4 §8.1.3.3.2 · Base 2.4 §8.1.3.3.3 · Base 2.4 §8.1.24 · Base 2.4 §8.1.24.2.1 · Base 2.4 §8.1.24.2.2 · Base 2.4 §8.1.24.3 · Base 2.4 §8.1.24.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 680, 文件頁 589, PDF 頁 615

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 681, 文件頁 590, PDF 頁 616

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 682, 文件頁 591, PDF 頁 617

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 683, 文件頁 591, PDF 頁 617

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.3, Figure 684, 文件頁 593, PDF 頁 619

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 756, 文件頁 691-692, PDF 頁 717-718

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 757, 文件頁 692-693, PDF 頁 718-719

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 758, 文件頁 693, PDF 頁 719

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 760, 文件頁 694, PDF 頁 720

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.1, Figure 761, 文件頁 695-696, PDF 頁 721-722

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.2, Figure 762, 文件頁 696, PDF 頁 722

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.3, Figure 765, 文件頁 700, PDF 頁 726

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.4, Figure 766, 文件頁 701, PDF 頁 727

Base Figure 542 · Boot Partition Write Protection Config - Command Dword 11

一句話重點

Base542-1Boot Partition Write Protection Config 分別設定兩個分割區的保護狀態。

來源:Base 2.4 §5.2.30.1.39

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540

用例子讀懂

Base542-2Partition 0 鎖定而 Partition 1 未鎖定是可分別描述的配置;不能只用一個「Boot 已鎖」句子忽略目標分割區。

Base Figure 680 · Set Features Boot Partition Write Protection State Machine Model

一句話重點

Base680-1Set Features 保護狀態圖用狀態與轉移說明何時能解除鎖定。

來源:Base 2.4 §8.1.3.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 680, 文件頁 589, PDF 頁 615

用例子讀懂

Base680-2Write Locked 與 Write Locked Until Power Cycle 不能同樣用一般解鎖要求處理;先辨識目前狀態,再沿允許箭頭走。

Base Figure 681 · Set Features Boot Partition Write Protection State Definitions

一句話重點

Base681-1Set Features 保護狀態定義補上 reset 與斷電的影響。

來源:Base 2.4 §8.1.3.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 681, 文件頁 590, PDF 頁 616

用例子讀懂

Base681-2比較 Controller Level Reset 與 power cycle 後的鎖定狀態,不能只說「重開機會解鎖」而不交代是哪一種事件。

Base Figure 682 · RPMB Boot Partition Write Protection State Machine Model

一句話重點

Base682-1RPMB 保護狀態圖另外描述認證設定的啟用與鎖定。

來源:Base 2.4 §8.1.3.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 682, 文件頁 591, PDF 頁 617

用例子讀懂

Base682-2RPMB protection 尚未啟用與已啟用但未鎖定,是不同狀態;先分清管理方式,再談是否允許寫入。

Base Figure 683 · RPMB Boot Partition Write Protection State Definitions

一句話重點

Base683-1RPMB 保護狀態定義說明其保存及控制方式。

來源:Base 2.4 §8.1.3.3.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 683, 文件頁 591, PDF 頁 617

用例子讀懂

Base683-2與 Figure 681 並排比較時,看相同 reset 是否保留同一種狀態,不因兩張表都有 Locked 就當成完全等效。

Base Figure 684 · Boot Partition Write Protection State Machine Model

一句話重點

Base684-1整體 Boot 保護模型說明 Set Features 與 RPMB 狀態如何共同決定結果。

來源:Base 2.4 §8.1.3.3.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.3, Figure 684, 文件頁 593, PDF 頁 619

用例子讀懂

Base684-2兩種來源的狀態不同時,先按圖判斷目前由哪一套控制關係生效,不能直接把兩個數值取較大者當最終狀態。

從下載片段走到指定 Boot Partition

03.08.這裡只使用 Firmware Download/Commit 與 Boot 更新有關的分支。下載的來源記憶體、完整映像中的位置、目標分割區與啟用選擇是不同座標。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR/NUMD/OFST資料指標指本次主機 buffer;NUMD 是傳輸 Dword 數減 1;OFST 是完整映像中的 Dword 位移。傳 4096 bytes 用 NUMD=1023,接續下一段的 OFST 增加 1024。
CA=110b/BPID將下載內容替換指定 Boot Partition 的內容,仍需滿足寫入保護、映像與下載順序等要求。BPID=1 選 BP1;若它仍受寫入保護,不能因 Download 成功就推論 BP1 已被改寫。
CA=111b/BPID/ABPID選 active Boot Partition 是另一個 Commit 動作,與替換內容分開。先替換 BP1 再選它為 active;讀回 ABPID 確认啟用選擇,與讀回映像核對內容是不同觀察。
MUD/命令專屬狀態完成資訊需按動作與能力判讀;Boot Partition Write Prohibited、Invalid Firmware Image 與下載 Overlapping Range 分別針對不同條件。同樣未完成預期更新,可能是分割區保護、映像驗證或傳輸範圍問題,不能全歸為「映像壞掉」。
Dword
Dword(Double word);32 bits,也就是 4 bytes。對比 word=16 bits;例如 zero-based dword count=3 代表 4 個 Dwords,也就是 16 bytes。
OFST
Offset,Firmware Image Download 中以 dword 為單位的 image-relative offset。
MUD
Multiple Update Detected,completion 中指出 controller 偵測到 overlapping firmware update sequence 的 bit。
來源:Base 2.4 §5.2.9 · Base 2.4 §5.2.9.1 · Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 193, 文件頁 206, PDF 頁 232

Base Figure 187 · Firmware Commit - Command Dword 10

一句話重點

Base187-1Firmware Commit 的 CA 選動作,FS 或 BPID 指相關目標。

FS
Firmware Slot,Firmware Commit 中選擇目標 slot 的欄位。
來源:Base 2.4 §5.2.9

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229

用例子讀懂

Base187-2更新 Boot Partition 時先按 CA 選替換或啟用相關動作,再看 BPID;不要把一般 firmware slot 的 FS 當成 boot partition 編號。

Base Figure 756 · RPMB Device Configuration Block Data Structure

一句話重點

Base756-1RPMB Device Configuration Block 保存 Boot 保護的設定資訊。

來源:Base 2.4 §8.1.24

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 756, 文件頁 691-692, PDF 頁 717-718

用例子讀懂

Base756-2讀到 protection enable 與 protection state 時要分開理解:啟用管理機制與把特定 partition 鎖定不是同一欄位。

Base Figure 765 · RPMB - Authenticated Device Configuration Block Write Flow

一句話重點

Base765-1Authenticated Configuration Write 把計數器、寫入與結果確認串成流程。

來源:Base 2.4 §8.1.24.3

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.3, Figure 765, 文件頁 700, PDF 頁 726

用例子讀懂

Base765-2主機準備認證寫入後,仍按流程取得 operation result;不能把資料已送達當成保護設定已更新。

Base Figure 766 · RPMB - Authenticated Device Configuration Block Read Flow

一句話重點

Base766-1Authenticated Configuration Read 以本次 nonce 與認證資訊確認讀取結果。

來源:Base 2.4 §8.1.24.4

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.4, Figure 766, 文件頁 701, PDF 頁 727

用例子讀懂

Base766-2讀到 Boot protection 狀態後,先確認回覆屬於這次要求,再用它判斷是否允許更新分割區。

Base Figure 188 · Firmware Commit - Completion Queue Entry Dword 0

一句話重點

Base188-1Firmware Commit 回覆中的旗標描述特定更新偵測結果。

來源:Base 2.4 §5.2.9.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230

用例子讀懂

Base188-2命令完成後,仍應逐個解讀 MUD 等回覆位元;不能用一個非零 DW0 直接推論「韌體版本已切換」。

Base Figure 189 · Firmware Commit - Command Specific Status Values

一句話重點

Base189-1Firmware Commit 狀態區分映像、slot 與需要重設等條件。

來源:Base 2.4 §5.2.9.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231

用例子讀懂

Base189-2回覆需要 reset 的啟用條件,與 Invalid Firmware Image 是不同結果;前者需要安排流程,後者先檢查映像。

Base Figure 190 · Firmware Image Download - Data Pointer

一句話重點

Base190-1Firmware Image Download 的 DPTR 指向此次傳入的映像區段。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231

用例子讀懂

Base190-2分兩次傳映像時,第二次 DPTR 可以指另一段主機 buffer;映像內的目的偏移另由 OFST 指定。

Base Figure 191 · Firmware Image Download - Command Dword 10

一句話重點

Base191-1Firmware Download 的 NUMD 以 Dwords 且從零起算表示長度。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231

用例子讀懂

Base191-2傳入 4096 bytes 時共有 1024 Dwords,NUMD=1023;若直接填 4096,單位及編碼都會錯。

Base Figure 192 · Firmware Image Download - Command Dword 11

一句話重點

Base192-1Firmware Download 的 OFST 指定映像中的 Dword 偏移。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232

用例子讀懂

Base192-2接續前面 4096 bytes 的區段,OFST=1024;它不是主機記憶體位址,也不是接續區段的 byte 長度。

Base Figure 193 · Firmware Image Download - Command Specific Status Values

一句話重點

Base193-1Overlapping Range 狀態指出傳入的映像區段發生不允許的重疊。

來源:Base 2.4 §5.2.10

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 193, 文件頁 206, PDF 頁 232

用例子讀懂

Base193-2第一段覆蓋前 4096 bytes,第二段卻又從 byte 2048 開始時,需要按下載規則檢查重疊,不能只核對兩個 buffer 各自長度。

查能力、讀取值與寫入值的區別

03.09.FID 指功能,Get 的 SEL 指要查哪一種資訊,Set 的 SV 指是否要求保存。支援能力回覆的 bits 與功能值是不同結構。

SEL
Select,Get Features 用來選 current、default、saved 或 supported-capabilities view 的欄位。
SV
Save,Set Features 要求 controller 同時保存所設定 value 的 bit。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
FID/UIDX/DPTRFID 選功能,必要時 UIDX 協助選 UUID,DPTR 傳輸該功能所需的資料結構。不是每個 Feature 都只靠 CQE DW0 回覆;有 buffer 的功能還需讀其資料格式。
SEL=000b/001b/010b/011b分別要求目前值、預設值、保存值、支援能力。要確認裝置現在採用什麼值,應讀目前值;保存值不等於正在使用的值。
CHANG/NSSPEC/SVBL → SV能力分別指出可變更、是否與 namespace 有關、可否保存;SV 是主機的保存要求。SVBL=0 時提出保存要求可能被拒絕;Set 成功也不能一律推論跨 power cycle 保留。
NSSPEC
Namespace Specific,指出 Feature 是否具有 per-namespace scope 的 capability bit。
CHANG
Changeable,指出 Feature value 是否可由 Set Features 變更的 capability bit。
SVBL
Saveable,supported-capabilities result 中指出 Feature 是否可保存的 bit。
UUID
Universally Unique Identifier,128-bit identifier;其實際關聯範圍仍由使用它的資料結構決定。
來源:Base 2.4 §5.2.12 · Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485

Base Figure 198 · Get Features - Command Dword 10

一句話重點

Base198-1Get Features 的 FID 選功能,SEL 選要查目前值、預設值等資訊。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236

用例子讀懂

Base198-2查 current 與查 saved 可以回不同內容;兩次 FID 相同不表示查詢完全相同。

Base Figure 199 · Get Features - Command Dword 14

一句話重點

Base199-1Get Features 的 UIDX 在使用 UUID 選擇時提供索引。

來源:Base 2.4 §5.2.12

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236

用例子讀懂

Base199-2UIDX 是 UUID List 中的位置,不是把 128-bit UUID 直接塞進命令欄位;使用前先確認該索引對應誰。

Base Figure 338 · Identify - Identify Controller Data Structure, I/O Command Set Independent

一句話重點

Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408

用例子讀懂

Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。

Base Figure 464 · Set Features - Command Dword 10

一句話重點

Base464-1Set Features 的 FID 選功能,SV 表示是否要求保存。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483

用例子讀懂

Base464-2主機要求 SV=1 前先確認 Feature 可保存;設定成功與重設後仍保留,是需要分別核對的行為。

Base Figure 465 · Set Features - Command Dword 14

一句話重點

Base465-1Set Features 的 UIDX 用於相應 UUID 關聯的選擇。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483

用例子讀懂

Base465-2若使用 UUID List 的某一項,先確認索引對應與適用規則;UIDX 不是 Set Features 的新 FID。

Base Figure 466 · Set Features - Feature Identifiers

一句話重點

Base466-1Set Features 的識別碼清單指引每種功能的專屬欄位。

來源:Base 2.4 §5.2.30

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485

用例子讀懂

Base466-2FID 02h 的 CDW11 是 Power Management,FID 0Ch 的相同位置是 APST;欄位位置相同不表示內容相同。

APST
Autonomous Power State Transition;依設定的閒置條件自動轉換電源狀態。

Base Figure 757 · RPMB Request and Response Message Types

一句話重點

Base757-1RPMB Message Type 分辨不同要求與回覆。

來源:Base 2.4 §8.1.24

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 757, 文件頁 692-693, PDF 頁 718-719

用例子讀懂

Base757-2Configuration Block Read 的 request 與 response 使用各自類型值;不能只因都含配置資料就當成相同訊息。

Base Figure 758 · RPMB Operation Result

一句話重點

Base758-1RPMB Operation Result 區分認證、計數器等操作結果。

來源:Base 2.4 §8.1.24

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 758, 文件頁 693, PDF 頁 719

用例子讀懂

Base758-2Authentication Failure 表示認證不成立,Counter Failure 則與計數器條件有關;兩者不是不同名稱的同一種失敗。

Base Figure 760 · RPMB Data Frame

一句話重點

Base760-1RPMB Data Frame 把訊息類型、nonce、計數器與認證資料分區放置。

來源:Base 2.4 §8.1.24

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 760, 文件頁 694, PDF 頁 720

用例子讀懂

Base760-2讀取回覆時先辨識 Message Type,再檢查該操作需要的 nonce/認證資訊;不能把所有欄位在所有操作中都視為有效。

Base Figure 761 · RPMB - Authentication Key Data Flow

一句話重點

Base761-1RPMB Key 流程描述認證金鑰設定與結果取得的次序。

來源:Base 2.4 §8.1.24.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.1, Figure 761, 文件頁 695-696, PDF 頁 721-722

用例子讀懂

Base761-2先有金鑰設定要求,再讀取相應結果;送出資料的傳輸完成不等於金鑰設定成功。

Base Figure 762 · RPMB - Read Write Counter Value Flow

一句話重點

Base762-1Read Write Counter 流程用 nonce 與認證回覆取得目前計數器。

來源:Base 2.4 §8.1.24.2.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.2, Figure 762, 文件頁 696, PDF 頁 722

用例子讀懂

Base762-2主機用本次 nonce 對照回覆,確認回覆對應這次要求;僅看到一個較大的 counter 不足以證明回覆新鮮。

學完後想一想

1. 新 boot image 已寫入 partition,下一次使用的 active partition 就已改變了嗎?

04.01.寫入與選擇 active ID 是兩個動作。CA=110b 寫入指定 partition;可讀回確認內容後,再以 CA=111b 選擇 active ID。把兩步分開,才能在切換前確認新 image。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612

2. Boot Partition 解鎖後,Controller Level Reset 一定會重新上鎖嗎?

04.02.要先知道由哪個機制控制。Set Features 的 unlocked 狀態可跨此 reset 保留,但 power cycle 會上鎖;已啟用的 RPMB 保護則在這兩種事件都會重新上鎖。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, 文件頁 513-514, PDF 頁 539-540

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1-8.1.3.3.3, 文件頁 589-594, PDF 頁 615-620