NVMe Figures and Scenarios 02 · Commands, Data Pointers, and Completion Status
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.
- 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
- 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
- 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
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
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
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
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
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
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
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.
Back to this volume’s figure index02Common 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
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.
Back to this volume’s figure index04Completion 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.
Back to this volume’s figure index05Completion 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.
Back to this volume’s figure index06Completion 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.
Back to this volume’s figure index07Status 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
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.
Back to this volume’s figure index09Status 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.
Back to this volume’s figure index10Status 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
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.
Back to this volume’s figure index12PRP 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.
Back to this volume’s figure index13PRP 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.
Back to this volume’s figure index14SGL 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.
Back to this volume’s figure index15Generic 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.
Back to this volume’s figure index16SGL 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.
Back to this volume’s figure index17SGL 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.
Back to this volume’s figure index18SGL 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.
Back to this volume’s figure index19Status 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
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
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.
Back to this volume’s figure index

Comments