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();
47 kIntSourceDataReadyBit = 0x01 << 7,
50 kDefaultTimeoutMicros = 5000,
51 kTurnOnTimeMicros = 11000,
54 static dif_rv_core_ibex_t rv_core_ibex;
55 static dif_pinmux_t pinmux;
58 static status_t read_device_id(
void) {
59 uint8_t reg = kDeviceIdReg, data = 0;
60 TRY(i2c_testutils_write(&i2c, kDeviceAddr, 1, ®,
true));
61 TRY(i2c_testutils_read(&i2c, kDeviceAddr, 1, &data, kDefaultTimeoutMicros));
62 TRY_CHECK(data == kDeviceId,
"Unexpected value %x", data);
66 static status_t read_write_thresh_tap(
void) {
67 uint8_t reg = kThreshTapReg;
70 uint8_t write_data[2] = {reg, 0xAB};
71 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(write_data), write_data,
75 uint8_t read_data = 0;
76 TRY(i2c_testutils_write(&i2c, kDeviceAddr, 1, ®,
true));
77 TRY(i2c_testutils_read(&i2c, kDeviceAddr, 1, &read_data,
78 kDefaultTimeoutMicros));
79 TRY_CHECK(read_data == 0xAB,
"Unexpected value %x", read_data);
84 static status_t read_register(uint8_t reg) {
86 TRY(i2c_testutils_write(&i2c, kDeviceAddr, 1, ®,
true));
87 TRY(i2c_testutils_read(&i2c, kDeviceAddr,
sizeof(data), &data,
88 kDefaultTimeoutMicros));
89 return OK_STATUS(data);
92 static status_t take_measurement(
void) {
94 uint8_t write_data[2] = {kPowerCtrlReg, kMeasure};
95 TRY(i2c_testutils_write(&i2c, kDeviceAddr,
sizeof(write_data), write_data,
99 (uint8_t)TRY(read_register(kIntSourceReg)) & kIntSourceDataReadyBit,
103 uint8_t data_x_reg = kDataX0Reg;
104 uint8_t read_data[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
105 TRY(i2c_testutils_write(&i2c, kDeviceAddr, 1, &data_x_reg,
true));
106 TRY(i2c_testutils_read(&i2c, kDeviceAddr,
sizeof(read_data), read_data,
107 kDefaultTimeoutMicros));
111 uint8_t all_bits = 0x00;
112 for (
size_t i = 0; i <
ARRAYSIZE(read_data); ++i) {
113 all_bits |= read_data[i];
115 TRY_CHECK(all_bits != 0x00,
"All measurement registers zero");
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());
146 test_result = OK_STATUS();
147 for (
size_t i = 0; i <
ARRAYSIZE(speeds); ++i) {
148 CHECK_STATUS_OK(i2c_testutils_set_speed(&i2c, speeds[i]));
154 return status_ok(test_result);