15 #include "sw/device/lib/testing/i2c_testutils.h"
16 #include "sw/device/lib/testing/rv_core_ibex_testutils.h"
17 #include "sw/device/lib/testing/test_framework/check.h"
19 #include "sw/device/lib/testing/test_framework/ottf_utils.h"
24 static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
25 "This test assumes the target platform is little endian.");
27 OTTF_DEFINE_TEST_CONFIG();
30 kDefaultTimeoutMicros = 50000,
34 static volatile uint8_t backdoor_start =
false;
36 static dif_rv_core_ibex_t rv_core_ibex;
37 static dif_pinmux_t pinmux;
40 const static volatile uint8_t kBitbangData = 0x56;
42 static status_t test_override(
void) {
50 const uint8_t bits =
sizeof(kBitbangData) * 8;
52 uint16_t data = (uint8_t)(kBitbangData << 1);
53 for (
int i = 0; i <= bits; ++i) {
55 sda = (data >> (bits - i)) & 0x01;
77 TRY(dif_rv_core_ibex_init(base_addr, &rv_core_ibex));
80 TRY(dif_pinmux_init(base_addr, &pinmux));
85 static status_t i2c_detach_instance(uint8_t i2c_instance) {
87 return i2c_testutils_detach_pinmux(&pinmux, i2c_instance);
90 static status_t i2c_configure_instance(uint8_t i2c_instance) {
95 TRY_CHECK(i2c_instance <
ARRAYSIZE(kI2cBaseAddrTable));
99 TRY(dif_i2c_init(base_addr, &i2c));
101 TRY(i2c_testutils_select_pinmux(&pinmux, i2c_instance,
102 I2cPinmuxPlatformIdHyper310));
111 CHECK_STATUS_OK(test_init());
113 test_result = OK_STATUS();
114 for (uint8_t instance = 0; instance < 3; instance++) {
115 CHECK_STATUS_OK(i2c_configure_instance(instance));
116 OTTF_WAIT_FOR(backdoor_start, kDefaultTimeoutMicros);
120 backdoor_start =
false;
121 CHECK_STATUS_OK(i2c_detach_instance(instance));
124 return status_ok(test_result);