read MAC address from EEPROM
This commit is contained in:
parent
12b06a0fa9
commit
30faa5b703
34
src/main.rs
Normal file → Executable file
34
src/main.rs
Normal file → Executable file
@ -38,6 +38,9 @@ mod eth;
|
|||||||
mod iir;
|
mod iir;
|
||||||
use iir::*;
|
use iir::*;
|
||||||
|
|
||||||
|
pub mod i2c;
|
||||||
|
mod eeprom;
|
||||||
|
|
||||||
#[cfg(not(feature = "semihosting"))]
|
#[cfg(not(feature = "semihosting"))]
|
||||||
fn init_log() {}
|
fn init_log() {}
|
||||||
|
|
||||||
@ -291,6 +294,20 @@ fn gpio_setup(gpioa: &pac::GPIOA, gpiob: &pac::GPIOB, gpiod: &pac::GPIOD,
|
|||||||
.odr15().low()
|
.odr15().low()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// I2C2: SDA,SCL: PF0,PF1
|
||||||
|
gpiof.moder.modify(|_, w|
|
||||||
|
w.moder0().alternate()
|
||||||
|
.moder1().alternate()
|
||||||
|
);
|
||||||
|
gpiof.afrl.modify(|_, w|
|
||||||
|
w.afr0().af4()
|
||||||
|
.afr1().af4()
|
||||||
|
);
|
||||||
|
gpiof.otyper.modify(|_, w|
|
||||||
|
w.ot0().open_drain()
|
||||||
|
.ot1().open_drain()
|
||||||
|
);
|
||||||
|
|
||||||
// ADC1
|
// ADC1
|
||||||
// SCK: PF6
|
// SCK: PF6
|
||||||
gpiof.moder.modify(|_, w| w.moder7().alternate());
|
gpiof.moder.modify(|_, w| w.moder7().alternate());
|
||||||
@ -524,6 +541,7 @@ macro_rules! create_socket {
|
|||||||
const APP: () = {
|
const APP: () = {
|
||||||
struct Resources {
|
struct Resources {
|
||||||
spi: (pac::SPI1, pac::SPI2, pac::SPI4, pac::SPI5),
|
spi: (pac::SPI1, pac::SPI2, pac::SPI4, pac::SPI5),
|
||||||
|
i2c: pac::I2C2,
|
||||||
ethernet_periph: (pac::ETHERNET_MAC, pac::ETHERNET_DMA, pac::ETHERNET_MTL),
|
ethernet_periph: (pac::ETHERNET_MAC, pac::ETHERNET_DMA, pac::ETHERNET_MTL),
|
||||||
#[init([[0.; 5]; 2])]
|
#[init([[0.; 5]; 2])]
|
||||||
iir_state: [IIRState; 2],
|
iir_state: [IIRState; 2],
|
||||||
@ -611,6 +629,9 @@ const APP: () = {
|
|||||||
|
|
||||||
tim2_setup(&dp.TIM2);
|
tim2_setup(&dp.TIM2);
|
||||||
|
|
||||||
|
let i2c2 = dp.I2C2;
|
||||||
|
i2c::setup(&rcc, &i2c2);
|
||||||
|
|
||||||
eth::setup(&rcc, &dp.SYSCFG);
|
eth::setup(&rcc, &dp.SYSCFG);
|
||||||
eth::setup_pins(&dp.GPIOA, &dp.GPIOB, &dp.GPIOC, &dp.GPIOG);
|
eth::setup_pins(&dp.GPIOA, &dp.GPIOB, &dp.GPIOC, &dp.GPIOG);
|
||||||
|
|
||||||
@ -618,15 +639,24 @@ const APP: () = {
|
|||||||
|
|
||||||
init::LateResources {
|
init::LateResources {
|
||||||
spi: (spi1, spi2, spi4, spi5),
|
spi: (spi1, spi2, spi4, spi5),
|
||||||
|
i2c: i2c2,
|
||||||
ethernet_periph: (dp.ETHERNET_MAC, dp.ETHERNET_DMA, dp.ETHERNET_MTL),
|
ethernet_periph: (dp.ETHERNET_MAC, dp.ETHERNET_DMA, dp.ETHERNET_MTL),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[idle(resources = [ethernet, ethernet_periph, iir_state, iir_ch])]
|
#[idle(resources = [ethernet, ethernet_periph, iir_state, iir_ch, i2c])]
|
||||||
fn idle(c: idle::Context) -> ! {
|
fn idle(c: idle::Context) -> ! {
|
||||||
let (MAC, DMA, MTL) = c.resources.ethernet_periph;
|
let (MAC, DMA, MTL) = c.resources.ethernet_periph;
|
||||||
|
|
||||||
let hardware_addr = net::wire::EthernetAddress([0x10, 0xE2, 0xD5, 0x00, 0x03, 0x00]);
|
let hardware_addr = match eeprom::read_eui48(c.resources.i2c) {
|
||||||
|
Err(_) => {
|
||||||
|
info!("Could not read EEPROM, using default MAC address");
|
||||||
|
net::wire::EthernetAddress([0x10, 0xE2, 0xD5, 0x00, 0x03, 0x00])
|
||||||
|
},
|
||||||
|
Ok(raw_mac) => net::wire::EthernetAddress(raw_mac)
|
||||||
|
};
|
||||||
|
info!("MAC: {}", hardware_addr);
|
||||||
|
|
||||||
unsafe { c.resources.ethernet.init(hardware_addr, MAC, DMA, MTL) };
|
unsafe { c.resources.ethernet.init(hardware_addr, MAC, DMA, MTL) };
|
||||||
let mut neighbor_cache_storage = [None; 8];
|
let mut neighbor_cache_storage = [None; 8];
|
||||||
let neighbor_cache = net::iface::NeighborCache::new(&mut neighbor_cache_storage[..]);
|
let neighbor_cache = net::iface::NeighborCache::new(&mut neighbor_cache_storage[..]);
|
||||||
|
Loading…
Reference in New Issue
Block a user