pub struct I2c<'d, M: Mode, IM: MasterMode> { /* private fields */ }Expand description
I2C driver.
Implementations§
Source§impl<'d, M: PeriMode, IM: MasterMode> I2c<'d, M, IM>
 
impl<'d, M: PeriMode, IM: MasterMode> I2c<'d, M, IM>
Sourcepub fn blocking_read(
    &mut self,
    address: u8,
    read_buffer: &mut [u8],
) -> Result<(), Error>
 
pub fn blocking_read( &mut self, address: u8, read_buffer: &mut [u8], ) -> Result<(), Error>
Blocking read.
Sourcepub fn blocking_write(
    &mut self,
    address: u8,
    write_buffer: &[u8],
) -> Result<(), Error>
 
pub fn blocking_write( &mut self, address: u8, write_buffer: &[u8], ) -> Result<(), Error>
Blocking write.
Sourcepub fn blocking_write_read(
    &mut self,
    address: u8,
    write_buffer: &[u8],
    read_buffer: &mut [u8],
) -> Result<(), Error>
 
pub fn blocking_write_read( &mut self, address: u8, write_buffer: &[u8], read_buffer: &mut [u8], ) -> Result<(), Error>
Blocking write, restart, read.
Sourcepub fn blocking_transaction(
    &mut self,
    address: u8,
    operations: &mut [Operation<'_>],
) -> Result<(), Error>
 
pub fn blocking_transaction( &mut self, address: u8, operations: &mut [Operation<'_>], ) -> Result<(), Error>
Blocking transaction with operations.
Consecutive operations of same type are merged. See transaction contract for details.
Source§impl<'d, IM: MasterMode> I2c<'d, Async, IM>
 
impl<'d, IM: MasterMode> I2c<'d, Async, IM>
Sourcepub async fn read(
    &mut self,
    address: u8,
    read_buffer: &mut [u8],
) -> Result<(), Error>
 
pub async fn read( &mut self, address: u8, read_buffer: &mut [u8], ) -> Result<(), Error>
Read.
Sourcepub async fn write_read(
    &mut self,
    address: u8,
    write_buffer: &[u8],
    read_buffer: &mut [u8],
) -> Result<(), Error>
 
pub async fn write_read( &mut self, address: u8, write_buffer: &[u8], read_buffer: &mut [u8], ) -> Result<(), Error>
Write, restart, read.
Sourcepub async fn transaction(
    &mut self,
    address: u8,
    operations: &mut [Operation<'_>],
) -> Result<(), Error>
 
pub async fn transaction( &mut self, address: u8, operations: &mut [Operation<'_>], ) -> Result<(), Error>
Transaction with operations.
Consecutive operations of same type are merged. See transaction contract for details.
Source§impl<'d, M: PeriMode> I2c<'d, M, Master>
 
impl<'d, M: PeriMode> I2c<'d, M, Master>
Sourcepub fn into_slave_multimaster(
    self,
    slave_addr_config: SlaveAddrConfig,
) -> I2c<'d, M, MultiMaster>
 
pub fn into_slave_multimaster( self, slave_addr_config: SlaveAddrConfig, ) -> I2c<'d, M, MultiMaster>
Configure the I2C driver for slave operations, allowing for the driver to be used as a slave and a master (multimaster)
Source§impl<'d, M: PeriMode> I2c<'d, M, MultiMaster>
 
impl<'d, M: PeriMode> I2c<'d, M, MultiMaster>
Sourcepub fn blocking_listen(&mut self) -> Result<SlaveCommand, Error>
 
pub fn blocking_listen(&mut self) -> Result<SlaveCommand, Error>
Listen for incoming I2C address match and return the command type
This method blocks until the slave address is matched by a master. Returns the command type (Read/Write) and the matched address.
Sourcepub fn blocking_respond_to_read(&mut self, data: &[u8]) -> Result<usize, Error>
 
pub fn blocking_respond_to_read(&mut self, data: &[u8]) -> Result<usize, Error>
Respond to a master read request by transmitting data
Sends the provided data to the master. If the master requests more bytes than available, padding bytes (0x00) are sent until the master terminates the transaction with NACK.
Returns the total number of bytes transmitted (including padding).
Sourcepub fn blocking_respond_to_write(
    &mut self,
    buffer: &mut [u8],
) -> Result<usize, Error>
 
pub fn blocking_respond_to_write( &mut self, buffer: &mut [u8], ) -> Result<usize, Error>
Respond to a master write request by receiving data
Receives data from the master into the provided buffer. If the master sends more bytes than the buffer can hold, excess bytes are acknowledged but discarded.
Returns the number of bytes stored in the buffer (not total received).
Source§impl<'d> I2c<'d, Async, MultiMaster>
 
impl<'d> I2c<'d, Async, MultiMaster>
Sourcepub async fn listen(&mut self) -> Result<SlaveCommand, Error>
 
pub async fn listen(&mut self) -> Result<SlaveCommand, Error>
Async listen for incoming I2C messages using interrupts
Waits for a master to address this slave and returns the command type (Read/Write) and the matched address. This method will suspend until an address match occurs.
Sourcepub async fn respond_to_write(
    &mut self,
    buffer: &mut [u8],
) -> Result<usize, Error>
 
pub async fn respond_to_write( &mut self, buffer: &mut [u8], ) -> Result<usize, Error>
Async respond to write command using RX DMA
Receives data from the master into the provided buffer using DMA. If the master sends more bytes than the buffer can hold, excess bytes are acknowledged but discarded to prevent interrupt flooding.
Returns the number of bytes stored in the buffer (not total received).
Sourcepub async fn respond_to_read(&mut self, data: &[u8]) -> Result<usize, Error>
 
pub async fn respond_to_read(&mut self, data: &[u8]) -> Result<usize, Error>
Async respond to read command using TX DMA
Transmits data to the master using DMA. If the master requests more bytes than available in the data buffer, padding bytes (0x00) are sent until the master terminates the transaction with NACK, STOP, or RESTART.
Returns the total number of bytes transmitted (data + padding).
Source§impl<'d> I2c<'d, Async, Master>
 
impl<'d> I2c<'d, Async, Master>
Sourcepub fn new<T: Instance, A>(
    peri: Peri<'d, T>,
    scl: Peri<'d, impl SclPin<T, A>>,
    sda: Peri<'d, impl SdaPin<T, A>>,
    _irq: impl Binding<T::EventInterrupt, EventInterruptHandler<T>> + Binding<T::ErrorInterrupt, ErrorInterruptHandler<T>> + 'd,
    tx_dma: Peri<'d, impl TxDma<T>>,
    rx_dma: Peri<'d, impl RxDma<T>>,
    config: Config,
) -> Self
 
pub fn new<T: Instance, A>( peri: Peri<'d, T>, scl: Peri<'d, impl SclPin<T, A>>, sda: Peri<'d, impl SdaPin<T, A>>, _irq: impl Binding<T::EventInterrupt, EventInterruptHandler<T>> + Binding<T::ErrorInterrupt, ErrorInterruptHandler<T>> + 'd, tx_dma: Peri<'d, impl TxDma<T>>, rx_dma: Peri<'d, impl RxDma<T>>, config: Config, ) -> Self
Create a new I2C driver.
Trait Implementations§
Source§impl<'d, IM: MasterMode> I2c for I2c<'d, Async, IM>
 
impl<'d, IM: MasterMode> I2c for I2c<'d, Async, IM>
Source§async fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
 
async fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
address. Read moreSource§impl<'d, M: Mode, IM: MasterMode> I2c for I2c<'d, M, IM>
 
impl<'d, M: Mode, IM: MasterMode> I2c for I2c<'d, M, IM>
Source§fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
 
fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
address. Read more