pub trait I2c<A: AddressMode = SevenBitAddress>: ErrorType {
    // Required method
    fn transaction(
        &mut self,
        address: A,
        operations: &mut [Operation<'_>],
    ) -> Result<(), Self::Error>;
    // Provided methods
    fn read(&mut self, address: A, read: &mut [u8]) -> Result<(), Self::Error> { ... }
    fn write(&mut self, address: A, write: &[u8]) -> Result<(), Self::Error> { ... }
    fn write_read(
        &mut self,
        address: A,
        write: &[u8],
        read: &mut [u8],
    ) -> Result<(), Self::Error> { ... }
}Expand description
Blocking I2C.
Required Methods§
sourcefn transaction(
    &mut self,
    address: A,
    operations: &mut [Operation<'_>],
) -> Result<(), Self::Error>
 
fn transaction( &mut self, address: A, operations: &mut [Operation<'_>], ) -> Result<(), Self::Error>
Execute the provided operations on the I2C bus.
Transaction contract:
- 
Before executing the first operation an ST is sent automatically. This is followed by SAD+R/W as appropriate.
 - 
Data from adjacent operations of the same type are sent after each other without an SP or SR.
 - 
Between adjacent operations of a different type an SR and SAD+R/W is sent.
 - 
After executing the last operation an SP is sent automatically.
 - 
If the last operation is a
Readthe master does not send an acknowledge for the last byte. - 
ST= start condition - 
SAD+R/W= slave address followed by bit 1 to indicate reading or 0 to indicate writing - 
SR= repeated start condition - 
SP= stop condition 
Provided Methods§
sourcefn read(&mut self, address: A, read: &mut [u8]) -> Result<(), Self::Error>
 
fn read(&mut self, address: A, read: &mut [u8]) -> Result<(), Self::Error>
Reads enough bytes from slave with address to fill read.
§I2C Events (contract)
Master: ST SAD+R        MAK    MAK ...    NMAK SP
Slave:           SAK B0     B1     ... BNWhere
ST= start conditionSAD+R= slave address followed by bit 1 to indicate readingSAK= slave acknowledgeBi= ith byte of dataMAK= master acknowledgeNMAK= master no acknowledgeSP= stop condition
sourcefn write(&mut self, address: A, write: &[u8]) -> Result<(), Self::Error>
 
fn write(&mut self, address: A, write: &[u8]) -> Result<(), Self::Error>
Writes bytes to slave with address address.
§I2C Events (contract)
Master: ST SAD+W     B0     B1     ... BN     SP
Slave:           SAK    SAK    SAK ...    SAKWhere
ST= start conditionSAD+W= slave address followed by bit 0 to indicate writingSAK= slave acknowledgeBi= ith byte of dataSP= stop condition
sourcefn write_read(
    &mut self,
    address: A,
    write: &[u8],
    read: &mut [u8],
) -> Result<(), Self::Error>
 
fn write_read( &mut self, address: A, write: &[u8], read: &mut [u8], ) -> Result<(), Self::Error>
Writes bytes to slave with address address and then reads enough bytes to fill read in a
single transaction.
§I2C Events (contract)
Master: ST SAD+W     O0     O1     ... OM     SR SAD+R        MAK    MAK ...    NMAK SP
Slave:           SAK    SAK    SAK ...    SAK          SAK I0     I1     ... INWhere
ST= start conditionSAD+W= slave address followed by bit 0 to indicate writingSAK= slave acknowledgeOi= ith outgoing byte of dataSR= repeated start conditionSAD+R= slave address followed by bit 1 to indicate readingIi= ith incoming byte of dataMAK= master acknowledgeNMAK= master no acknowledgeSP= stop condition