@@ -3,7 +3,6 @@ extern "C" {
33 // fn esp_rom_spiflash_write_encrypted_enable();
44 // fn esp_rom_spiflash_write_encrypted_disable();
55 // fn esp_rom_spiflash_write_encrypted(addr: u32, data: *const u8, len: u32);
6- // fn esp_rom_spiflash_config_param();
76 // fn esp_rom_spiflash_select_qio_pins();
87 // fn esp_rom_spi_flash_auto_sus_res();
98 // fn esp_rom_spi_flash_send_resume();
@@ -27,6 +26,15 @@ extern "C" {
2726 // fn esp_rom_spiflash_lock(); // can't find in idf defs?
2827 fn esp_rom_spiflash_attach ( config : u32 , legacy : bool ) ;
2928
29+ fn esp_rom_spiflash_config_param (
30+ device_id : u32 ,
31+ chip_size : u32 ,
32+ block_size : u32 ,
33+ sector_size : u32 ,
34+ page_size : u32 ,
35+ status_mask : u32 ,
36+ ) -> u32 ;
37+
3038 #[ cfg( any(
3139 feature = "esp32" ,
3240 feature = "esp32s2" ,
@@ -36,7 +44,7 @@ extern "C" {
3644 fn ets_efuse_get_spiconfig ( ) -> u32 ;
3745}
3846
39- pub fn attach ( ) {
47+ pub fn attach ( ) -> i32 {
4048 #[ cfg( any(
4149 feature = "esp32" ,
4250 feature = "esp32s2" ,
@@ -50,7 +58,23 @@ pub fn attach() {
5058
5159 // TODO: raise CPU frequency
5260
53- unsafe { esp_rom_spiflash_attach ( spiconfig, false ) } ;
61+ let config_result = unsafe {
62+ esp_rom_spiflash_config_param (
63+ 0 ,
64+ crate :: properties:: FLASH_SIZE , // total_size
65+ crate :: properties:: FLASH_BLOCK_SIZE , // block_size
66+ crate :: properties:: FLASH_SECTOR_SIZE , // sector_size
67+ crate :: properties:: PAGE_SIZE , // page_size
68+ crate :: properties:: FLASH_STATUS_MASK , // status_mask
69+ )
70+ } ;
71+
72+ if config_result == 0 {
73+ unsafe { esp_rom_spiflash_attach ( spiconfig, false ) } ;
74+ 0
75+ } else {
76+ -1
77+ }
5478}
5579
5680pub fn erase_block ( adr : u32 ) -> i32 {
0 commit comments