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.

restore_bus()

Reassign the dynamic address cleared by RSTDAA (ENTDAA, per DSP0233) and return to I2C mode, so following I2C tests find the drive addressed. Returns True if ENTDAA found the target.

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_I2C_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_I2C_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: