pico_i2c_slave

Typedefs

typedef enum i2c_slave_event_t i2c_slave_event_t
 I2C slave event types.
 
typedef void(* i2c_slave_handler_t) (i2c_inst_t *i2c, i2c_slave_event_t event)
 I2C slave event handler. More...
 

Enumerations

enum  i2c_slave_event_t { I2C_SLAVE_RECEIVE , I2C_SLAVE_REQUEST , I2C_SLAVE_FINISH }
 I2C slave event types. More...
 

Functions

void i2c_slave_init (i2c_inst_t *i2c, uint8_t address, i2c_slave_handler_t handler)
 Configure an I2C instance for slave mode. More...
 
void i2c_slave_deinit (i2c_inst_t *i2c)
 Restore an I2C instance to master mode. More...
 

Detailed Description

Functions providing an interrupt driven I2C slave interface.

This I2C slave helper library configures slave mode and hooks the relevant I2C IRQ so that a user supplied handler is called with enumerated I2C events.

An example application slave_mem_i2c, which makes use of this library, can be found in pico_examples.

Typedef Documentation

◆ i2c_slave_handler_t

typedef void(* i2c_slave_handler_t) (i2c_inst_t *i2c, i2c_slave_event_t event)

I2C slave event handler.

The event handler will run from the I2C ISR, so it should return quickly (under 25 us at 400 kb/s). Avoid blocking inside the handler and split large data transfers across multiple calls for best results. When sending data to master, up to i2c_get_write_available() bytes can be written without blocking. When receiving data from master, up to i2c_get_read_available() bytes can be read without blocking.

Parameters
i2cEither i2c0 or i2c1
eventEvent type.

Enumeration Type Documentation

◆ i2c_slave_event_t

I2C slave event types.

Enumerator
I2C_SLAVE_RECEIVE 

Data from master is available for reading. Slave must read from Rx FIFO.

I2C_SLAVE_REQUEST 

Master is requesting data. Slave must write into Tx FIFO.

I2C_SLAVE_FINISH 

Master has sent a Stop or Restart signal. Slave may prepare for the next transfer.

Function Documentation

◆ i2c_slave_deinit()

void i2c_slave_deinit ( i2c_inst_t i2c)

Restore an I2C instance to master mode.

Parameters
i2cEither i2c0 or i2c1

◆ i2c_slave_init()

void i2c_slave_init ( i2c_inst_t i2c,
uint8_t  address,
i2c_slave_handler_t  handler 
)

Configure an I2C instance for slave mode.

Parameters
i2cI2C instance.
address7-bit slave address.
handlerCallback for events from I2C master. It will run from the I2C ISR, on the CPU core where the slave was initialised.