Move sd card work to task
This commit is contained in:
parent
f2bf073676
commit
5ef267736b
27
src/main.rs
27
src/main.rs
|
@ -10,8 +10,10 @@ use byteorder::ByteOrder;
|
||||||
use defmt::*;
|
use defmt::*;
|
||||||
use embassy_embedded_hal::SetConfig;
|
use embassy_embedded_hal::SetConfig;
|
||||||
use embassy_executor::Spawner;
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_rp::peripherals::{PIN_10, PIN_11, PIN_12, PIN_16, SPI1};
|
||||||
use embassy_rp::spi::Spi;
|
use embassy_rp::spi::Spi;
|
||||||
use embassy_rp::{gpio, spi};
|
use embassy_rp::{gpio, spi};
|
||||||
|
use embassy_time::{Duration, Timer};
|
||||||
use embedded_hal_bus::spi::ExclusiveDevice;
|
use embedded_hal_bus::spi::ExclusiveDevice;
|
||||||
use embedded_sdmmc::sdcard::{DummyCsPin, SdCard};
|
use embedded_sdmmc::sdcard::{DummyCsPin, SdCard};
|
||||||
use embedded_sdmmc::{Block, BlockDevice, BlockIdx, VolumeIdx};
|
use embedded_sdmmc::{Block, BlockDevice, BlockIdx, VolumeIdx};
|
||||||
|
@ -34,20 +36,32 @@ impl embedded_sdmmc::TimeSource for DummyTimesource {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[embassy_executor::main]
|
#[embassy_executor::main]
|
||||||
async fn main(_spawner: Spawner) {
|
async fn main(spawner: Spawner) {
|
||||||
embassy_rp::pac::SIO.spinlock(31).write_value(1);
|
embassy_rp::pac::SIO.spinlock(31).write_value(1);
|
||||||
let p = embassy_rp::init(Default::default());
|
let p = embassy_rp::init(Default::default());
|
||||||
|
|
||||||
|
spawner
|
||||||
|
.spawn(write_to_sd(p.SPI1, p.PIN_10, p.PIN_11, p.PIN_12, p.PIN_16))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
debug!("TASK ENDED: Main")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[embassy_executor::task]
|
||||||
|
async fn write_to_sd(spi1: SPI1, pin10: PIN_10, pin11: PIN_11, pin12: PIN_12, pin16: PIN_16) {
|
||||||
|
Timer::after(Duration::from_secs(2)).await;
|
||||||
|
|
||||||
// SPI clock needs to be running at <= 400kHz during initialization
|
// SPI clock needs to be running at <= 400kHz during initialization
|
||||||
let mut config = spi::Config::default();
|
let mut config = spi::Config::default();
|
||||||
config.frequency = 400_000;
|
config.frequency = 400_000;
|
||||||
let spi = Spi::new_blocking(p.SPI1, p.PIN_10, p.PIN_11, p.PIN_12, config);
|
let spi = Spi::new_blocking(spi1, pin10, pin11, pin12, config);
|
||||||
// Use a dummy cs pin here, for embedded-hal SpiDevice compatibility reasons
|
// Use a dummy cs pin here, for embedded-hal SpiDevice compatibility reasons
|
||||||
let spi_dev = ExclusiveDevice::new_no_delay(spi, DummyCsPin);
|
let spi_dev = ExclusiveDevice::new_no_delay(spi, DummyCsPin);
|
||||||
// Real cs pin
|
// Real cs pin
|
||||||
let cs = Output::new(p.PIN_16, Level::High);
|
let cs = Output::new(pin16, Level::High);
|
||||||
|
|
||||||
let sdcard = SdCard::new(spi_dev, cs, embassy_time::Delay);
|
let sdcard = SdCard::new(spi_dev, cs, embassy_time::Delay);
|
||||||
|
|
||||||
info!("Card size is {} bytes", sdcard.num_bytes().unwrap());
|
info!("Card size is {} bytes", sdcard.num_bytes().unwrap());
|
||||||
|
|
||||||
// Now that the card is initialized, the SPI clock can go faster
|
// Now that the card is initialized, the SPI clock can go faster
|
||||||
|
@ -102,8 +116,7 @@ async fn main(_spawner: Spawner) {
|
||||||
|
|
||||||
my_file.write(b"Another one\n").unwrap();
|
my_file.write(b"Another one\n").unwrap();
|
||||||
}
|
}
|
||||||
|
debug!("TASK ENDED: SdCard")
|
||||||
info!("Program end")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn valid_volumes<D>(block_device: &mut D) -> [Option<(VolumeIdx, [u8; 11])>; 4]
|
pub fn valid_volumes<D>(block_device: &mut D) -> [Option<(VolumeIdx, [u8; 11])>; 4]
|
||||||
|
@ -111,12 +124,12 @@ where
|
||||||
D: BlockDevice,
|
D: BlockDevice,
|
||||||
{
|
{
|
||||||
let mut res = [None; 4];
|
let mut res = [None; 4];
|
||||||
for i in 0..4 {
|
(0..4).for_each(|i| {
|
||||||
let index_and_label = read_volume_label(block_device, VolumeIdx(i))
|
let index_and_label = read_volume_label(block_device, VolumeIdx(i))
|
||||||
.ok()
|
.ok()
|
||||||
.map(|label| (VolumeIdx(i), label));
|
.map(|label| (VolumeIdx(i), label));
|
||||||
res[i] = index_and_label;
|
res[i] = index_and_label;
|
||||||
}
|
});
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
/// Read out the volume label a partition
|
/// Read out the volume label a partition
|
||||||
|
|
Loading…
Reference in a new issue