172 Commits

Author SHA1 Message Date
Fredrik Reinholdsen
47869d122a fix: Fix for #3888 async I2C read bug for introduced in #3887 in STM32 I2C v2 driver
In fixing a different timing related bug, #3887, a new bug was introduced causing I2C reads longer than 255 bytes to timeout for some I2C devices, #3888.
The issue was caused by incorrect branch order, and poll function being called unnecessarily.

Async I2C read poll function now only looks for I2C transfer complete reload (TCR) interrupts, intead of TCR and transfer complete (TC) interrupts,
since TC interrupts are not raised when AUTOEND bit is set.
2025-04-01 21:28:07 +02:00
Dario Nieuwenhuis
3a3ab6cded
Merge pull request #3928 from agrif/stm32-i2c-set-config
Fix SetConfig implementation for STM32 I2C v2
2025-03-28 15:17:21 +00:00
Dario Nieuwenhuis
d41eeeae79 Remove Peripheral trait, rename PeripheralRef->Peri. 2025-03-27 15:18:06 +01:00
Aaron Griffith
03f73ce339 stm32/i2c: disable peripheral when changing timings 2025-02-27 06:50:01 -05:00
Guy Marino
27709df94a
Implement core::error::Error for STM32 Serial Devices 2025-02-26 14:14:16 -08:00
Dario Nieuwenhuis
1780f8479e
Merge pull request #3878 from showier-drastic/i2c-v2-add-nack
stm32: i2c-v2: Add error handling
2025-02-17 19:52:41 +01:00
Fredrik Reinholdsen
7f4cce536a fix: Fix for async I2C v2 driver sequential read/write reads. Fixes #3887
For I2C devices that support variable length reads, sending chunks of data as long as the master keeps ACK:ing after each received byte, sequential reads will sometimes get out of sync, causing additional reads to return invalid data.

This was caused by a delay between awaiting the DMA read and sending the software STOP signal, which may result in the slave to have time to send a byte of data in between, causing potential miss-alignment. This would then cause subsequent reads to return invalid data.

Async write-reads now no longer send STOP after the initial write, matching the behaviour of the blocking version.
2025-02-15 12:06:49 +01:00
Shaw Drastin
1c1aea62d0 stm32: i2c-v2: Add error handling
Currently when error occurres, we have to wait for timeout, which is
less than ideal. Enable related interrupts, and return Err when error
occurres.
2025-02-12 21:16:18 +08:00
elagil
eba8089601 chore: fix build 2025-01-03 18:18:00 +01:00
Fabian Viöl
3870411a4a stm32/i2c: disable pullup instead of pulldown 2024-10-10 16:12:51 +02:00
Jamie Bird
18ba56534b Fix Formatting Issues 2024-06-21 15:29:02 +01:00
Jamie Bird
060d1f6e6f Fix: Ensure I2C bus is free before master-write operation
The I2C master-write function was failing when executed immediately after an I2C read operation, requiring manual delays to function correctly. This fix introduces a check to ensure the I2C bus is free before initiating the write operation.

According to the RM0399 manual for STM32H7 chips, the BUSY bit (Bit 15 in the I2C ISR register) indicates whether a communication is in progress on the bus. The BUSY bit is set by hardware when a START condition is detected and cleared when a STOP condition is detected or when PE = 0.

This fix prevents the write operation from starting until the BUSY bit is cleared.
2024-06-21 15:09:57 +01:00
Jan Špaček
94007ce6e0 stm32/gpio: refactor AfType 2024-06-16 21:11:55 +02:00
dvdsk
871fe3a549
Add Clone and Copy to Error types
None of them are `non-exaustative`, they are all small enough to be copy
(I estimate none are larger than 4 bytes).
2024-06-06 23:19:07 +02:00
Jan Špaček
41711195e3 stm32/i2c: use new_pin! macro 2024-06-01 19:46:39 +02:00
Jan Špaček
081afca3f0 stm32/rcc: replace generated enable/disable code with runtime info 2024-05-25 18:44:55 +02:00
Dario Nieuwenhuis
45a12fd41f stm32/i2c: remove peripheral generic param. 2024-05-21 01:25:49 +02:00
Dario Nieuwenhuis
b3ca42f8f9 stm32/i2c: add h7rs support. 2024-05-01 16:33:34 +02:00
James Munns
5ce3a6b61e Add workaround for STM32 i2cv1 errata 2024-04-29 12:32:33 +02:00
Dario Nieuwenhuis
5732ee7ca9 Reduce use of the full futures crate. 2024-04-26 23:22:25 +02:00
Dario Nieuwenhuis
913bb19a34 stm32/i2c: remove DMA generic params. 2024-04-15 23:40:12 +02:00
Sebastian Goll
bb5fcce0a0 Use named imports within function to make code easier to read 2024-03-27 10:42:38 +01:00
Sebastian Goll
b52e9a60eb Add missing check for empty buffer in asynchronous read_write() 2024-03-27 10:39:33 +01:00
Sebastian Goll
13636556d9 Mark shared data structure as dead_code for I2C v2 branch 2024-03-27 01:41:13 +01:00
Sebastian Goll
0cfb65abc2 Add transaction stub to I2C v2 2024-03-27 01:36:06 +01:00
Sebastian Goll
54d7d49513 Refactor DMA implementation of I2C v1, clarify flow of code 2024-03-27 01:07:42 +01:00
Sebastian Goll
7e44db099c Move FrameOptions and related function to module itself 2024-03-27 00:35:30 +01:00
Sebastian Goll
b299266cd2 It is not necessary to enable interrupts before registering waker 2024-03-27 00:32:06 +01:00
Sebastian Goll
2e2986c67b It is not necessary to wait for SB and MSL sequentially 2024-03-27 00:32:06 +01:00
Sebastian Goll
c1175bf7d8 It is not necessary to wait for STOP to be fully generated 2024-03-27 00:32:06 +01:00
Sebastian Goll
accec7a840 Implement asynchronous transaction for I2C v1 2024-03-27 00:32:06 +01:00
Sebastian Goll
9c00a40e73 Extract frame options generation into iterator to reuse in async 2024-03-26 22:53:14 +01:00
Sebastian Goll
0885c102d3 Refactor async I2C transfers to use frame options 2024-03-26 22:53:14 +01:00
Sebastian Goll
746ded94b1 Fix minor typos 2024-03-26 22:53:14 +01:00
Dario Nieuwenhuis
2bca875b5f stm32: use private_bounds for sealed traits. 2024-03-23 01:38:51 +01:00
Dario Nieuwenhuis
eca9aac194 Fix warnings in recent nightly. 2024-03-20 16:39:09 +01:00
Sebastian Goll
cff665f2ec Avoid unnecessary double-reference 2024-03-20 13:08:42 +01:00
Sebastian Goll
4eb4108952 Fix build for I2C v2 targets 2024-03-20 03:33:15 +01:00
Sebastian Goll
8f19a2b537 Avoid missing stop condition when write/read with empty read buffer 2024-03-20 02:59:30 +01:00
Sebastian Goll
c96062fbcd Implement blocking transaction handling for I2C v1 2024-03-20 02:59:30 +01:00
Sebastian Goll
7c08616c02 Introduce frame options to control start/stop conditions 2024-03-20 02:55:49 +01:00
Dario Nieuwenhuis
90e96d281f
Merge pull request #2373 from embassy-rs/jamesmunns-patch-2
stm32: Add breadcrumb to i2cv1 investigation
2023-12-28 23:58:19 +01:00
James Munns
a780339103
stm32: Add breadcrumb to i2cv1 investigation
Adds an in-code breadcrumb for https://github.com/embassy-rs/embassy/issues/2372
2023-12-28 23:57:10 +01:00
James Munns
a142be8bb8 Seems to help 2023-12-27 19:12:44 +01:00
Priit Laes
fc724dd707 stm32: i2c: Clean up conditional code a bit
By moving conditional code inside the functions, we can
reduce duplication and in one case we can even eliminate one...
2023-12-19 11:48:58 +02:00
Dario Nieuwenhuis
49534cd405 stm32: more docs. 2023-12-19 00:10:36 +01:00
Dario Nieuwenhuis
124478c5e9 stm32: more docs. 2023-12-18 19:11:23 +01:00
Dario Nieuwenhuis
7044e53af4 stm32/i2c: remove _timeout public API, share more code between v1/v2. 2023-12-18 18:24:55 +01:00
Dario Nieuwenhuis
80c9d04bbd stm32: add some docs. 2023-12-18 00:53:18 +01:00
Dario Nieuwenhuis
c6989dfbca Remove nightly and unstable-traits features in preparation for 1.75. 2023-11-29 17:26:33 +01:00