Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
a93e62c4
Commit
a93e62c4
authored
Dec 31, 2014
by
HuangRui
Browse files
Add node.flashid() and node.flashsize().
parent
edff2caa
Changes
3
Hide whitespace changes
Inline
Side-by-side
app/modules/node.c
View file @
a93e62c4
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
#include "romfs.h"
#include "romfs.h"
#include "c_string.h"
#include "c_string.h"
#include "driver/uart.h"
#include "driver/uart.h"
#include "spi_flash.h"
#include "flash_api.h"
// Lua: restart()
// Lua: restart()
static
int
ICACHE_FLASH_ATTR
node_restart
(
lua_State
*
L
)
static
int
ICACHE_FLASH_ATTR
node_restart
(
lua_State
*
L
)
...
@@ -38,6 +40,31 @@ static int ICACHE_FLASH_ATTR node_chipid( lua_State* L )
...
@@ -38,6 +40,31 @@ static int ICACHE_FLASH_ATTR node_chipid( lua_State* L )
return
1
;
return
1
;
}
}
// Lua: flashid()
static
int
ICACHE_FLASH_ATTR
node_flashid
(
lua_State
*
L
)
{
uint32_t
id
=
spi_flash_get_id
();
lua_pushinteger
(
L
,
id
);
return
1
;
}
// Lua: flashsize()
static
int
ICACHE_FLASH_ATTR
node_flashsize
(
lua_State
*
L
)
{
//uint32_t sz = 0;
//if(lua_type(L, 1) == LUA_TNUMBER)
//{
// sz = luaL_checkinteger(L, 1);
// if(sz > 0)
// {
// flash_set_size_byte(sz);
// }
//}
uint32_t
sz
=
flash_get_size_byte
();
lua_pushinteger
(
L
,
sz
);
return
1
;
}
// Lua: heap()
// Lua: heap()
static
int
ICACHE_FLASH_ATTR
node_heap
(
lua_State
*
L
)
static
int
ICACHE_FLASH_ATTR
node_heap
(
lua_State
*
L
)
{
{
...
@@ -238,6 +265,8 @@ const LUA_REG_TYPE node_map[] =
...
@@ -238,6 +265,8 @@ const LUA_REG_TYPE node_map[] =
{
LSTRKEY
(
"restart"
),
LFUNCVAL
(
node_restart
)
},
{
LSTRKEY
(
"restart"
),
LFUNCVAL
(
node_restart
)
},
{
LSTRKEY
(
"dsleep"
),
LFUNCVAL
(
node_deepsleep
)
},
{
LSTRKEY
(
"dsleep"
),
LFUNCVAL
(
node_deepsleep
)
},
{
LSTRKEY
(
"chipid"
),
LFUNCVAL
(
node_chipid
)
},
{
LSTRKEY
(
"chipid"
),
LFUNCVAL
(
node_chipid
)
},
{
LSTRKEY
(
"flashid"
),
LFUNCVAL
(
node_flashid
)
},
{
LSTRKEY
(
"flashsize"
),
LFUNCVAL
(
node_flashsize
)
},
{
LSTRKEY
(
"heap"
),
LFUNCVAL
(
node_heap
)
},
{
LSTRKEY
(
"heap"
),
LFUNCVAL
(
node_heap
)
},
{
LSTRKEY
(
"key"
),
LFUNCVAL
(
node_key
)
},
{
LSTRKEY
(
"key"
),
LFUNCVAL
(
node_key
)
},
{
LSTRKEY
(
"led"
),
LFUNCVAL
(
node_led
)
},
{
LSTRKEY
(
"led"
),
LFUNCVAL
(
node_led
)
},
...
...
app/platform/flash_api.c
View file @
a93e62c4
/******************************************************************************
/******************************************************************************
* Flash api for NodeMCU
* Flash api for NodeMCU
* NodeMCU Team
* 2014-12-31
*******************************************************************************/
*******************************************************************************/
#include "user_config.h"
#include "user_config.h"
#include "flash_api.h"
#include "flash_api.h"
#include "spi_flash.h"
#include "spi_flash.h"
#include "c_stdio.h"
SPIFlashInfo
*
ICACHE_FLASH_ATTR
SPIFlashInfo
*
ICACHE_FLASH_ATTR
flash_get_info
()
flash_get_info
(
void
)
{
{
static
SPIFlashInfo
spi_flash_info
;
static
SPIFlashInfo
spi_flash_info
;
static
bool
is_spi_flash_info_initialized
=
false
;
static
bool
is_spi_flash_info_initialized
=
false
;
...
@@ -19,8 +23,15 @@ flash_get_info()
...
@@ -19,8 +23,15 @@ flash_get_info()
return
&
spi_flash_info
;
return
&
spi_flash_info
;
}
}
uint8_t
ICACHE_FLASH_ATTR
flash_get_size
(
void
)
{
SPIFlashInfo
*
p_spi_flash_info
=
flash_get_info
();
return
p_spi_flash_info
->
size
;
}
uint32_t
ICACHE_FLASH_ATTR
uint32_t
ICACHE_FLASH_ATTR
flash_get_size_byte
()
flash_get_size_byte
(
void
)
{
{
static
uint32_t
flash_size
=
0
;
static
uint32_t
flash_size
=
0
;
// Make the code more fast
// Make the code more fast
...
@@ -58,8 +69,69 @@ flash_get_size_byte()
...
@@ -58,8 +69,69 @@ flash_get_size_byte()
return
flash_size
;
return
flash_size
;
}
}
bool
ICACHE_FLASH_ATTR
flash_set_size
(
uint8_t
size
)
{
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// If you don't know what you're doing, your nodemcu may turn into stone ...
c_printf
(
"
\n
Set size!!! %d
\n
"
,
size
);
uint8_t
data
[
SPI_FLASH_SEC_SIZE
];
SPIRead
(
0
,
data
,
sizeof
(
data
));
SPIFlashInfo
*
p_spi_flash_info
=
(
SPIFlashInfo
*
)(
data
);
p_spi_flash_info
->
size
=
size
;
SPIEraseSector
(
0
);
SPIWrite
(
data
,
0
,
sizeof
(
data
));
//p_spi_flash_info = flash_get_info();
//p_spi_flash_info->size = size;
return
true
;
}
bool
ICACHE_FLASH_ATTR
flash_set_size_byte
(
uint32_t
size
)
{
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// If you don't know what you're doing, your nodemcu may turn into stone ...
bool
result
=
true
;
uint32_t
flash_size
=
0
;
switch
(
size
)
{
case
256
*
1024
:
// 2Mbit, 256kByte
flash_size
=
SIZE_2MBIT
;
flash_set_size
(
flash_size
);
break
;
case
512
*
1024
:
// 4Mbit, 512kByte
flash_size
=
SIZE_4MBIT
;
flash_set_size
(
flash_size
);
break
;
case
1
*
1024
*
1024
:
// 8Mbit, 1MByte
flash_size
=
SIZE_8MBIT
;
flash_set_size
(
flash_size
);
break
;
case
2
*
1024
*
1024
:
// 16Mbit, 2MByte
flash_size
=
SIZE_16MBIT
;
flash_set_size
(
flash_size
);
break
;
case
4
*
1024
*
1024
:
// 32Mbit, 4MByte
flash_size
=
SIZE_32MBIT
;
flash_set_size
(
flash_size
);
break
;
default:
// Unknown flash size.
result
=
false
;
break
;
}
return
result
;
}
uint16_t
ICACHE_FLASH_ATTR
uint16_t
ICACHE_FLASH_ATTR
flash_get_sec_num
()
flash_get_sec_num
(
void
)
{
{
static
uint16_t
result
=
0
;
static
uint16_t
result
=
0
;
// Make the code more fast
// Make the code more fast
...
@@ -69,3 +141,92 @@ flash_get_sec_num()
...
@@ -69,3 +141,92 @@ flash_get_sec_num()
}
}
return
result
;
return
result
;
}
}
uint8_t
ICACHE_FLASH_ATTR
flash_get_mode
(
void
)
{
SPIFlashInfo
*
p_spi_flash_info
=
flash_get_info
();
switch
(
p_spi_flash_info
->
mode
)
{
// Reserved for future use
case
MODE_QIO
:
break
;
case
MODE_QOUT
:
break
;
case
MODE_DIO
:
break
;
case
MODE_DOUT
:
break
;
}
return
p_spi_flash_info
->
mode
;
}
uint32_t
ICACHE_FLASH_ATTR
flash_get_speed
(
void
)
{
uint32_t
speed
=
0
;
SPIFlashInfo
*
p_spi_flash_info
=
flash_get_info
();
switch
(
p_spi_flash_info
->
speed
)
{
case
SPEED_40MHZ
:
// 40MHz
speed
=
40000000
;
break
;
case
SPEED_26MHZ
:
//26.7MHz
speed
=
26700000
;
break
;
case
SPEED_20MHZ
:
// 20MHz
speed
=
20000000
;
break
;
case
SPEED_80MHZ
:
//80MHz
speed
=
80000000
;
break
;
}
return
speed
;
}
bool
ICACHE_FLASH_ATTR
flash_init_data_default
(
void
)
{
// FLASH SEC - 4
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// It will init system data to default!
uint8_t
flash_init_data
[
128
]
=
{
0x05
,
0x00
,
0x04
,
0x02
,
0x05
,
0x05
,
0x05
,
0x02
,
0x05
,
0x00
,
0x04
,
0x05
,
0x05
,
0x04
,
0x05
,
0x05
,
0x04
,
0xFE
,
0xFD
,
0xFF
,
0xF0
,
0xF0
,
0xF0
,
0xE0
,
0xE0
,
0xE0
,
0xE1
,
0x0A
,
0xFF
,
0xFF
,
0xF8
,
0x00
,
0xF8
,
0xF8
,
0x52
,
0x4E
,
0x4A
,
0x44
,
0x40
,
0x38
,
0x00
,
0x00
,
0x01
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x01
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xE1
,
0x0A
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x93
,
0x43
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
SPIEraseSector
((
flash_get_sec_num
()
-
4
));
SPIWrite
((
flash_get_sec_num
()
-
4
)
*
SPI_FLASH_SEC_SIZE
,
flash_init_data
,
sizeof
(
flash_init_data
));
return
true
;
}
bool
ICACHE_FLASH_ATTR
flash_init_data_blank
(
void
)
{
// FLASH SEC - 2
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// It will init system config to blank!
SPIEraseSector
((
flash_get_sec_num
()
-
2
));
SPIEraseSector
((
flash_get_sec_num
()
-
1
));
return
true
;
}
bool
ICACHE_FLASH_ATTR
flash_self_destruct
(
void
)
{
// Erase your flash. Good bye!
SPIEraseChip
();
return
true
;
}
\ No newline at end of file
app/platform/flash_api.h
View file @
a93e62c4
...
@@ -29,6 +29,16 @@ typedef struct __attribute__((packed))
...
@@ -29,6 +29,16 @@ typedef struct __attribute__((packed))
}
size
:
4
;
}
size
:
4
;
}
SPIFlashInfo
;
}
SPIFlashInfo
;
uint32_t
flash_get_size_byte
();
SPIFlashInfo
*
flash_get_info
(
void
);
uint16_t
flash_get_sec_num
();
uint8_t
flash_get_size
(
void
);
uint32_t
flash_get_size_byte
(
void
);
bool
flash_set_size
(
uint8_t
);
bool
flash_set_size_byte
(
uint32_t
);
uint16_t
flash_get_sec_num
(
void
);
uint8_t
flash_get_mode
(
void
);
uint32_t
flash_get_speed
(
void
);
bool
flash_init_data_default
(
void
);
bool
flash_init_data_blank
(
void
);
bool
flash_self_destruct
(
void
);
#endif // __FLASH_API_H__
#endif // __FLASH_API_H__
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