i3c
I2C_Config_Get_0x1.py
I2C_Config_Get_0x1.py - SANBlaze NVMe-MI / SMBus Test
Configuration Get 0x1 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Config_Get_0x3.py
I2C_Config_Get_0x3.py - SANBlaze NVMe-MI / SMBus Test
Configuration Get 0x3 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Config_Set_0x1.py
I2C_Config_Set_0x1.py - SANBlaze NVMe-MI / SMBus Test
Configuration Set 0x1 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Config_Set_0x3.py
I2C_Config_Set_0x3.py - SANBlaze NVMe-MI / SMBus Test
Configuration Set 0x3 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Controller_Health_Poll.py
I2C_Controller_Health_Poll.py - SANBlaze NVMe-MI / SMBus Test
Controller Health Status Poll via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_DISEC_Direct.py
I2C_DISEC_Direct.py - SANBlaze NVMe-MI / SMBus Test
DISEC Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_ENEC_Direct.py
I2C_ENEC_Direct.py - SANBlaze NVMe-MI / SMBus Test
ENEC Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_ENTDAA_Broadcast.py
I2C_ENTDAA_Broadcast.py - SANBlaze NVMe-MI / SMBus Test
ENTDAA Broadcast via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_GETBCR_Direct.py
I2C_GETBCR_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETBCR Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_GETDCR_Direct.py
I2C_GETDCR_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETDCR Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_GETPID_Direct.py
I2C_GETPID_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETPID Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_GETSTATUS_Direct.py
I2C_GETSTATUS_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETSTATUS Direct via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_Get_Endpoint_ID.py
I2C_Get_Endpoint_ID.py - SANBlaze NVMe-MI / SMBus Test
Get Endpoint ID via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Endpoint_UUID.py
I2C_Get_Endpoint_UUID.py - SANBlaze NVMe-MI / SMBus Test
Get Endpoint UUID via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Feature_ID_0x2.py
I2C_Get_Feature_ID_0x2.py - SANBlaze NVMe-MI / SMBus Test
Get Feature ID 0x2 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Feature_ID_0x4.py
I2C_Get_Feature_ID_0x4.py - SANBlaze NVMe-MI / SMBus Test
Get Feature ID 0x4 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Log_Page_LID_1.py
I2C_Get_Log_Page_LID_1.py - SANBlaze NVMe-MI / SMBus Test
Get Log Page LID 0x1 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Log_Page_LID_2.py
I2C_Get_Log_Page_LID_2.py - SANBlaze NVMe-MI / SMBus Test
Get Log Page LID 0x2 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_MCTP_Version.py
I2C_Get_MCTP_Version.py - SANBlaze NVMe-MI / SMBus Test
Get MCTP Version Support via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Get_Message_Type.py
I2C_Get_Message_Type.py - SANBlaze NVMe-MI / SMBus Test
Get Message Type Support via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Identify_CNS_0x0.py
I2C_Identify_CNS_0x0.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x0 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Identify_CNS_0x1.py
I2C_Identify_CNS_0x1.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x1 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Identify_CNS_0x13.py
I2C_Identify_CNS_0x13.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x13 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Identify_CNS_0x2.py
I2C_Identify_CNS_0x2.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x2 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_NVM_Subsystem_Health_Poll.py
I2C_NVM_Subsystem_Health_Poll.py - SANBlaze NVMe-MI / SMBus Test
NVM Subsystem Health Status Poll via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_RSTDAA_Broadcast.py
I2C_RSTDAA_Broadcast.py - SANBlaze NVMe-MI / SMBus Test
RSTDAA Broadcast via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
- ensure_mode(proto)
Attempt a gentle mode switch (no power cycle). Returns True if successful. Called when the controller may be in the wrong mode for this test. Does not use sb_i3c_init — avoids dropping the PCIe/NVMe link.
I2C_Read_NVMeMI_DS_DTYP_0x0.py
I2C_Read_NVMeMI_DS_DTYP_0x0.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x0 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Read_NVMeMI_DS_DTYP_0x1.py
I2C_Read_NVMeMI_DS_DTYP_0x1.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x1 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Read_NVMeMI_DS_DTYP_0x2.py
I2C_Read_NVMeMI_DS_DTYP_0x2.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x2 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Read_NVMeMI_DS_DTYP_0x3.py
I2C_Read_NVMeMI_DS_DTYP_0x3.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x3 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Read_NVMeMI_DS_DTYP_0x4.py
I2C_Read_NVMeMI_DS_DTYP_0x4.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x4 via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Set_Endpoint_ID.py
I2C_Set_Endpoint_ID.py - SANBlaze NVMe-MI / SMBus Test
Set Endpoint ID via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Switch_to_I2C.py
I2C_Switch_to_I2C.py - SANBlaze NVMe-MI / SMBus Test
Switch from I3C to I2C via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_Switch_to_I3C.py
I2C_Switch_to_I3C.py - SANBlaze NVMe-MI / SMBus Test
Switch from I2C to I3C via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_VPD_Read_256.py
I2C_VPD_Read_256.py - SANBlaze NVMe-MI / SMBus Test
VPD Read 256 Bytes via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I2C_VPD_Write_256.py
I2C_VPD_Write_256.py - SANBlaze NVMe-MI / SMBus Test
VPD Write 256 Bytes via sb_smbus_test in I2C mode.
SANBlaze I3C Test Suite
I3C_CLI_Exists.py
I3C_CLI_Exists.py - SANBlaze I3C CLI Availability Check
Verifies that the sb_i3c CLI is present and responds to the status command. This is a prerequisite for all other I3C tests. This is the first test in the suite and resets the drive state to unknown.
- Steps:
Reset drive state flags to unknown
Run: sb_i3c -d <slot> status
Confirm output contains protocol/clock/version information
Pass/Fail: Script passes if the CLI responds with valid status output.
SANBlaze I3C Test Suite
I3C_Config_Get_0x1.py
I3C_Config_Get_0x1.py - SANBlaze NVMe-MI / SMBus Test
Configuration Get 0x1 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Config_Get_0x3.py
I3C_Config_Get_0x3.py - SANBlaze NVMe-MI / SMBus Test
Configuration Get 0x3 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Config_Set_0x1.py
I3C_Config_Set_0x1.py - SANBlaze NVMe-MI / SMBus Test
Configuration Set 0x1 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Config_Set_0x3.py
I3C_Config_Set_0x3.py - SANBlaze NVMe-MI / SMBus Test
Configuration Set 0x3 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Controller_Health_Poll.py
I3C_Controller_Health_Poll.py - SANBlaze NVMe-MI / SMBus Test
Controller Health Status Poll via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_DISEC_Direct.py
I3C_DISEC_Direct.py - SANBlaze NVMe-MI / SMBus Test
DISEC Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Device_Detection.py
I3C_Device_Detection.py - SANBlaze I3C Device Detection
Confirms the I3C controller hardware is present and responding on the specified USB device slot.
- Steps:
Run: sb_i3c -d <slot> status
Confirm device responds without error
Pass/Fail: Script passes if the device at the specified slot responds.
SANBlaze I3C Test Suite
I3C_Discover_Drive.py
I3C_Discover_Drive.py - SANBlaze I3C Drive Discovery Validation
Validates I3C drive presence detection by exercising a power cycle and confirming the drive’s I2C address appears, disappears, and reappears correctly at each stage.
If drive discovery fails at all four recovery levels, a flag file (i3c_no_drive) is written to the test working directory. All subsequent drive-dependent tests in the suite will check for this flag and skip with a warning rather than attempt to communicate with an unresponsive drive.
- Steps:
Confirm drive is visible on the I3C bus (setup_i3c)
Power off the drive, confirm it is no longer visible
Power on the drive, confirm it reappears
- Pass/Fail: Script passes if the drive tracks correctly through power cycle.
Script fails if drive does not respond after all recovery levels. Subsequent drive tests will warn/skip if this test fails.
SANBlaze I3C Test Suite
I3C_Drive_DISEC.py
I3C_Drive_DISEC.py - SANBlaze I3C Drive DISEC - Disable Events
Issues DISEC to disable IBIs on the drive. Skips if unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> disec 0x1d
Confirm OK response
Pass/Fail: Script passes if DISEC succeeds. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_ENEC.py
I3C_Drive_ENEC.py - SANBlaze I3C Drive ENEC - Enable Events
Issues ENEC to re-enable IBIs on the drive. Skips if unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> enec 0x1d
Confirm OK response
Pass/Fail: Script passes if ENEC succeeds. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_ENTDAA.py
I3C_Drive_ENTDAA.py - SANBlaze I3C Drive ENTDAA - Dynamic Address Assignment
Issues ENTDAA to assign address 0x1d to the drive. Skips if unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> entdaa 0x1d
Confirm 1+ targets discovered
Pass/Fail: Script passes if drive discovered. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_GETBCR.py
I3C_Drive_GETBCR.py - SANBlaze I3C Drive GETBCR - Bus Characteristics
Reads the BCR from the drive. Skips if drive unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> getbcr 0x1d
Confirm BCR value returned
Pass/Fail: Script passes if BCR returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_GETDCR.py
I3C_Drive_GETDCR.py - SANBlaze I3C Drive GETDCR - Device Characteristics
Reads the DCR from the drive. Skips if drive unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> getdcr 0x1d
Confirm DCR value returned
Pass/Fail: Script passes if DCR returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_GETPID.py
I3C_Drive_GETPID.py - SANBlaze I3C Drive GETPID - Provisioned ID
Reads the 48-bit Provisioned ID from the drive. Skips if unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> getpid 0x1d
Confirm complete PID returned
Pass/Fail: Script passes if complete PID returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_GETSTATUS.py
I3C_Drive_GETSTATUS.py - SANBlaze I3C Drive GETSTATUS
Reads current drive status via GETSTATUS CCC. Skips if unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> getstatus 0x1d
Confirm response returned
Pass/Fail: Script passes if status returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_SETMRL.py
I3C_Drive_SETMRL.py - SANBlaze I3C Drive SETMRL - Set Max Read Length
Sets the drive’s Maximum Read Length to 69 bytes via CCC SETMRL. Required before any MCTP traffic to match the 64-byte payload MTU. The Samsung drive defaults to MRL=0x104 (260 bytes) but uses a 64-byte internal MTU, causing multi-packet failures without this override. Skips if drive unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c_test -d <slot> -N -v 39
Confirm OK response
Pass/Fail: Script passes if SETMRL 69 succeeds. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_SETMWL.py
I3C_Drive_SETMWL.py - SANBlaze I3C Drive SETMWL - Set Max Write Length
Sets the drive’s Maximum Write Length to 69 bytes via CCC SETMWL. Required before any MCTP traffic to match the 64-byte payload MTU. Skips if drive unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c_test -d <slot> -N -v 38
Confirm OK response
Pass/Fail: Script passes if SETMWL 69 succeeds. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_Drive_Target_Reset.py
I3C_Drive_Target_Reset.py - SANBlaze I3C Drive Target Reset (HDR Exit)
Issues target reset CCC to exit HDR mode. Skips if drive unavailable.
- Steps:
setup_i3c (skip if unavailable)
Run: sb_i3c -d <slot> targetreset
Confirm I3C_RESET sent
Pass/Fail: Script passes if reset sent. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_EEPROM_Read.py
I3C_EEPROM_Read.py - SANBlaze I3C EEPROM Read via I2C
Reads 128 bytes from the iRiser EEPROM. Skips if no EEPROM present.
- Steps:
Detect EEPROM (skip if none)
Read 128 bytes via i2ctransfer
Verify 128 bytes returned
Pass/Fail: Script passes if 128 bytes read. Skips if EEPROM not present.
SANBlaze I3C Test Suite
I3C_ENEC_Direct.py
I3C_ENEC_Direct.py - SANBlaze NVMe-MI / SMBus Test
ENEC Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_ENTDAA_Broadcast.py
I3C_ENTDAA_Broadcast.py - SANBlaze NVMe-MI / SMBus Test
ENTDAA Broadcast via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Error_Log_Clear.py
I3C_Error_Log_Clear.py - SANBlaze I3C Error Log Clear
Clears the I3C error log before drive tests to ensure clean state.
- Steps:
Run: sb_i3c -d <slot> i3c_err_clear
Confirm cleared in response
Pass/Fail: Script passes if error log is cleared.
SANBlaze I3C Test Suite
I3C_Error_Log_Read.py
I3C_Error_Log_Read.py - SANBlaze I3C Error Log Read
Reads the I3C error log to verify logging infrastructure is functional.
- Steps:
Run: sb_i3c -d <slot> i3c_err_get
Confirm valid response returned
Pass/Fail: Script passes if error log responds without a usage error.
SANBlaze I3C Test Suite
I3C_Firmware_Version.py
I3C_Firmware_Version.py - SANBlaze I3C Firmware Version Check
Verifies the I3C controller is running the expected firmware version. A mismatch results in a skip rather than a failure.
- Steps:
Run: sb_i3c -d <slot> status
Confirm firmware version matches V1528
Pass/Fail: Script passes if version matches. Skips on mismatch.
SANBlaze I3C Test Suite
I3C_GETBCR_Direct.py
I3C_GETBCR_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETBCR Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_GETDCR_Direct.py
I3C_GETDCR_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETDCR Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_GETPID_Direct.py
I3C_GETPID_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETPID Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_GETSTATUS_Direct.py
I3C_GETSTATUS_Direct.py - SANBlaze NVMe-MI / SMBus Test
GETSTATUS Direct via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Endpoint_ID.py
I3C_Get_Endpoint_ID.py - SANBlaze NVMe-MI / SMBus Test
Get Endpoint ID via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Endpoint_UUID.py
I3C_Get_Endpoint_UUID.py - SANBlaze NVMe-MI / SMBus Test
Get Endpoint UUID via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Feature_ID_0x2.py
I3C_Get_Feature_ID_0x2.py - SANBlaze NVMe-MI / SMBus Test
Get Feature ID 0x2 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Feature_ID_0x4.py
I3C_Get_Feature_ID_0x4.py - SANBlaze NVMe-MI / SMBus Test
Get Feature ID 0x4 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Log_Page_LID_1.py
I3C_Get_Log_Page_LID_1.py - SANBlaze NVMe-MI / SMBus Test
Get Log Page LID 0x1 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Log_Page_LID_2.py
I3C_Get_Log_Page_LID_2.py - SANBlaze NVMe-MI / SMBus Test
Get Log Page LID 0x2 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_MCTP_Version.py
I3C_Get_MCTP_Version.py - SANBlaze NVMe-MI / SMBus Test
Get MCTP Version Support via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Get_Message_Type.py
I3C_Get_Message_Type.py - SANBlaze NVMe-MI / SMBus Test
Get Message Type Support via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_I2C_Local_Write_Read_4B.py
I3C_Local_Write_Read_4B.py - SANBlaze I3C Local Target Write/Read 4 Bytes (I2C Mode)
In I2C mode, writes 4 bytes to the local target (0x24) and reads them back via i3c_data_read to confirm loopback.
- Steps:
Set mode I2C
Write 0xAA 0xBB 0xCC 0xDD to local target
Read back via i3c_data_read
Confirm DATA(4) matches
Pass/Fail: Script passes if all 4 bytes are returned correctly.
SANBlaze I3C Test Suite
I3C_I2C_Local_Write_Read_60B.py
I3C_Local_Write_Read_60B.py - SANBlaze I3C Local Target Write/Read 60 Bytes (I2C Mode)
In I2C mode, writes 60 bytes (0x00-0x3B pattern) to the local target (0x24) and reads them back via i3c_data_read to confirm loopback.
- Steps:
Set mode I2C
Write 60-byte incrementing pattern to local target
Read back via i3c_data_read
Confirm DATA(60) with correct pattern
Pass/Fail: Script passes if all 60 bytes are returned with correct pattern.
SANBlaze I3C Test Suite
I3C_I2C_MCTP_4K_Identify.py
I3C_I2C_MCTP_4K_Identify.py - SANBlaze I3C MCTP 4K Identify in I2C Mode
In I2C mode, sends an NVMe-MI Identify Controller command to the drive via mi -T smbus and verifies the full 4096-byte response.
- Steps:
Power cycle drive (ensures clean I2C mode)
Set mode I2C
Run: mi -T smbus -d <slot> -t 2 6 1 -c 1
Confirm identify len: 4096
Pass/Fail: Script passes if identify len: 4096 is returned.
SANBlaze I3C Test Suite
I3C_I2C_MCTP_Short.py
I3C_I2C_MCTP_Short.py - SANBlaze I3C MCTP Short Command in I2C Mode
In I2C mode, sends an NVMe-MI Get Subsystem Information request to the drive via mi -T smbus and verifies the response.
- Steps:
Power cycle drive (ensures clean I2C mode)
Set mode I2C
Run: mi -T smbus -d <slot> -t 1 0 0
Confirm NVM Subsystem Information response
Pass/Fail: Script passes if NVM Subsystem Information is returned.
SANBlaze I3C Test Suite
I3C_Identify_CNS_0x0.py
I3C_Identify_CNS_0x0.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x0 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Identify_CNS_0x1.py
I3C_Identify_CNS_0x1.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x1 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Identify_CNS_0x13.py
I3C_Identify_CNS_0x13.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x13 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Identify_CNS_0x2.py
I3C_Identify_CNS_0x2.py - SANBlaze NVMe-MI / SMBus Test
Identify CNS 0x2 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Local_Write_Read_4B.py
I3C_Local_Write_Read_4B.py - SANBlaze I3C Local Target Write/Read 4 Bytes
Writes 0xAA 0xBB 0xCC 0xDD to the local target and verifies readback.
- Steps:
Flush buffer
Write 0xAA 0xBB 0xCC 0xDD
Read back via i3c_data_read
Verify DATA(4) with correct pattern
Pass/Fail: Script passes if readback matches written pattern exactly.
SANBlaze I3C Test Suite
I3C_Local_Write_Read_60B.py
I3C_Local_Write_Read_60B.py - SANBlaze I3C Local Target Write/Read 60 Bytes
Writes 60-byte incrementing pattern (0x00-0x3B) and verifies readback. Validates buffer handling beyond the USB 56-byte chunk boundary.
- Steps:
Flush buffer
Write 60 bytes (0x00-0x3B)
Read back via i3c_data_read
Verify DATA(60) with correct pattern
Pass/Fail: Script passes if all 60 bytes read back correctly.
SANBlaze I3C Test Suite
I3C_Loopback_Off.py
I3C_Loopback_Off.py - SANBlaze I3C Loopback Mode Disable
Disables loopback mode to ensure normal bus operation for drive tests.
- Steps:
Run: sb_i3c -d <slot> i3c_loopback 0
Confirm no error
Pass/Fail: Script passes if loopback is disabled without error.
SANBlaze I3C Test Suite
I3C_MCTP_Discovery.py
I3C_MCTP_Discovery.py - SANBlaze I3C MCTP Get Endpoint ID (Discovery)
MCTP Get Endpoint ID via private write + IBI + private read.
- Steps:
setup_i3c (skip if unavailable)
Private write MCTP Get Endpoint ID (25 bytes)
Poll IBI
Private read response (49 bytes)
Verify PRIVATE_READ received
Pass/Fail: Script passes if valid MCTP response received. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_MCTP_Discovery_Command.py
I3C_MCTP_Discovery_Command.py - SANBlaze I3C MCTP Discovery via mctp_command
MCTP Get Endpoint ID using mctp_command one-shot interface.
- Steps:
setup_i3c (skip if unavailable)
private_write –hold request
mctp_command fires, polls IBI, reads response
Verify response received
Pass/Fail: Script passes if valid response received. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_MCTP_Identify_Burst.py
I3C_MCTP_Identify_Burst.py - SANBlaze I3C MCTP NVMe Identify Controller (Burst Write)
NVMe Identify Controller via MCTP burst write (–hold + fire). Response is 4096 bytes read via mctp_read across ~65 packets.
- Steps:
setup_i3c (skip if unavailable)
private_write –hold pkt1 (69 bytes)
private_write pkt2 fires burst (13 bytes)
Poll IBI, read via mctp_read
Verify 4K+ bytes received
Pass/Fail: Script passes if 4000+ bytes returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_MCTP_Identify_Command.py
I3C_MCTP_Identify_Command.py - SANBlaze I3C MCTP NVMe Identify Controller via mctp_command
NVMe Identify Controller via mctp_command one-shot (hold both packets, command fires + polls IBI + reads multi-packet response).
- Steps:
setup_i3c (skip if unavailable)
private_write –hold pkt1 and pkt2
mctp_command fires, reads 4K response
Verify 4000+ bytes received
Pass/Fail: Script passes if 4000+ bytes returned. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_MCTP_Identify_Ring.py
I3C_MCTP_Identify_Ring.py - SANBlaze I3C MCTP NVMe Identify Controller via Ring Buffer
NVMe Identify Controller via mctp_to_ring - routes response to ring buffer for customer read path end-to-end validation.
- Steps:
setup_i3c (skip if unavailable)
private_write –hold pkt1 and pkt2
mctp_to_ring fires, reads into ring buffer
i3c_data_read retrieves from ring buffer
Verify 4000+ bytes and ring empty after read
Pass/Fail: Script passes if 4000+ bytes committed and retrieved. Skips if no I3C drive.
SANBlaze I3C Test Suite
I3C_NAK_Handling.py
I3C_NAK_Handling.py - SANBlaze I3C NAK Handling - Non-Existent Address
Writes to non-existent address 0x77 and verifies graceful NAK handling.
- Steps:
Write 0xAA to address 0x77
Verify NAK detected or command completes gracefully
Pass/Fail: Script passes if NAK is handled without error.
SANBlaze I3C Test Suite
I3C_NVM_Subsystem_Health_Poll.py
I3C_NVM_Subsystem_Health_Poll.py - SANBlaze NVMe-MI / SMBus Test
NVM Subsystem Health Status Poll via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_RSTDAA_Broadcast.py
I3C_RSTDAA_Broadcast.py - SANBlaze NVMe-MI / SMBus Test
RSTDAA Broadcast via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Read_NVMeMI_DS_DTYP_0x0.py
I3C_Read_NVMeMI_DS_DTYP_0x0.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x0 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Read_NVMeMI_DS_DTYP_0x1.py
I3C_Read_NVMeMI_DS_DTYP_0x1.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x1 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Read_NVMeMI_DS_DTYP_0x2.py
I3C_Read_NVMeMI_DS_DTYP_0x2.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x2 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Read_NVMeMI_DS_DTYP_0x3.py
I3C_Read_NVMeMI_DS_DTYP_0x3.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x3 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Read_NVMeMI_DS_DTYP_0x4.py
I3C_Read_NVMeMI_DS_DTYP_0x4.py - SANBlaze NVMe-MI / SMBus Test
Read NVMe-MI Data Structure DTYP 0x4 via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Ring_Buffer_Accumulate.py
I3C_Ring_Buffer_Accumulate.py - SANBlaze I3C Ring Buffer Accumulation
Writes two 2-byte payloads separately and reads once, verifying all 4 bytes accumulate correctly in the ring buffer.
- Steps:
Flush ring buffer
Write 0x11 0x22
Write 0x33 0x44
Read and verify DATA(4): 0x11 0x22 0x33 0x44
Pass/Fail: Script passes if both writes appear in a single read.
SANBlaze I3C Test Suite
I3C_SETDASA_Roundtrip.py
I3C_SETDASA_Roundtrip.py - SANBlaze I3C SETDASA Address Round-Trip
Issues SETDASA to change address 0x24->0x25->0x24 and verifies each step.
- Steps:
Confirm initial address 0x24
SETDASA 0x24->0x25, verify
SETDASA 0x25->0x24, verify
Pass/Fail: Script passes if both transitions are confirmed.
SANBlaze I3C Test Suite
I3C_Set_Drive_Strength.py
I3C_Set_Drive_Strength.py - SANBlaze I3C Bus Drive Strength Configuration
Sets bus output drive strength to 12mA for signal integrity.
- Steps:
Run: sb_i3c -d <slot> set_drive_strength 12
Confirm no error
Pass/Fail: Script passes if drive strength is configured without error.
SANBlaze I3C Test Suite
I3C_Set_Endpoint_ID.py
I3C_Set_Endpoint_ID.py - SANBlaze NVMe-MI / SMBus Test
Set Endpoint ID via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Set_I2C_Clock.py
I3C_Set_I2C_Clock.py - SANBlaze I3C Bus Clock Configuration (I2C Speed)
Sets the bus clock to 100kHz for I2C-compatible local I/O tests.
- Steps:
Run: sb_i3c -d <slot> i3c_clk 100
Confirm no error
Pass/Fail: Script passes if clock is set without error.
SANBlaze I3C Test Suite
I3C_Set_I3C_Clock.py
I3C_Set_I3C_Clock.py - SANBlaze I3C Bus Clock Switch to I3C Speed
Switches bus clock to 8000kHz for drive communication tests.
- Steps:
Run: sb_i3c -d <slot> i3c_clk 8000
Confirm no error
Pass/Fail: Script passes if clock is set to 8000kHz without error.
SANBlaze I3C Test Suite
I3C_Set_Termination.py
I3C_Set_Termination.py - SANBlaze I3C Bus Termination Configuration
Sets bus pull-up termination for reliable signaling.
- Steps:
Run: sb_i3c -d <slot> set_termination 3
Confirm no error
Pass/Fail: Script passes if termination is configured without error.
SANBlaze I3C Test Suite
I3C_Switch_to_I2C.py
I3C_Switch_to_I2C.py - SANBlaze NVMe-MI / SMBus Test
Switch from I3C to I2C via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Switch_to_I3C.py
I3C_Switch_to_I3C.py - SANBlaze NVMe-MI / SMBus Test
Switch from I2C to I3C via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_Target_Buffer_Reset.py
I3C_Target_Buffer_Reset.py - SANBlaze I3C Local Target Buffer Reset
Resets the local target receive buffer, clearing stale data.
- Steps:
Run: sb_i3c -d <slot> i3c_target_reset
Confirm no error
Pass/Fail: Script passes if buffer resets without error.
SANBlaze I3C Test Suite
I3C_Target_Enable.py
I3C_Target_Enable.py - SANBlaze I3C Local Target Enable
Enables the local I3C target before local I/O tests.
- Steps:
Run: sb_i3c -d <slot> i3c_target_enable
Confirm no error
Pass/Fail: Script passes if target is enabled without error.
SANBlaze I3C Test Suite
I3C_Target_Set_Address.py
I3C_Target_Set_Address.py - SANBlaze I3C Local Target Address Configuration
Sets local target address to 0x24 and verifies via status readback.
- Steps:
Run: sb_i3c -d <slot> i3c_target_set_addr 0x24
Verify via i3c_target_status
Pass/Fail: Script passes if address is set and confirmed.
SANBlaze I3C Test Suite
I3C_Target_Status.py
I3C_Target_Status.py - SANBlaze I3C Local Target Status
Reads local target status to confirm it is enabled and reporting a valid address.
- Steps:
Run: sb_i3c -d <slot> i3c_target_status
Confirm enabled/addr in response
Pass/Fail: Script passes if status contains enabled/addr fields.
SANBlaze I3C Test Suite
I3C_Tiny_Write_Read_4B.py
I3C_Tiny_Write_Read_4B.py - SANBlaze I3C Linux I2C Tiny Driver Write/Read 4 Bytes
Writes 4 bytes via Linux i2ctransfer (TinyUSB path) and reads back via i3c_data_read. Validates the Linux I2C driver integration path.
- Steps:
Write 0xDE 0xAD 0xBE 0xEF via i2ctransfer
Read back via i3c_data_read
Verify DATA(4) with correct pattern
Pass/Fail: Script passes if readback matches. Skips if I2C bus not detected.
SANBlaze I3C Test Suite
I3C_Tiny_Write_Read_60B.py
I3C_Tiny_Write_Read_60B.py - SANBlaze I3C Linux I2C Tiny Driver Write/Read 60 Bytes
Writes 60-byte pattern via Linux i2ctransfer and reads back via i3c_data_read. Validates large payload handling through TinyUSB driver.
- Steps:
Write 60 bytes (0x00-0x3B) via i2ctransfer
Read back via i3c_data_read
Verify DATA(60) with correct pattern
Pass/Fail: Script passes if all 60 bytes read back correctly. Skips if I2C bus not detected.
SANBlaze I3C Test Suite
I3C_VPD_Read_256.py
I3C_VPD_Read_256.py - SANBlaze NVMe-MI / SMBus Test
VPD Read 256 Bytes via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
I3C_VPD_Write_256.py
I3C_VPD_Write_256.py - SANBlaze NVMe-MI / SMBus Test
VPD Write 256 Bytes via sb_smbus_test in I3C mode.
SANBlaze I3C Test Suite
stageit.sh
Objective:
Pass/Fail: