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
106fn 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
5863const BLOCK_SIZE : u32 = 65536 ;
5964const SECTOR_SIZE : u32 = 4096 ;
6065const 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