Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
53ee80e3
Commit
53ee80e3
authored
Dec 16, 2015
by
Terry Ellison
Browse files
Merge pull request #841 from jmattsson/flash-addr-cleanup
Cleanup/minor correction: Flash addr cleanup
parents
4461fcd5
fd911312
Changes
8
Hide whitespace changes
Inline
Side-by-side
app/platform/common.c
View file @
53ee80e3
...
...
@@ -102,15 +102,14 @@ extern char _flash_used_end[];
// Return the sector number, as well as the start and end address of the sector
static
uint32_t
flashh_find_sector
(
uint32_t
address
,
uint32_t
*
pstart
,
uint32_t
*
pend
)
{
address
-=
INTERNAL_FLASH_START_ADDRESS
;
#ifdef INTERNAL_FLASH_SECTOR_SIZE
// All the sectors in the flash have the same size, so just align the address
uint32_t
sect_id
=
address
/
INTERNAL_FLASH_SECTOR_SIZE
;
if
(
pstart
)
*
pstart
=
sect_id
*
INTERNAL_FLASH_SECTOR_SIZE
+
INTERNAL_FLASH_START_ADDRESS
;
*
pstart
=
sect_id
*
INTERNAL_FLASH_SECTOR_SIZE
;
if
(
pend
)
*
pend
=
(
sect_id
+
1
)
*
INTERNAL_FLASH_SECTOR_SIZE
+
INTERNAL_FLASH_START_ADDRESS
-
1
;
*
pend
=
(
sect_id
+
1
)
*
INTERNAL_FLASH_SECTOR_SIZE
-
1
;
return
sect_id
;
#else // #ifdef INTERNAL_FLASH_SECTOR_SIZE
// The flash has blocks of different size
...
...
@@ -121,9 +120,9 @@ static uint32_t flashh_find_sector( uint32_t address, uint32_t *pstart, uint32_t
while
(
(
total
<=
address
)
&&
(
i
<
sizeof
(
flash_sect_size
)
/
sizeof
(
uint32_t
)
)
)
total
+=
flash_sect_size
[
i
++
];
if
(
pstart
)
*
pstart
=
(
total
-
flash_sect_size
[
i
-
1
]
)
+
INTERNAL_FLASH_START_ADDRESS
;
*
pstart
=
(
total
-
flash_sect_size
[
i
-
1
]
);
if
(
pend
)
*
pend
=
total
+
INTERNAL_FLASH_START_ADDRESS
-
1
;
*
pend
=
total
-
1
;
return
i
-
1
;
#endif // #ifdef INTERNAL_FLASH_SECTOR_SIZE
}
...
...
@@ -150,13 +149,12 @@ uint32_t platform_flash_get_first_free_block_address( uint32_t *psect )
uint32_t
start
,
end
,
sect
;
NODE_DBG
(
"_flash_used_end:%08x
\n
"
,
(
uint32_t
)
_flash_used_end
);
if
(
_flash_used_end
>
0
){
// find the used sector
// sect = flashh_find_sector( ( uint32_t )flash_used_size + INTERNAL_FLASH_START_ADDRESS - 1, NULL, &end );
sect
=
flashh_find_sector
(
(
uint32_t
)
_flash_used_end
-
1
,
NULL
,
&
end
);
sect
=
flashh_find_sector
(
platform_flash_mapped2phys
(
(
uint32_t
)
_flash_used_end
-
1
),
NULL
,
&
end
);
if
(
psect
)
*
psect
=
sect
+
1
;
return
end
+
1
;
}
else
{
sect
=
flashh_find_sector
(
INTERNAL_FLASH_START_ADDRESS
,
&
start
,
NULL
);
// find the first free sector
sect
=
flashh_find_sector
(
0
,
&
start
,
NULL
);
// find the first free sector
if
(
psect
)
*
psect
=
sect
;
return
start
;
...
...
app/platform/cpu_esp8266.h
View file @
53ee80e3
...
...
@@ -53,7 +53,7 @@
#define INTERNAL_FLASH_READ_UNIT_SIZE 4
#define INTERNAL_FLASH_SIZE ( (SYS_PARAM_SEC_START) * INTERNAL_FLASH_SECTOR_SIZE )
#define INTERNAL_FLASH_
START
_ADDRESS 0x40200000
#define INTERNAL_FLASH_
MAPPED
_ADDRESS 0x40200000
// SpiFlashOpResult spi_flash_erase_sector(uint16 sec);
// SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
...
...
@@ -68,4 +68,9 @@
#define flash_read spi_flash_read
#endif // defined(FLASH_SAFE_API)
#define CACHE_FLASH_CTRL_REG 0x3ff0000c
#define CACHE_FLASH_ACTIVE 0x00000100
#define CACHE_FLASH_MAPPED0 0x02000000
#define CACHE_FLASH_MAPPED1 0x00010000
#endif // #ifndef __CPU_ESP8266_H__
app/platform/flash_api.c
View file @
53ee80e3
...
...
@@ -96,11 +96,6 @@ SpiFlashOpResult flash_safe_erase_sector(uint16 sec)
SPIFlashInfo
flash_rom_getinfo
(
void
)
{
volatile
SPIFlashInfo
spi_flash_info
ICACHE_STORE_ATTR
;
// Don't use it before cache read disabled
// FLASH_DISABLE_CACHE();
// spi_flash_info = *((SPIFlashInfo *)(FLASH_ADDRESS_START_MAP));
// FLASH_ENABLE_CACHE();
// Needn't safe mode.
spi_flash_read
(
0
,
(
uint32
*
)(
&
spi_flash_info
),
sizeof
(
spi_flash_info
));
return
spi_flash_info
;
}
...
...
app/platform/flash_api.h
View file @
53ee80e3
...
...
@@ -4,8 +4,6 @@
#include "user_config.h"
#include "cpu_esp8266.h"
#define FLASH_ADDRESS_START_MAP (INTERNAL_FLASH_START_ADDRESS)
#define FLASH_SIZE_2MBIT (2 * 1024 * 1024)
#define FLASH_SIZE_4MBIT (4 * 1024 * 1024)
#define FLASH_SIZE_8MBIT (8 * 1024 * 1024)
...
...
app/platform/platform.c
View file @
53ee80e3
...
...
@@ -514,12 +514,11 @@ int platform_spi_transaction( uint8_t id, uint8_t cmd_bitlen, spi_data_type cmd_
*/
uint32_t
platform_s_flash_write
(
const
void
*
from
,
uint32_t
toaddr
,
uint32_t
size
)
{
toaddr
-=
INTERNAL_FLASH_START_ADDRESS
;
SpiFlashOpResult
r
;
const
uint32_t
blkmask
=
INTERNAL_FLASH_WRITE_UNIT_SIZE
-
1
;
uint32_t
*
apbuf
=
NULL
;
uint32_t
fromaddr
=
(
uint32_t
)
from
;
if
(
(
fromaddr
&
blkmask
)
||
(
fromaddr
>=
INTERNAL_FLASH_
START
_ADDRESS
))
{
if
(
(
fromaddr
&
blkmask
)
||
(
fromaddr
>=
INTERNAL_FLASH_
MAPPED
_ADDRESS
))
{
apbuf
=
(
uint32_t
*
)
c_malloc
(
size
);
if
(
!
apbuf
)
return
0
;
...
...
@@ -532,7 +531,7 @@ uint32_t platform_s_flash_write( const void *from, uint32_t toaddr, uint32_t siz
if
(
SPI_FLASH_RESULT_OK
==
r
)
return
size
;
else
{
NODE_ERR
(
"ERROR in flash_write: r=%d at %08X
\n
"
,
(
int
)
r
,
(
unsigned
)
toaddr
+
INTERNAL_FLASH_START_ADDRESS
);
NODE_ERR
(
"ERROR in flash_write: r=%d at %08X
\n
"
,
(
int
)
r
,
(
unsigned
)
toaddr
);
return
0
;
}
}
...
...
@@ -547,7 +546,6 @@ uint32_t platform_s_flash_read( void *to, uint32_t fromaddr, uint32_t size )
if
(
size
==
0
)
return
0
;
fromaddr
-=
INTERNAL_FLASH_START_ADDRESS
;
SpiFlashOpResult
r
;
system_soft_wdt_feed
();
...
...
@@ -571,7 +569,7 @@ uint32_t platform_s_flash_read( void *to, uint32_t fromaddr, uint32_t size )
if
(
SPI_FLASH_RESULT_OK
==
r
)
return
size
;
else
{
NODE_ERR
(
"ERROR in flash_read: r=%d at %08X
\n
"
,
(
int
)
r
,
(
unsigned
)
fromaddr
+
INTERNAL_FLASH_START_ADDRESS
);
NODE_ERR
(
"ERROR in flash_read: r=%d at %08X
\n
"
,
(
int
)
r
,
(
unsigned
)
fromaddr
);
return
0
;
}
}
...
...
@@ -581,3 +579,14 @@ int platform_flash_erase_sector( uint32_t sector_id )
system_soft_wdt_feed
();
return
flash_erase
(
sector_id
)
==
SPI_FLASH_RESULT_OK
?
PLATFORM_OK
:
PLATFORM_ERR
;
}
uint32_t
platform_flash_mapped2phys
(
uint32_t
mapped_addr
)
{
uint32_t
cache_ctrl
=
READ_PERI_REG
(
CACHE_FLASH_CTRL_REG
);
if
(
!
(
cache_ctrl
&
CACHE_FLASH_ACTIVE
))
return
-
1
;
bool
b0
=
(
cache_ctrl
&
CACHE_FLASH_MAPPED0
)
?
1
:
0
;
bool
b1
=
(
cache_ctrl
&
CACHE_FLASH_MAPPED1
)
?
1
:
0
;
uint32_t
meg
=
(
b1
<<
1
)
|
b0
;
return
mapped_addr
-
INTERNAL_FLASH_MAPPED_ADDRESS
+
meg
*
0x100000
;
}
app/platform/platform.h
View file @
53ee80e3
...
...
@@ -237,6 +237,16 @@ uint32_t platform_s_flash_read( void *to, uint32_t fromaddr, uint32_t size );
uint32_t
platform_flash_get_num_sectors
(
void
);
int
platform_flash_erase_sector
(
uint32_t
sector_id
);
/**
* Translated a mapped address to a physical flash address, based on the
* current flash cache mapping.
* @param mapped_addr Address to translate (>= INTERNAL_FLASH_MAPPED_ADDRESS)
* @return the corresponding physical flash address, or -1 if flash cache is
* not currently active.
* @see Cache_Read_Enable.
*/
uint32_t
platform_flash_mapped2phys
(
uint32_t
mapped_addr
);
// *****************************************************************************
// Allocator support
...
...
app/spiffs/spiffs.c
View file @
53ee80e3
...
...
@@ -51,9 +51,9 @@ void myspiffs_mount() {
#else
cfg
.
phys_addr
=
(
u32_t
)
platform_flash_get_first_free_block_address
(
NULL
);
#endif
cfg
.
phys_addr
+=
0x3
000
;
cfg
.
phys_addr
+=
0x3
FFF
;
cfg
.
phys_addr
&=
0xFFFFC000
;
// align to 4 sector.
cfg
.
phys_size
=
INTERNAL_FLASH_SIZE
-
(
(
u32_t
)
cfg
.
phys_addr
-
INTERNAL_FLASH_START_ADDRESS
);
cfg
.
phys_size
=
INTERNAL_FLASH_SIZE
-
(
(
u32_t
)
cfg
.
phys_addr
);
cfg
.
phys_erase_block
=
INTERNAL_FLASH_SECTOR_SIZE
;
// according to datasheet
cfg
.
log_block_size
=
INTERNAL_FLASH_SECTOR_SIZE
;
// let us not complicate things
cfg
.
log_page_size
=
LOG_PAGE_SIZE
;
// as we said
...
...
@@ -94,10 +94,10 @@ int myspiffs_format( void )
#else
sect_first
=
(
u32_t
)
platform_flash_get_first_free_block_address
(
NULL
);
#endif
sect_first
+=
0x3
000
;
sect_first
+=
0x3
FFF
;
sect_first
&=
0xFFFFC000
;
// align to 4 sector.
sect_first
=
platform_flash_get_sector_of_address
(
sect_first
);
sect_last
=
INTERNAL_FLASH_SIZE
+
INTERNAL_FLASH_START_ADDRESS
-
4
;
sect_last
=
INTERNAL_FLASH_SIZE
-
SYS_PARAM_SEC_NUM
;
sect_last
=
platform_flash_get_sector_of_address
(
sect_last
);
NODE_DBG
(
"sect_first: %x, sect_last: %x
\n
"
,
sect_first
,
sect_last
);
while
(
sect_first
<=
sect_last
)
...
...
app/wofs/romfs.c
View file @
53ee80e3
...
...
@@ -521,7 +521,7 @@ int romfs_init( void )
#if defined( BUILD_WOFS )
// Get the start address and size of WOFS and register it
wofs_fsdata
.
pbase
=
(
uint8_t
*
)
platform_flash_get_first_free_block_address
(
NULL
);
wofs_fsdata
.
max_size
=
INTERNAL_FLASH_SIZE
-
(
(
uint32_t
)
wofs_fsdata
.
pbase
-
INTERNAL_FLASH_START_ADDRESS
);
wofs_fsdata
.
max_size
=
INTERNAL_FLASH_SIZE
-
(
(
uint32_t
)
wofs_fsdata
.
pbase
);
NODE_DBG
(
"wofs.pbase:%x,max:%x
\n
"
,
wofs_fsdata
.
pbase
,
wofs_fsdata
.
max_size
);
#endif // ifdef BUILD_WOFS
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment