14 #include "sw/device/lib/testing/i2c_testutils.h"
15 #include "sw/device/lib/testing/rv_core_ibex_testutils.h"
16 #include "sw/device/lib/testing/test_framework/check.h"
22 static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
23 "This test assumes the target platform is little endian.");
25 OTTF_DEFINE_TEST_CONFIG();
31 kSerialNumberCmd = 0x3682,
32 kMeasureRawCmd = 0x260F,
33 kExecSelfTestCmd = 0x280E,
34 kTurnHeaterOffCmd = 0x3615,
41 static dif_rv_core_ibex_t rv_core_ibex;
42 static dif_pinmux_t pinmux;
45 static status_t read_serial_number(
void) {
46 uint8_t cmd[2] = {kSerialNumberCmd >> 8, kSerialNumberCmd & 0xFF};
47 uint8_t data[9] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
48 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(cmd), cmd,
true));
49 TRY(i2c_testutils_read(&i2c, kDeviceAddr,
sizeof(data), data, 5000));
52 uint8_t all_ff[9] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
53 uint8_t all_00[9] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
55 "Serial number: [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, "
57 data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7],
59 TRY_CHECK_ARRAYS_NE(data, all_ff,
sizeof(data));
60 TRY_CHECK_ARRAYS_NE(data, all_00,
sizeof(data));
68 uint8_t cmd[8] = {kMeasureRawCmd >> 8,
69 kMeasureRawCmd & 0xFF,
76 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(cmd), cmd,
true));
79 uint8_t data[3] = {0x00, 0x00, 0x00};
80 TRY(i2c_testutils_read(&i2c, kDeviceAddr,
sizeof(data), data, 30000));
83 uint8_t all_ff[3] = {0xFF, 0xFF, 0xFF};
84 uint8_t all_00[3] = {0x00, 0x00, 0x00};
85 LOG_INFO(
"Measured data: [0x%02x, 0x%02x, 0x%02x]", data[0], data[1],
87 TRY_CHECK_ARRAYS_NE(data, all_ff,
sizeof(data));
88 TRY_CHECK_ARRAYS_NE(data, all_00,
sizeof(data));
96 uint8_t cmd[8] = {kExecSelfTestCmd >> 8, kExecSelfTestCmd & 0xFF};
97 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(cmd), cmd,
true));
100 uint8_t data[3] = {0x00, 0x00, 0x00};
101 TRY(i2c_testutils_read(&i2c, kDeviceAddr,
sizeof(data), data, 320000));
105 TRY_CHECK(data[0] == kSelfTestPass,
"Expected self test to pass");
110 static status_t turn_heater_off(
void) {
112 uint8_t cmd[2] = {kTurnHeaterOffCmd >> 8, kTurnHeaterOffCmd & 0xFF};
113 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(cmd), cmd,
false));
124 TRY(dif_rv_core_ibex_init(base_addr, &rv_core_ibex));
127 TRY(dif_i2c_init(base_addr, &i2c));
130 TRY(dif_pinmux_init(base_addr, &pinmux));
132 TRY(i2c_testutils_select_pinmux(&pinmux, 2, I2cPinmuxPlatformIdCw310Pmod));
141 CHECK_STATUS_OK(test_init());
148 test_result = OK_STATUS();
149 for (
size_t i = 0; i <
ARRAYSIZE(speeds); ++i) {
150 CHECK_STATUS_OK(i2c_testutils_set_speed(&i2c, speeds[i]));
157 return status_ok(test_result);