Skip to content

Commit c29c100

Browse files
authored
Merge pull request #19 from rp-rs/use-flash-algorithm
Use flash-algorithm crate
2 parents 0c2ac40 + e7225ac commit c29c100

File tree

3 files changed

+26
-136
lines changed

3 files changed

+26
-136
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ version = "0.1.0"
77

88
[dependencies]
99
cortex-m = "0.7.0"
10+
flash-algorithm = "0.4.0"
1011

1112
# this lets you use `cargo fix`!
1213
[[bin]]

src/algo.rs

Lines changed: 0 additions & 124 deletions
This file was deleted.

src/main.rs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
#![no_std]
22
#![no_main]
33

4-
mod algo;
5-
6-
use core::mem::MaybeUninit;
7-
8-
use self::algo::*;
4+
use flash_algorithm::*;
95

106
fn find_func<T>(tag: [u8; 2]) -> Option<T> {
117
let tag = u16::from_le_bytes(tag) as u32;
@@ -53,15 +49,23 @@ struct RP2040Algo {
5349
funcs: ROMFuncs,
5450
}
5551

56-
algo!(RP2040Algo);
52+
algorithm!(RP2040Algo, {
53+
flash_address: 0x1000_0000,
54+
flash_size: 0x0100_0000,
55+
page_size: 0x100,
56+
empty_value: 0xFF,
57+
sectors: [{
58+
size: 0x1000,
59+
address: 0x10000000,
60+
}]
61+
});
5762

5863
const BLOCK_SIZE: u32 = 65536;
5964
const SECTOR_SIZE: u32 = 4096;
6065
const BLOCK_ERASE_CMD: u8 = 0xd8;
61-
const FLASH_BASE: u32 = 0x1000_0000;
6266

63-
impl FlashAlgo for RP2040Algo {
64-
fn new(_address: u32, _clock: u32, _function: u32) -> Result<Self, ErrorCode> {
67+
impl FlashAlgorithm for RP2040Algo {
68+
fn new(_address: u32, _clock: u32, _function: Function) -> Result<Self, ErrorCode> {
6569
let Some(funcs) = ROMFuncs::load() else {
6670
return Err(ErrorCode::new(1).unwrap());
6771
};
@@ -76,12 +80,21 @@ impl FlashAlgo for RP2040Algo {
7680
}
7781

7882
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
79-
(self.funcs.flash_range_erase)(addr - FLASH_BASE, SECTOR_SIZE, BLOCK_SIZE, BLOCK_ERASE_CMD);
83+
(self.funcs.flash_range_erase)(
84+
addr - FlashDevice.dev_addr,
85+
SECTOR_SIZE,
86+
BLOCK_SIZE,
87+
BLOCK_ERASE_CMD,
88+
);
8089
Ok(())
8190
}
8291

83-
fn program_page(&mut self, addr: u32, size: u32, data: *const u8) -> Result<(), ErrorCode> {
84-
(self.funcs.flash_range_program)(addr - FLASH_BASE, data, size);
92+
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
93+
(self.funcs.flash_range_program)(
94+
addr - FlashDevice.dev_addr,
95+
data.as_ptr(),
96+
data.len() as u32,
97+
);
8598
Ok(())
8699
}
87100
}

0 commit comments

Comments
 (0)