aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordatdenkikniet <[email protected]>2025-11-12 21:43:50 +0100
committerdatdenkikniet <[email protected]>2025-11-13 23:08:33 +0100
commitaad63ecd597a5b12663bf12329327de6d9cd65f2 (patch)
treecc5440333f2afa98690ec1b40583a5ca1984f4bd
parent3f9865f9d8e9be95cad25df3f535fbe01087ed83 (diff)
Add SMA peripheral
-rw-r--r--embassy-stm32/build.rs5
-rw-r--r--embassy-stm32/src/eth/mod.rs1
-rw-r--r--embassy-stm32/src/eth/sma/mod.rs33
3 files changed, 39 insertions, 0 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index 1e11eb8dc..9dd94941c 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -170,6 +170,11 @@ fn main() {
170 } 170 }
171 singletons.push(p.name.to_string()); 171 singletons.push(p.name.to_string());
172 } 172 }
173
174 "eth" => {
175 singletons.push(p.name.to_string());
176 singletons.push("ETH_SMA".to_string());
177 }
173 //"dbgmcu" => {} 178 //"dbgmcu" => {}
174 //"syscfg" => {} 179 //"syscfg" => {}
175 //"dma" => {} 180 //"dma" => {}
diff --git a/embassy-stm32/src/eth/mod.rs b/embassy-stm32/src/eth/mod.rs
index 10b3a0517..bef6a02b2 100644
--- a/embassy-stm32/src/eth/mod.rs
+++ b/embassy-stm32/src/eth/mod.rs
@@ -5,6 +5,7 @@
5#[cfg_attr(eth_v2, path = "v2/mod.rs")] 5#[cfg_attr(eth_v2, path = "v2/mod.rs")]
6mod _version; 6mod _version;
7mod generic_phy; 7mod generic_phy;
8mod sma;
8 9
9use core::mem::MaybeUninit; 10use core::mem::MaybeUninit;
10use core::task::Context; 11use core::task::Context;
diff --git a/embassy-stm32/src/eth/sma/mod.rs b/embassy-stm32/src/eth/sma/mod.rs
new file mode 100644
index 000000000..106a6b2bd
--- /dev/null
+++ b/embassy-stm32/src/eth/sma/mod.rs
@@ -0,0 +1,33 @@
1//! Station Management Agent (also known as MDIO or SMI).
2
3#![macro_use]
4
5use embassy_hal_internal::PeripheralType;
6#[cfg(eth_v2)]
7pub(crate) use regs::{Macmdioar as AddressRegister, Macmdiodr as DataRegister};
8#[cfg(any(eth_v1a, eth_v1b, eth_v1c))]
9pub(crate) use regs::{Macmiiar as AddressRegister, Macmiidr as DataRegister};
10use stm32_metapac::common::{RW, Reg};
11use stm32_metapac::eth::regs;
12
13trait SealedInstance {
14 fn regs() -> (Reg<AddressRegister, RW>, Reg<DataRegister, RW>);
15}
16
17/// MDIO instance.
18#[allow(private_bounds)]
19pub trait Instance: SealedInstance + PeripheralType + Send + 'static {}
20
21impl SealedInstance for crate::peripherals::ETH_SMA {
22 fn regs() -> (Reg<AddressRegister, RW>, Reg<DataRegister, RW>) {
23 let mac = crate::pac::ETH.ethernet_mac();
24
25 #[cfg(any(eth_v1a, eth_v1b, eth_v1c))]
26 return (mac.macmiiar(), mac.macmiidr());
27
28 #[cfg(eth_v2)]
29 return (mac.macmdioar(), mac.macmdiodr());
30 }
31}
32
33impl Instance for crate::peripherals::ETH_SMA {}