embassy-stm32

Crates

git

Versions

stm32l152rc

Flavors

I2c

Struct I2c 

Source
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>

Source

pub fn blocking_read( &mut self, address: u8, read_buffer: &mut [u8], ) -> Result<(), Error>

Blocking read.

Source

pub fn blocking_write( &mut self, address: u8, write_buffer: &[u8], ) -> Result<(), Error>

Blocking write.

Source

pub fn blocking_write_read( &mut self, address: u8, write_buffer: &[u8], read_buffer: &mut [u8], ) -> Result<(), Error>

Blocking write, restart, read.

Source

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>

Source

pub async fn write( &mut self, address: u8, write_buffer: &[u8], ) -> Result<(), Error>

Write.

Source

pub async fn read( &mut self, address: u8, read_buffer: &mut [u8], ) -> Result<(), Error>

Read.

Source

pub async fn write_read( &mut self, address: u8, write_buffer: &[u8], read_buffer: &mut [u8], ) -> Result<(), Error>

Write, restart, read.

Source

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>

Source

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>

Source

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.

Source

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).

Source

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>

Source

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.

Source

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).

Source

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>

Source

pub fn new<T: Instance>( peri: Peri<'d, T>, scl: Peri<'d, impl SclPin<T>>, sda: Peri<'d, impl SdaPin<T>>, _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.

Source§

impl<'d> I2c<'d, Blocking, Master>

Source

pub fn new_blocking<T: Instance>( peri: Peri<'d, T>, scl: Peri<'d, impl SclPin<T>>, sda: Peri<'d, impl SdaPin<T>>, config: Config, ) -> Self

Create a new blocking I2C driver.

Trait Implementations§

Source§

impl<'d, M: Mode, IM: MasterMode> ErrorType for I2c<'d, M, IM>

Source§

type Error = Error

Error type
Source§

impl<'d, IM: MasterMode> I2c for I2c<'d, Async, IM>

Source§

async fn read( &mut self, address: u8, read: &mut [u8], ) -> Result<(), Self::Error>

Reads enough bytes from slave with address to fill buffer. Read more
Source§

async fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>

Writes bytes to slave with address address. Read more
Source§

async fn write_read( &mut self, address: u8, 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. Read more
Source§

async fn transaction( &mut self, address: u8, operations: &mut [Operation<'_>], ) -> Result<(), Self::Error>

Execute the provided operations on the I2C bus as a single transaction. Read more
Source§

impl<'d, M: Mode, IM: MasterMode> I2c for I2c<'d, M, IM>

Source§

fn read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Self::Error>

Reads enough bytes from slave with address to fill read. Read more
Source§

fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>

Writes bytes to slave with address address. Read more
Source§

fn write_read( &mut self, address: u8, 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. Read more
Source§

fn transaction( &mut self, address: u8, operations: &mut [Operation<'_>], ) -> Result<(), Self::Error>

Execute the provided operations on the I2C bus. Read more
Source§

impl<'d, M: PeriMode> SetConfig for I2c<'d, M, Master>

Source§

type Config = Hertz

The configuration type used by this driver.
Source§

type ConfigError = ()

The error type that can occur if set_config fails.
Source§

fn set_config(&mut self, config: &Self::Config) -> Result<(), ()>

Set the configuration of the driver.
Source§

impl<'d, M: Mode, IM: MasterMode> Read for I2c<'d, M, IM>

Source§

type Error = Error

Error type
Source§

fn read(&mut self, address: u8, buffer: &mut [u8]) -> Result<(), Self::Error>

Reads enough bytes from slave with address to fill buffer Read more
Source§

impl<'d, M: Mode, IM: MasterMode> Write for I2c<'d, M, IM>

Source§

type Error = Error

Error type
Source§

fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>

Writes bytes to slave with address address Read more
Source§

impl<'d, M: Mode, IM: MasterMode> WriteRead for I2c<'d, M, IM>

Source§

type Error = Error

Error type
Source§

fn write_read( &mut self, address: u8, write: &[u8], read: &mut [u8], ) -> Result<(), Self::Error>

Writes bytes to slave with address address and then reads enough bytes to fill buffer in a single transaction Read more

Auto Trait Implementations§

§

impl<'d, M, IM> Freeze for I2c<'d, M, IM>

§

impl<'d, M, IM> !RefUnwindSafe for I2c<'d, M, IM>

§

impl<'d, M, IM> Send for I2c<'d, M, IM>
where M: Send, IM: Send,

§

impl<'d, M, IM> Sync for I2c<'d, M, IM>
where M: Sync, IM: Sync,

§

impl<'d, M, IM> Unpin for I2c<'d, M, IM>
where M: Unpin, IM: Unpin,

§

impl<'d, M, IM> !UnwindSafe for I2c<'d, M, IM>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.