Здравствуйте, уважаемые форумчане!
Модуль - esp-03. NONOS-SDK взят из официального репозитория espressif/ESP8266_NONOS_SDK, с последними коммитами.
В прошивке реализовано установление режима энергосбережения LIGHT_SLEEP_T и последующее подключение к точке доступа. Модуль успешно подключается и его потребление начинает варьироваться, чаще всего видно число 60мА. Дальше я из обычного виндового терминала делаю ping ip_addr и в результате отправки этих 4 ICMP запросов (ответы приходят) энергосбережение модуля рушится и потребление замирает на отметке в 61-62мА. Если выключить точку доступа и включить, то модуль точку теряет, находит, подключается, и режим энергосбережения восстанавливается.
После экспериментов выяснилось, что для порчи энергосбережения нужно отправить минимум 4 пакета с периодом от 0.5 до 0.8 секунды.
Есть предположение, что виноват может быть lwip стек, который придерживает какой-нибудь таймер, буду пробовать собрать lwip из исходников SDK и пришвартовать их к сборке.
файл user_init.c
Модуль - esp-03. NONOS-SDK взят из официального репозитория espressif/ESP8266_NONOS_SDK, с последними коммитами.
В прошивке реализовано установление режима энергосбережения LIGHT_SLEEP_T и последующее подключение к точке доступа. Модуль успешно подключается и его потребление начинает варьироваться, чаще всего видно число 60мА. Дальше я из обычного виндового терминала делаю ping ip_addr и в результате отправки этих 4 ICMP запросов (ответы приходят) энергосбережение модуля рушится и потребление замирает на отметке в 61-62мА. Если выключить точку доступа и включить, то модуль точку теряет, находит, подключается, и режим энергосбережения восстанавливается.
После экспериментов выяснилось, что для порчи энергосбережения нужно отправить минимум 4 пакета с периодом от 0.5 до 0.8 секунды.
Есть предположение, что виноват может быть lwip стек, который придерживает какой-нибудь таймер, буду пробовать собрать lwip из исходников SDK и пришвартовать их к сборке.
файл user_init.c
Код:
#define SPI_FLASH_SIZE_MAP FLASH_SIZE_8M_MAP_512_512
#define SYSPART_OTA_SIZE 0x6A000
#define SYSPART_OTA_2_ADDR 0x81000
#define SYSPART_RF_CAL_ADDR 0xFB000
#define SYSPART_PHY_DATA_ADDR 0xFC000
#define SYSPART_SYSTEM_PARAMETER_ADDR 0xFD000
static const partition_item_t st_ptable[] =
{
{ SYSTEM_PARTITION_RF_CAL, SYSPART_RF_CAL_ADDR, 0x1000},
{ SYSTEM_PARTITION_PHY_DATA, SYSPART_PHY_DATA_ADDR, 0x1000},
{ SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSPART_SYSTEM_PARAMETER_ADDR, 0x3000},
};
//***********************************************
ICACHE_FLASH_ATTR
static void init_done(void)
{
struct station_config sta_conf;
wifi_set_opmode_current(STATION_MODE);
wifi_set_sleep_type(LIGHT_SLEEP_T);
sta_conf.bssid_set = 0;
os_memcpy(&sta_conf.ssid, AP_SSID, 32);
os_memcpy(&sta_conf.password, AP_PASSWD, 64);
wifi_station_set_config_current(&sta_conf);
wifi_station_disconnect();
wifi_station_connect();
}
//***********************************************
ICACHE_FLASH_ATTR
void user_pre_init(void)
{
if (system_partition_table_regist(st_ptable, ARRAY_SIZE(st_ptable), SPI_FLASH_SIZE_MAP) == 0)
{
os_printf("system_partition_table_regist fail\r\n");
while(1);
}
}
//***********************************************
ICACHE_FLASH_ATTR
void user_init(void)
{
system_set_os_print(0);
system_init_done_cb(init_done);
}