Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/rp2_common/hardware_i2c/i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,13 @@ uint i2c_set_baudrate(i2c_inst_t *i2c, uint baudrate) {
i2c->hw->fs_scl_lcnt = lcnt;
i2c->hw->fs_spklen = lcnt < 16 ? 1 : lcnt / 16;

// Set hold time of SDA during transmit to 2. Several I2C devices need
// this fix to work well or at all, including the
// TCS34725 color sensor, and the SSD1306 and SH1107 OLED drivers.
// There is no discernable slowdown in timing traces.
i2c->hw->sda_hold =
I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_RESET << I2C_IC_SDA_HOLD_IC_SDA_RX_HOLD_LSB |
2 << I2C_IC_SDA_HOLD_IC_SDA_TX_HOLD_LSB;
i2c->hw->enable = 1;
return freq_in / period;
}
Expand Down