i2c.h 755 B

1234567891011121314151617
  1. /* Bit-banged open-drain I2C master: SCL=PD3, SDA=PD2 (external pull-ups required) */
  2. #ifndef I2C_H
  3. #define I2C_H
  4. #include <stdint.h>
  5. enum { I2C_OK = 0, I2C_NACK_ADDR = 1, I2C_NACK_DATA = 2, I2C_BUS_ERR = 3 };
  6. void i2c_init(void);
  7. void i2c_set_delay(uint8_t d); /* 0 = fastest, each step adds ~0.375 us per SCL period */
  8. uint8_t i2c_lines(uint8_t pullup); /* diag: bit0=SCL, bit1=SDA level; pullup=1 enables weak internal pull-ups */
  9. uint8_t i2c_recover(void); /* clock out stuck slave, then STOP */
  10. /* wlen>0: write phase; rlen>0: read phase (repeated START if both);
  11. * wlen==0 && rlen==0: address probe. addr is the 7-bit address. */
  12. uint8_t i2c_xfer(uint8_t addr, const uint8_t *w, uint8_t wlen, uint8_t *r, uint8_t rlen);
  13. #endif