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:
  1. Reset drive state flags to unknown

  2. Run: sb_i3c -d <slot> status

  3. 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:
  1. Run: sb_i3c -d <slot> status

  2. 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:
  1. Confirm drive is visible on the I3C bus (setup_i3c)

  2. Power off the drive, confirm it is no longer visible

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> disec 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> enec 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> entdaa 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> getbcr 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> getdcr 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> getpid 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> getstatus 0x1d

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c_test -d <slot> -N -v 39

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c_test -d <slot> -N -v 38

  3. 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:
  1. setup_i3c (skip if unavailable)

  2. Run: sb_i3c -d <slot> targetreset

  3. 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:
  1. Detect EEPROM (skip if none)

  2. Read 128 bytes via i2ctransfer

  3. 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:
  1. Run: sb_i3c -d <slot> i3c_err_clear

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_err_get

  2. 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:
  1. Run: sb_i3c -d <slot> status

  2. 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:
  1. Set mode I2C

  2. Write 0xAA 0xBB 0xCC 0xDD to local target

  3. Read back via i3c_data_read

  4. 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:
  1. Set mode I2C

  2. Write 60-byte incrementing pattern to local target

  3. Read back via i3c_data_read

  4. 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:
  1. Power cycle drive (ensures clean I2C mode)

  2. Set mode I2C

  3. Run: mi -T smbus -d <slot> -t 2 6 1 -c 1

  4. 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:
  1. Power cycle drive (ensures clean I2C mode)

  2. Set mode I2C

  3. Run: mi -T smbus -d <slot> -t 1 0 0

  4. 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:
  1. Flush buffer

  2. Write 0xAA 0xBB 0xCC 0xDD

  3. Read back via i3c_data_read

  4. 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:
  1. Flush buffer

  2. Write 60 bytes (0x00-0x3B)

  3. Read back via i3c_data_read

  4. 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:
  1. Run: sb_i3c -d <slot> i3c_loopback 0

  2. 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:
  1. setup_i3c (skip if unavailable)

  2. Private write MCTP Get Endpoint ID (25 bytes)

  3. Poll IBI

  4. Private read response (49 bytes)

  5. 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:
  1. setup_i3c (skip if unavailable)

  2. private_write –hold request

  3. mctp_command fires, polls IBI, reads response

  4. 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:
  1. setup_i3c (skip if unavailable)

  2. private_write –hold pkt1 (69 bytes)

  3. private_write pkt2 fires burst (13 bytes)

  4. Poll IBI, read via mctp_read

  5. 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:
  1. setup_i3c (skip if unavailable)

  2. private_write –hold pkt1 and pkt2

  3. mctp_command fires, reads 4K response

  4. 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:
  1. setup_i3c (skip if unavailable)

  2. private_write –hold pkt1 and pkt2

  3. mctp_to_ring fires, reads into ring buffer

  4. i3c_data_read retrieves from ring buffer

  5. 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:
  1. Write 0xAA to address 0x77

  2. 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:
  1. Flush ring buffer

  2. Write 0x11 0x22

  3. Write 0x33 0x44

  4. 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:
  1. Confirm initial address 0x24

  2. SETDASA 0x24->0x25, verify

  3. 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:
  1. Run: sb_i3c -d <slot> set_drive_strength 12

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_clk 100

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_clk 8000

  2. 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:
  1. Run: sb_i3c -d <slot> set_termination 3

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_target_reset

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_target_enable

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_target_set_addr 0x24

  2. 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:
  1. Run: sb_i3c -d <slot> i3c_target_status

  2. 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:
  1. Write 0xDE 0xAD 0xBE 0xEF via i2ctransfer

  2. Read back via i3c_data_read

  3. 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:
  1. Write 60 bytes (0x00-0x3B) via i2ctransfer

  2. Read back via i3c_data_read

  3. 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: