NVMe Figures and Scenarios 02 · Commands, Data Pointers, and Completion Status

NVM Express Base 2.4NVM Command Set 1.3NVMe over PCIe Transport 1.4

LOOKUP · FIELD INTERPRETATION · SOURCE LOCATIONS

NVMe Figures and Scenarios 02 · Commands, Data Pointers, and Completion Status

Match the command using SQID/CID before decoding SCT/SC. For data-transfer problems, distinguish PRP pages from SGL addresses, lengths and descriptor types.

SQID
Submission Queue Identifier
CID
Command Identifier, unique among outstanding commands in one SQ
SCT
Status Code Type
PRP
Physical Region Page, a data-page pointer
SGL
Scatter Gather List

Follow a worked scenario through the specification

The returned data below are hypothetical. Start with the need and assumptions, follow the reading route to the relevant fields, then work through the interpretation. Explanations are visible; detailed sources can be expanded.

EXERCISE 01Does the same CID twice imply duplicate completion?

CID
Command Identifier, unique among outstanding commands in one SQ

A debugger matches commands only by CID and reports two entries with CID=12h as duplicate completions. What is the correct matching order?

Hypothetical observations and assumptions

  • Two new CQEs have SQID=2 and SQID=5, both CID=12h; each SQ has one matching outstanding command.
  • Another CQ slot has a phase different from the host’s expected phase for this traversal; memory synchronization requirements are satisfied.

Which figures connect this scenario?

This is a specification reading route. The scenario separately explains action order and wait conditions.

  1. Check whether the completion is new

    Locate the phase tag in CQE DW3 and compare it with the host’s expected phase before matching a completion.

    CQE
    Completion Queue Entry
    Base 2.4 · Figure 97 Base 2.4 · Figure 99
  2. Match SQID and CID

    Read the submission-queue identifier from DW2 and command identifier from DW3 to locate an outstanding command in that SQ.

    SQ
    Submission Queue
    Base 2.4 · Figure 98 Base 2.4 · Figure 99
  3. Return to the command and its lifecycle

    Correlate the original SQE and queue configuration, then interpret status with queue-recreation and CID-reuse timing retained.

    SQE
    Submission Queue Entry
    Base 2.4 · Figure 92 Base 2.4 · Figure 97
Follow the field interpretation

Lookup sequence: Check expected phase → read SQID/CID only from new CQEs → recover the SQE → decode SCT/SC.

SQID
Submission Queue Identifier
SQE
Submission Queue Entry
SCT
Status Code Type

Step 1CID uniqueness applies to outstanding commands within an SQ, not a controller-wide permanent sequence. Thus (SQID=2, CID=12h) and (SQID=5, CID=12h) can identify different commands.

SQ
Submission Queue

Step 2A slot with the wrong phase is not a new completion in this traversal. Scanning CID before phase can mistake previous contents for a duplicate, and the host must update expected phase on CQ wrap.

CQ
Completion Queue

Step 3Even matching SQID/CID requires lifecycle and timing context across queue recreation or later CID reuse. Preserve complete SQEs/CQEs and queue identity for reliable correlation.

Detailed source locations
  • Base 2.4 · §4.1.1 · Figure 92 · Command Dword 0 · Printed pages 139–140 · PDF 165–166
  • Base 2.4 · §4.2.1 · Figure 97 · Common Completion Queue Entry Layout – Admin and All I/O Command Sets · Printed pages 144 · PDF 170
  • Base 2.4 · §4.2.1 · Figure 98 · Completion Queue Entry: DW 2 · Printed pages 144 · PDF 170
  • Base 2.4 · §4.2.1 · Figure 99 · Completion Queue Entry: DW 3 · Printed pages 145 · PDF 171
Back to exercise index

Continue with the other scenarios

EXERCISE 02Which bit does Invalid Field identify?

CQE reports Invalid Field in Command. How do you map the Error Information location into a 64-byte SQE?

CQE
Completion Queue Entry

Hypothetical observations and assumptions

  • SQID/CID identify the same command; Error Information has nonzero ECNT and a valid location, BYTLOC=52, BITLOC=6.
  • The original SQE, opcode, CSI and full completion status are retained.
Follow the field interpretation

Lookup sequence: Use CQE SCT/SC to identify the error class → Get Log Page LID=01h for the matching entry → map its byte offset into that command’s format.

Step 1Each Dword has four bytes, so byte 52 is the first byte of CDW13; BITLOC=6 identifies CDW13 bit six. BYTLOC is neither a Dword index nor byte 52 of the data buffer.

Step 2Next use opcode and command set to interpret CDW13 and identify the containing field. The common SQE layout supplies a location, not the command-specific meaning of that location.

Step 3A reported location identifies a parameter to inspect, not an instruction to flip that bit. It may contain a reserved value, unsupported choice or invalid combination; a correction requires the command’s conditions.

Detailed source locations
  • Base 2.4 · §5.2.13.1.2 · Figure 212 · Error Information Log Entry Data Structure · Printed pages 218–220 · PDF 244–246
  • Base 2.4 · §4.1.1 · Figure 93 · Common Command Format · Printed pages 140–142 · PDF 166–168
  • Base 2.4 · §4.2.3 · Figure 101 · Completion Queue Entry: Status Field · Printed pages 145–146 · PDF 171–172
  • Base 2.4 · §4.2.3.1 · Figure 103 · Status Code – Generic Command Status Values · Printed pages 147–150 · PDF 173–176
Back to exercise index

EXERCISE 03Is PRP2 a data page or a list address?

Why can changing transfer length from 5120 to 6144 bytes change the interpretation of PRP2 at the same starting address?

Hypothetical observations and assumptions

  • Current memory page size is 4096 bytes; PRP1 has offset=3072 within its first page and meets alignment requirements.
  • Data pages are noncontiguous; PRPs are used, with no metadata affecting these lengths.
Follow the field interpretation

Lookup sequence: Read CC.MPS for page size → calculate transfer bytes from command and format → calculate first-page space before interpreting PRP2.

Step 1The first page has 4096−3072=1024 bytes remaining. A 5120-byte transfer leaves exactly 4096 bytes, so PRP2 directly identifies the one additional data page.

Step 2A 6144-byte transfer leaves 5120 bytes requiring two additional data pages. PRP2 then points to a PRP list whose entries identify those pages, rather than directly pointing to the first subsequent data buffer.

PRP
Physical Region Page, a data-page pointer

Step 3The deciding factor is pages spanned, not whether total length exceeds a fixed constant. Moving the same 6144-byte transfer to a page-aligned start spans only two pages and changes PRP2’s role.

Detailed source locations
  • Base 2.4 · §4.3.1 · Figure 111 · PRP Entry – Page Base Address and Offset · Printed pages 158 · PDF 184
  • Base 2.4 · §4.3.1 · Figure 113 · PRP List Layout for Physically Non-Contiguous Memory Pages · Printed pages 159 · PDF 185
  • Base 2.4 · §4.3.1 · Printed pages 158–160 · PDF 184–186
  • Base 2.4 · §3.1.4.5 · Figure 41 · Offset 14h: CC – Controller Configuration · Printed pages 60–63 · PDF 86–89
Back to exercise index

EXERCISE 04Can correct SGL addresses still describe too little data?

SGL
Scatter Gather List

Buffer addresses are accessible, but the command has a transfer-length problem. What can descriptor inspection establish before reading memory?

Hypothetical observations and assumptions

  • The command requires 8192 data bytes; its complete SGL contains two valid Data Block descriptors with Length=4096 and 2048.
  • There are no Bit Bucket, metadata or additional descriptors; support and SGL arrangement are valid.
Follow the field interpretation

Lookup sequence: Compute required bytes from command and LBA format → traverse the complete SGL by descriptor type → sum Data Block lengths.

LBA
Logical Block Address

Step 1The descriptors total 6144 bytes, 2048 short of the required 8192. Address validity identifies where memory is; Length defines the described extent. One cannot substitute for the other.

Step 2A Segment descriptor’s Length describes a segment of descriptors, not payload bytes to add to the data total. Distinguish data descriptors from list-segment descriptors before summing.

Step 3The described payload is insufficient here. Retain actual SCT/SC and compare with SGL validation rules; identifying one length problem does not rule out concurrent format errors.

Detailed source locations
  • Base 2.4 · §4.3.2 · Figure 114 · SGL Validation Error Conditions · Printed pages 161 · PDF 187
  • Base 2.4 · §4.3.2 · Figure 116 · Generic SGL Descriptor Format · Printed pages 161 · PDF 187
  • Base 2.4 · §4.3.2 · Figure 119 · SGL Data Block descriptor · Printed pages 162–163 · PDF 188–189
  • Base 2.4 · §4.3.2 · Figure 121 · SGL Segment descriptor · Printed pages 163 · PDF 189
Back to exercise index

EXERCISE 05Which NUMD retrieves 3 KiB from offset 1024?

A conventional byte-offset log supports this range. Encode length and starting position separately rather than putting a byte count in NUMD.

Hypothetical observations and assumptions

  • Required length is 3072 bytes, starting 1024 bytes from the log origin; OT=0, with no special length override.
  • LID, NSID, CSI, LSP and LSI are correctly selected for the target log.
Follow the field interpretation

Lookup sequence: Get Log Page uses NUMDU/NUMDL for length and LPO with OT for position; first check for log-specific exceptions.

Step 13072÷4=768 Dwords; subtracting one gives NUMD=767=02FFh, so NUMDU=0 and NUMDL=02FFh. Encoding 3072 directly requests a different Dword count, not 3072 bytes.

Step 2With OT=0, LPO=1024 is a byte offset, yielding bytes 1024–4095. With OT=1 it is a structure index, usable only by supporting logs; the same number does not identify the same position.

Step 3Also choose RAE deliberately because retrieval may acknowledge notifications. Persistent Event Log ACT=3 has a fixed-header rule, so this ordinary length calculation does not control its returned range.

Detailed source locations
  • Base 2.4 · §5.2.13 · Figure 204 · Get Log Page – Command Dword 10 · Printed pages 213 · PDF 239
  • Base 2.4 · §5.2.13 · Figure 205 · Get Log Page – Command Dword 11 · Printed pages 214 · PDF 240
  • Base 2.4 · §5.2.13 · Figure 208 · Get Log Page – Command Dword 14 · Printed pages 214–215 · PDF 240–241
  • Base 2.4 · §5.2.13.1.14 · Figure 232 · Persistent Event Log Specific Parameter Field · Printed pages 246 · PDF 272
Back to exercise index

EXERCISE 06Does an effects flag prove that a namespace was just created?

After an operation, a tool increments its namespace count solely because NIC=1. Is that interpreting capability data or history?

Hypothetical observations and assumptions

  • Commands Supported and Effects reports CSUPP=1 and NIC=1 for the target Admin opcode.
  • A command with that opcode completed, but its action, status and updated Identify lists were not retained.
Follow the field interpretation

Lookup sequence: Get Log Page LID=05h for the correct Admin/I/O opcode table; then obtain the actual request/completion and refresh Identify where necessary.

Step 1CSUPP reports support and NIC possible namespace-inventory change. Neither is an event timeline nor proof of success or a Create action in this execution.

Step 2Use the action and completion status to decide when to refresh allocated/active inventories. Unconditionally adding one corrupts cached inventory for Delete, failed Create or non-changing operations.

Step 3Interpret I/O opcodes in the correct command set. The same numeric opcode in another table need not name the same command; effects scope and coordination rules do not replace outcome evidence.

Detailed source locations
  • Base 2.4 · §5.2.13.1.6 · Figure 217 · Commands Supported and Effects Data Structure · Printed pages 228–229 · PDF 254–255
  • Base 2.4 · §5.2.14 · Figure 336 · Identify – CNS Values · Printed pages 338–339 · PDF 364–365
Back to exercise index

01Command Dword 0

Base 2.4 · Figure 92 · Command Dword 0

§4.1.1 · Printed pages 139–140 · PDF 165–166

01.1 · UseStart a submission-entry decode with CDW0: command identity, opcode and pointer format. CID identifies an outstanding command uniquely only together with its SQID.

01.2 · Fields and relationshipsCID occupies bits 31:16, PSDT bits 15:14, FUSE bits 9:8 and OPC bits 7:0. PSDT=00b uses PRPs; 01b/10b use SGLs with different metadata-pointer interpretations. PCIe Admin commands use PRPs. FUSE identifies ordinary operations or the first/second fused command.

01.3 · Interpretation and exampleThe same DPTR bytes may represent two PRP pointers or one SGL descriptor depending on PSDT. A plausible address alone does not validate the decode; check PSDT and the command’s permitted format first.

Search terms: CDW0 · OPC · CID · PSDT · FUSE

Back to this volume’s figure index

02Common Command Format

Base 2.4 · Figure 93 · Common Command Format

§4.1.1 · Printed pages 140–142 · PDF 166–168

02.1 · UseThis is the byte map for the common 64-byte command. It separates common fields from positions whose definitions belong to individual commands.

02.2 · Fields and relationshipsCDW0 is bytes 3:0, NSID bytes 7:4, CDW2/3 15:8, MPTR bytes 23:16, DPTR bytes 39:24 and CDW10–15 63:40. In PRP mode DPTR contains PRP1/PRP2; PRP2 is reserved, a second-page pointer or a list pointer according to page-boundary crossings.

NSID
Namespace Identifier

02.3 · Interpretation and exampleWith 4 KiB pages, initial offset 512 and 8192 transferred bytes, three data pages are needed. PRP2 therefore points to a list rather than the second data page. Also, NSID=FFFFFFFFh is not a universally accepted broadcast value.

NSID
Namespace Identifier

Search terms: SQE · NSID · MPTR · DPTR · CDW10 · PRP2

Back to this volume’s figure index

03Common Completion Queue Entry Layout – Admin and All I/O Command Sets

Base 2.4 · Figure 97 · Common Completion Queue Entry Layout – Admin and All I/O Command Sets

§4.2.1 · Printed pages 144 · PDF 170

03.1 · UseUse this layout to separate command-specific results, queue information, command identity and status. The common format is at least 16 bytes; this figure describes its first 16.

03.2 · Fields and relationshipsDW0/DW1 are command-specific, not universally zero or status fields. DW2 contains SQID/SQHD; DW3 contains STATUS, P and CID. P is the phase tag identifying new entries in the circular CQ.

CQ
Completion Queue

03.3 · Interpretation and exampleGet Features may return a feature value in DW0; Namespace Management may return a new NSID there. Decode those through their command definitions and determine completion status from DW3.

Search terms: CQE · DW0 · DW1 · DW2 · DW3

Back to this volume’s figure index

04Completion Queue Entry: DW 2

Base 2.4 · Figure 98 · Completion Queue Entry: DW 2

§4.2.1 · Printed pages 144 · PDF 170

04.1 · UseWhen several SQs share a CQ, SQID identifies the source queue. SQHD tells the host which submission positions the controller has consumed.

04.2 · Fields and relationshipsSQID occupies bits 31:16 and SQHD bits 15:0. SQID plus DW3.CID identifies the command. SQHD snapshots the SQ head when the CQE was created; it is not the completed command’s SQ index.

04.3 · Interpretation and exampleSQHD=12 does not mean CID=12 completed or that the current controller head remains 12. Track reusable submission slots separately from command completion because completion order can differ.

Search terms: SQID · SQHD · CQE DW2

Back to this volume’s figure index

05Completion Queue Entry: DW 3

Base 2.4 · Figure 99 · Completion Queue Entry: DW 3

§4.2.1 · Printed pages 145 · PDF 171

05.1 · UseDuring CQ scanning, this table separates freshness from command identity and outcome. P is not a success flag.

05.2 · Fields and relationshipsCID occupies bits 15:0, P bit 16 and STATUS bits 31:17. Compare P with the phase expected for the current CQ cycle. If a CQE is written through multiple writes, its phase bit must be updated in the final write.

05.3 · Interpretation and exampleAfter confirming the expected phase, match SQID/CID and decode status. P=1 alone does not establish freshness because the expected value changes on CQ wraparound.

Search terms: CID · P · Phase Tag · STATUS · CQE DW3

Back to this volume’s figure index

06Completion Queue Entry: Status Field

Base 2.4 · Figure 101 · Completion Queue Entry: Status Field

§4.2.3 · Printed pages 145–146 · PDF 171–172

06.1 · UseFor unsuccessful completions, split status here before choosing a code table. Figure bit positions are relative to the complete CQE DW3, not an already shifted 15-bit STATUS value.

06.2 · Fields and relationshipsDNR bit 31 predicts failure of resubmitting the same command; M bit 30 indicates extra Error Information. CRD bits 29:28 selects retry delay, SCT bits 27:25 gives the category and SC bits 24:17 the code. CRD applies only with DNR=0 and ACRE=1 in Host Behavior Support.

DNR
Do Not Retry, a completion retry indication

06.3 · Interpretation and exampleDW3=8005002Ah decodes to DNR=1, SCT=0, SC=02h, P=1 and CID=002Ah: generic Invalid Field in Command. Do not interpret 02h without its category. Conversely, DNR=0 does not guarantee a successful retry.

Search terms: SCT · SC · DNR · M · CRD · ACRE

Back to this volume’s figure index

07Status Code – Status Code Type Values

Base 2.4 · Figure 102 · Status Code – Status Code Type Values

§4.2.3 · Printed pages 146 · PDF 172

07.1 · UseThis table routes a status lookup. Identical SC values can mean entirely different things under different SCT values.

07.2 · Fields and relationshipsSCT=0 is generic, 1 command-specific, 2 media/data integrity, 3 path-related and 7 vendor-specific; 4–6 are reserved. The Reference column leads to the corresponding Base section, with additional command-set definitions where applicable.

07.3 · Interpretation and exampleFor NVM commands, SC=80h with SCT=0 means LBA Out of Range; SC=80h with SCT=1 means Conflicting Attributes. A tool displaying only 80h has not provided enough information.

LBA
Logical Block Address

Search terms: SCT · Generic · Command Specific · Media · Path Related

Back to this volume’s figure index

08Status Code – Generic Command Status Values

Base 2.4 · Figure 103 · Status Code – Generic Command Status Values

§4.2.3.1 · Printed pages 147–150 · PDF 173–176

08.1 · UseFor SCT=0, look up generic opcode, field, namespace, transfer and sequencing outcomes here. This is not the complete list of I/O-specific errors.

08.2 · Fields and relationshipsValue is SC; Definition describes the condition. Common entries include 00h success, 01h invalid opcode, 02h invalid field and 0Bh invalid namespace or format. Similar names do not imply identical conditions; inactive and invalid NSIDs are distinct.

08.3 · Interpretation and exampleFor 02h, inspect command fields and their validity conditions, then use M and Parameter Error Location in Error Information to narrow the location. Not every 02h is an NSID error.

Search terms: generic status · Invalid Field · Invalid Namespace · SC

Back to this volume’s figure index

09Status Code – Command Specific Status Values

Base 2.4 · Figure 104 · Status Code – Command Specific Status Values

§4.2.3.2 · Printed pages 151–152 · PDF 177–178

09.1 · UseFor SCT=1 on Admin operations, start here and then return to the issued command’s definition. Some statuses request further action rather than fitting a simple success/hardware-failure split.

09.2 · Fields and relationshipsThe table maps SC to descriptions including invalid queue identifiers or sizes, firmware slot/image problems and activation results requiring reset. Keep the original opcode because command-specific status requires command context.

09.3 · Interpretation and exampleA firmware result requiring reset differs from an invalid image. The former calls for checking activation timing and reset scope; the latter calls for inspecting the image and commit parameters. Repeatedly submitting the same update is not a universal response.

Search terms: command specific · queue error · firmware status · SCT 1

Back to this volume’s figure index

10Status Code – Media and Data Integrity Error Values

Base 2.4 · Figure 107 · Status Code – Media and Data Integrity Error Values

§4.2.3.3 · Printed pages 154–155 · PDF 180–181

10.1 · UseFor SCT=2, separate media read/write failures from protection-check failures. A protection mismatch does not by itself establish physical NAND damage.

10.2 · Fields and relationshipsThe codes include Write Fault, Unrecovered Read and Guard, Application Tag or Reference Tag checks. Preserve the specific failure category and correlate namespace format, command check controls and expected tags.

10.3 · Interpretation and exampleFor a Reference Tag failure, inspect the starting LBA, PI type and tag configuration. Reducing it to “read error” discards useful evidence. NVM adds Compare Failure and deallocated/unwritten-block codes.

PI
Protection Information

Search terms: SCT 2 · Guard · Application Tag · Reference Tag · Media Error

Back to this volume’s figure index

11PRP Entry Layout

Base 2.4 · Figure 110 · PRP Entry Layout

§4.3.1 · Printed pages 158 · PDF 184

11.1 · UseThis bit diagram explains the split within a PRP address. An offset counts bytes from the page start, not PRP entries.

11.2 · Fields and relationshipsUpper bits hold the page base; the lower n+1 bits hold the page offset. CC.MPS determines the split:12 low bits for 4 KiB pages and 13 for 8 KiB. A fixed FFFh mask is not valid for every configuration.

11.3 · Interpretation and exampleAddress 12345000h has offset zero with 4 KiB pages but 1000h with 8 KiB pages. Its validity also depends on the PRP’s role in the command or list.

Search terms: PRP · Page Base Address · offset · CC.MPS

Back to this volume’s figure index

12PRP Entry – Page Base Address and Offset

Base 2.4 · Figure 111 · PRP Entry – Page Base Address and Offset

§4.3.1 · Printed pages 158 · PDF 184

12.1 · UseUse this definition and its following text to distinguish alignment rules for the initial data pointer, a PRP-list pointer and data-page pointers inside a list.

12.2 · Fields and relationshipsPBAO spans 64 bits. A PRP offset is at least Dword-aligned. The initial data PRP may permit a nonzero offset, while list data-page entries are page-aligned. The initial list pointer must be 8-byte-aligned; subsequent list pages are page-aligned.

12.3 · Interpretation and exampleWith 4 KiB pages, 200004h may be valid as an initial data PRP but is not page-aligned for an entry inside the list. Checking only the bottom two bits is insufficient.

Search terms: PBAO · PRP1 · PRP2 · alignment

Back to this volume’s figure index

13PRP List Layout for Physically Non-Contiguous Memory Pages

Base 2.4 · Figure 113 · PRP List Layout for Physically Non-Contiguous Memory Pages

§4.3.1 · Printed pages 159 · PDF 185

13.1 · UseThis diagram shows a PRP list describing physically noncontiguous pages. Logical data continuity does not require consecutive physical addresses.

13.2 · Fields and relationshipsEach entry is 8 bytes; data-page addresses have zero page offset. Entries are packed from entry 0. If another list page is needed, the final entry points to that page rather than to data.

13.3 · Interpretation and exampleA4 KiB list page holds 512 eight-byte entries. With chaining, the last entry is a link, leaving at most 511 data-page addresses on that page. Do not count the list-page address as transferred data.

Search terms: PRP List · page chain · non-contiguous

Back to this volume’s figure index

14SGL Validation Error Conditions

Base 2.4 · Figure 114 · SGL Validation Error Conditions

§4.3.2 · Printed pages 161 · PDF 187

14.1 · UseConsult this condition-to-status table when apparently valid SGL addresses are rejected. It checks descriptor arrangement and types, not just buffer length.

14.2 · Fields and relationshipsA Segment/Last Segment descriptor before a segment’s final position yields Invalid Number of SGL Descriptors. A link descriptor inside the final segment yields Invalid SGL Segment Descriptor. Unsupported types or type/subtype combinations yield SGL Descriptor Type Invalid.

14.3 · Interpretation and exampleIf descriptor 2 of 3 is a Segment descriptor followed by a Data Block, the link is in the wrong position. Enlarging the third descriptor’s data buffer does not repair that structural error.

Search terms: SGL validation · Invalid Number of SGL Descriptors · Invalid SGL Segment Descriptor

Back to this volume’s figure index

15Generic SGL Descriptor Format

Base 2.4 · Figure 116 · Generic SGL Descriptor Format

§4.3.2 · Printed pages 161 · PDF 187

15.1 · UseAn SGL descriptor is 16 bytes. Inspect its last byte before interpreting the first 15; the first eight bytes are not always a user-data address.

15.2 · Fields and relationshipsByte 15 is SGLID: bits 7:4 selects type and bits 3:0 subtype. Bytes 14:0 are type-specific. Common Data Block, Segment and Last Segment types are 0, 2 and 3.

15.3 · Interpretation and exampleSGLID=30h means type 3/subtype 0: its address points to the final descriptor segment rather than directly to data. Supported types still depend on Identify and PCIe applicability.

Search terms: SGLID · SGLDT · SGLDST · descriptor

Back to this volume’s figure index

16SGL Data Block descriptor

Base 2.4 · Figure 119 · SGL Data Block descriptor

§4.3.2 · Printed pages 162–163 · PDF 188–189

16.1 · UseDecode actual data-buffer extents here. For the PCIe memory-address use covered by this series, ADDR is the buffer start and LEN its length.

16.2 · Fields and relationshipsADDR is bytes 7:0, LEN bytes 11:8, bytes 12–14 reserved, and byte 15 has type 0. LEN counts bytes directly; zero describes a valid zero-length transfer. Alignment and granularity depend on Identify.SGLS.

16.3 · Interpretation and exampleLEN=4096 means 4096 bytes, without the NLB plus-one rule. If four-byte granularity is required, both ADDR and LEN must comply; aligning the address does not make a 4097-byte length valid.

Search terms: SGL Data Block · ADDR · LEN · SGLS

Back to this volume’s figure index

17SGL Segment descriptor

Base 2.4 · Figure 121 · SGL Segment descriptor

§4.3.2 · Printed pages 163 · PDF 189

17.1 · UseA Segment descriptor links to another SGL segment when one descriptor cannot describe the transfer. Its length measures descriptor storage, not the data buffer.

17.2 · Fields and relationshipsADDR bytes 7:0 points to the next segment; LEN bytes 11:8 must be nonzero and a multiple of 16; byte 15 has type 2. The link descriptor must be last in its containing segment.

17.3 · Interpretation and exampleLEN=48 means three 16-byte descriptors in the next segment, not a 48-byte data transfer. Obtain the actual transfer extent from data descriptors.

Search terms: SGL Segment · type 2 · LEN · ADDR

Back to this volume’s figure index

18SGL Last Segment descriptor

Base 2.4 · Figure 122 · SGL Last Segment descriptor

§4.3.2 · Printed pages 164 · PDF 190

18.1 · UseThis descriptor marks the next segment as the final one. “Last” does not mean it directly identifies the last user-data block.

18.2 · Fields and relationshipsADDR bytes 7:0 and LEN bytes 11:8 describe the next and final descriptor array. LEN is nonzero and a multiple of 16; type is 3. That final segment cannot contain another Segment or Last Segment link.

18.3 · Interpretation and exampleA Last Segment with LEN=32 can point to two Data Block descriptors. If the second is another Segment link, the final-segment constraint is violated; use Figure 114 to identify the error.

Search terms: SGL Last Segment · type 3 · last segment

Back to this volume’s figure index

19Status Code – Generic Command Status Values

NVM Command Set 1.3 · Figure 18 · Status Code – Generic Command Status Values

§3.1.2 · Printed pages 25 · PDF 25

19.1 · UseUse this extension when the Base generic table does not cover the NVM-specific condition. SCT remains 0; the status format is unchanged.

19.2 · Fields and relationshipsSC=14h exceeds an atomic write unit, 1Eh indicates invalid SGL alignment/granularity, 25h an invalid key tag, 80h an LBA beyond namespace size, and 81h utilization exceeding namespace capacity.

19.3 · Interpretation and exampleFor 80h, inspect SLBA/NLB and NSZE. For 81h, inspect NUSE/NCAP and allocation context. Address range and allocated-capacity exhaustion require different checks.

SLBA
Starting Logical Block Address

Search terms: SCT 0 · LBA Out of Range · Capacity Exceeded · Atomic Write Unit Exceeded

Back to this volume’s figure index

20Status Code – Command Specific Status Values

NVM Command Set 1.3 · Figure 19 · Status Code – Command Specific Status Values

§3.1.2 · Printed pages 25 · PDF 25

20.1 · UseFor SCT=1 on NVM commands, this table lists both meanings and affected commands. It helps detect use of the wrong command-set decoder.

20.2 · Fields and relationships80h is Conflicting Attributes, 81h Invalid Protection Information and 82h Attempted Write to Read Only Range. Copy adds size-limit 83h, incompatible-format 85h, fast-copy 86h, overlapping-range 87h and insufficient-resource 89h outcomes.

20.3 · Interpretation and exampleSC=81h here indicates invalid PI parameters, not the SCT=2 Guard Check Error. Check whether the requested protection configuration is valid before treating it as a mismatch between data and protection values.

PI
Protection Information

Search terms: SCT 1 · Conflicting Attributes · Invalid Protection Information · Copy errors

Back to this volume’s figure index

21Status Code – Media and Data Integrity Error Values

NVM Command Set 1.3 · Figure 20 · Status Code – Media and Data Integrity Error Values

§3.1.2 · Printed pages 26 · PDF 26

21.1 · UseThis table adds NVM content-comparison and deallocated/unwritten-block failures. It prevents misclassifying every Compare mismatch as unreadable media.

21.2 · Fields and relationshipsSC=85h means Compare Failure.87h reports a failed Copy, Read or Verify involving deallocated or unwritten LBAs. Interpret 87h together with namespace behavior and the Deallocated or Unwritten Logical Block Error configuration.

21.3 · Interpretation and exampleCompare 85h establishes a miscompare, not necessarily a CRC failure. Read 87h likewise does not by itself establish physical damage; first check whether the range was deallocated or never written.

Search terms: SCT 2 · Compare Failure · Deallocated or Unwritten Logical Block · DULBE

Back to this volume’s figure index

Source documents

Locations refer to the supplied ratified PDFs. For Base, PDF page = printed page +26; the other two use identical page numbers. Original figure numbers and English titles are retained for PDF search. Source PDFs are not redistributed.

  • NVM Express Base Specification · Revision 2.4 · 2026-07-31
    NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdf
  • NVM Express NVM Command Set Specification · Revision 1.3 · 2026-07-31
    NVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdf
  • NVM Express NVMe over PCIe Transport Specification · Revision 1.4 · 2026-07-31
    NVM-Express-NVMe-over-PCIe-Transport-Specification-Revision-1.4-Ratified-2026.07.31.pdf
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...