embassy-stm32

Crates

git

Versions

stm32l476re

Flavors

I2c

Struct I2c 

Source
pub struct I2c<'d, M: Mode, IM: MasterMode> { /* private fields */ }
Expand description

I2C driver.

Implementations§

Source§

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

Source

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

Blocking read.

Source

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

Blocking write.

Source

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

Blocking write, restart, read.

Source

pub fn blocking_transaction( &mut self, addr: u8, operations: &mut [Operation<'_>], ) -> Result<(), Error>

Blocking transaction with operations.

Consecutive operations of same type are merged. See transaction contract for details.

Source

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

Blocking write multiple buffers.

The buffers are concatenated in a single write transaction.

Source§

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

Source

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

Write.

Source

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

Write multiple buffers.

The buffers are concatenated in a single write transaction.

Source

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

Read.

Source

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

Write, restart, read.

Source

pub async fn transaction( &mut self, addr: 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: Mode> 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: Mode> I2c<'d, M, MultiMaster>

Source

pub fn reconfigure_addresses(&mut self, addresses: OwnAddresses)

Configure the slave address.

Source§

impl<'d, M: Mode> I2c<'d, M, MultiMaster>

Source

pub fn blocking_listen(&mut self) -> Result<SlaveCommand, Error>

Listen for incoming I2C messages.

This method blocks until the slave address is matched by a master.

Source

pub fn blocking_respond_to_write( &self, buffer: &mut [u8], ) -> Result<usize, Error>

Respond to a write command by receiving data from the master.

Receives up to buffer.len() bytes from the master into the provided buffer. If the master sends more data than the buffer can hold, excess bytes are acknowledged but discarded.

Returns the number of bytes actually stored in buffer.

Source

pub fn blocking_respond_to_read( &mut self, write: &[u8], ) -> Result<SendStatus, Error>

Respond to a read command by transmitting data to the master.

Transmits the provided data to the master. The master controls how many bytes it reads by sending a NACK after the last byte it wants.

Returns SendStatus::Done if all bytes were sent, or SendStatus::LeftoverBytes if the master ended the transfer early (sent NACK before all data was transmitted).

Source§

impl<'d> I2c<'d, Async, MultiMaster>

Source

pub async fn listen(&mut self) -> Result<SlaveCommand, Error>

Listen for incoming I2C messages.

The listen method is an asynchronous method but it does not require DMA to be asynchronous.

Source

pub async fn respond_to_write( &mut self, buffer: &mut [u8], ) -> Result<usize, Error>

Respond to a write command by receiving data from the master.

Receives up to buffer.len() bytes from the master into the provided buffer. If the master sends more data than the buffer can hold, excess bytes are acknowledged but discarded.

Returns the number of bytes actually stored in buffer.

Source

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

Respond to a read request from an I2C master.

Source§

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

Source

pub fn new<T: Instance, D1: TxDma<T>, D2: RxDma<T>>( peri: Peri<'d, T>, scl: Peri<'d, impl SclPin<T>>, sda: Peri<'d, impl SdaPin<T>>, tx_dma: Peri<'d, D1>, rx_dma: Peri<'d, D2>, _irq: impl Binding<T::EventInterrupt, EventInterruptHandler<T>> + Binding<T::ErrorInterrupt, ErrorInterruptHandler<T>> + Binding<D1::Interrupt, InterruptHandler<D1>> + Binding<D2::Interrupt, InterruptHandler<D2>> + 'd, 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: Mode> 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> SetConfig for I2c<'d, M, MultiMaster>

Source§

type Config = (Hertz, SlaveAddrConfig)

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, addr_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.