Group 2 NVM Command Set的第4项是Write command测试。
Case 1: Valid Write, LR (Limited Retry)=0, FUA (Force Unit Access)=0
测试步骤:
- Host 向SSD向某个LBA写入指定数据, 并设置LR=0,FAU=0;
- Host发送read command读取该LBA;
- SSD返回的所有Reserved字段应为0;
期望结果:
- 所有命令正确完成;
- 步骤3读回的数据与步骤2写入的数据相同;
Case2: SLBA out of Range
测试步骤:
- Host向SSD发送Identify command获取Identify Controller data structure
- Host发送write command,并指定SLBA (Start LBA)超出SSD LBA范围
期望结果:
- SSD上报错误 – LBA Out Of Range
Case 3:SLBA in range,NLB goes out of range
测试步骤:
- Host向SSD发送Identify command获取Identify Controller data structure
- Host发送write command,并指定SLBA (Start LBA)在SSD LBA范围内,但是指定一个NLB(Number of logic block)使其加在SLBA上后该write command超出SSD LBA范围;
期望结果:
- 如果NLB超过MDTS,SSD上报错误 – Invalid Field;
- 如果NLB不超过MDTS,但使Write command超出SSD LBA范围,SSD上报错误 – LBA Out Of Range 或者 Capacity Exceeded
Case 4:SLBA out of range,NLB>MDTS
测试步骤:
- Host向SSD发送Identify command获取Identify Controller data structure, 如果MDTS为0,本测试无效;
- Host发送write command,并指定SLBA (Start LBA)在超出SSD LBA范围,同时NLB>MDTS;
期望结果:
- SSD上报错误 – Invalid Field 或者LBA Out Of Range
Case 5: SLBA out of Range, but lower dword=00000000
测试步骤:
- 如果LBA FFFFFFFF00000000h在SSD LBA范围内,本测试无效;
- Host向SSD发送Identify command获取Identify Controller data structure;
- Host发送write command,并指定SLBA =FFFFFFFF00000000h, 当作为64位值时超出超出SSD LBA范围;
期望结果:
- SSD上报错误 – LBA Out Of Range
Case 6: Invalid namespace ID
测试步骤:
- 检查SSD在Identify Controller Data Structure里上报的NN值 (支持的namespace数量),如果NN=0xFFFFFFFF,本测试无效;
- Host向SSD发送Identify command获取Identify Controller data structure
- Host向SSD发送write command,并指定一个无效的Namespace ID (大于SSD支持的最大Namespace ID)
期望结果:
- SSD上报错误 – Invalid Namespace or Format
Case 7: Invalid Namespace ID and SLBA out of range
测试步骤:
- 检查SSD在Identify Controller Data Structure里上报的NN值 (支持的namespace数量),如果NN=0xFFFFFFFF,本测试无效;
- Host向SSD发送Identify command获取Identify Controller data structure
- Host向SSD发送write command,并指定一个无效的Namespace ID (大于SSD支持的最大Namespace ID),同时指定SLBA值超出SSD LBA范围。
期望结果:
- SSD上报错误 – Invalid Namespace or Format 或者 LBA out of range
Case 8:Valid Write,LR=0,FUA=1
测试步骤:
- Host 向SSD向某个LBA写入指定数据,并设置LR=0,FAU=1;
- Host发送read command读取该LBA;
- SSD返回的所有Reserved字段应为0;
期望结果:
- 所有命令正确完成;
- 步骤3读回的数据与步骤2写入的数据相同;
Case 9:Valid Write,LR=1,FUA=0
测试步骤:
- Host 向SSD向某个LBA写入指定数据,并设置LR=1,FAU=0;
- Host发送read command读取该LBA;
- SSD返回的所有Reserved字段应为0;
期望结果:
- 所有命令正确完成;
- 步骤3读回的数据与步骤2写入的数据相同;
Case 10:Valid Write,LR=1,FUA=1
测试步骤:
- Host 向SSD向某个LBA写入指定数据,并设置LR=1,FAU=1;
- Host发送read command读取该LBA;
- SSD返回的所有Reserved字段应为0;
期望结果:
- 所有命令正确完成;
- 步骤3读回的数据与步骤2写入的数据相同;
Case 11:Valid Write, Invalid PRP address offset
测试步骤:
- Host 读取SSD的MPS获取SSD支持的Memory Page Size
- Host发送write command,并指定第一个PRP List Entry为非Qword对齐;
期望结果:
- SSD上报错误 – PRP Offset Invalid