• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Важно Документация на esp8266 на нашем сайте. пополняемый раздел.

Past

New member
Прошу добавить в список АТ комманд AT+IPR - комманда установки скорости порта на оригинальной прошивке. Например AT+IPR=9600
 

pvvx

Активный участник сообщества
Не хватает доков по Xtensa RC-2010.1. https://yadi.sk/d/uUf7gEvLdmJw2
Подборку выложил временно... она не конкретно по ESP8266 и от среды лицензионного компилятора Xplorer-3.0.1, да уже устаревшая.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Memory map:
Код:
0x00000000    ****        Exc        Protected area
0x20000000    ****        ---        Unmapped, repeated pattern
0x3FF00000    0x010000    R/W        Memory-mapped I/O, repeated every 0x100.
0x3FF10000    0x010000    R only     Mapped, zeroes
0x3FF20000    0x001800    R/W        I/O registers
0x3FF21800    0x09E800    R only     Mapped, zeroes
0x3FFC0000    0x020000    ---        Unmapped, repeated pattern
0x3FFE0000    0x008000    R only     Mapped, zeroes
0x3FFE8000    0x014000    R/W        User data RAM. Available to applications.
0x3FFFC000    0x004000    R/W        ETS system data RAM.
0x40000000    0x010000    R only     Internal ROM.
0x40010000    0x010000    R only     Internal ROM (repeated 0x40000000).
0x40020000    0x0E0000    R only     Mapped, zeroes
0x40100000    0x008000    R/W        IRAM
0x40108000    0x038000    R only     Mapped, zeroes
0x40140000    0x0C0000    ---        Unmapped, repeated pattern
0x40200000    0x100000    R only     SPI Flash is mapped (512k->2x repeated, 16Mb - 1Mb mapped )
0x40300000    ****        ---        Unmapped, repeated pattern
0x60000000    0x001000    R/W        I/O registers
0x60001000    0x000400    R/W        RTC_RAM
0x60001400    0x000400    R/W        I/O registers
0x60001800    0x000400    R/W        RTC_RAM (repead 0x60001000)
0x60001C00    0x000400    R/W        I/O registers (repead 0x60001400)
0x60002000    0x006000    Exc        Protected area
0x60008000    0x001800    ---        Unmapped, repeated pattern
0x60009800    0x000600    R/W        I/O registers
Исходя из этого, в доступности имеется всего 128 килобайт памяти (RAM:0x3FFE8000..0x40000000 + IRAM:0x40100000..0x40108000). Остальной кусок, предположительно не более 32 килобайт, уходит на кеш Flash.
Начиная с SDK 1.0.0 доступной памяти для пользовательских приложений всего менее 30 килобайт. Если учесть ещё включение хотя-бы одного соединения по TCP, то остается всего менее 18 килобайт. Для работоспособности одного соединения по TCP требуется иметь свободными от 12 килобайт. Иначе возможны поблемы...

Области регистров:
Код:
0x3ff00000 INTC_BASE
0x3ff00050 OTP_BASE (MAC, ChipID...)
-------
0x3FF20C00 phy_get_mactime();
0x3FF20CB0 wDev_SetWaitingQueue()
0x3FF20CC0 wDev_GetTxqCollisions()
-------
0x60000000 UART0_BASE
0x60000100 SPI1_BASE
0x60000200 SPI0_BASE
0x60000300 GPIO_BASE
0x60000400 ?
0x60000500 ?
0x60000600 TIMER_BASE
0x60000700 RTC_BASE 0x60000710 bit25 sar_init, ...
0x60000800 IOMUX_BASE
0x60000900 WDT_BASE
0x60000a00 ?
0x60000b00 SCL_BASE
0x60000c00 ?
0x60000d00 rom_i2c_Reg доступ через rom_i2c_readReg(), rom_i2c_readReg_Mask(), rom_i2c_writeReg(), rom_i2c_writeReg_Mask(), 0x60000D50 - управление sar ...
0x60000e00 I2S_BASE
0x60000f00 UART1_BASE
0x60001000 RTC_MEM_BASE (1024bytes)
0x60001400 RTC_BASE (repead 0x60000700)
0x60001500 RTC_BASE (repead 0x60000700)
0x60001600 RTC_BASE (repead 0x60000700)
0x60001700 RTC_BASE (repead 0x60000700)
0x60009800 ??
0x60009A00 WiFi registers 0x60009b00 bit28 - cca,  0x60009B64 – уровень шума в приемнике (в дБ отдает rom_get_noisefloor()) ...
Буду дополнять, если ещё что найду. Тут пока мало инфы: https://github.com/esp8266/esp8266-wiki/wiki/Memory-Map

Вложены описания регистров ESP8266:
gpio_reg.xlsx
pin_reg.xlsx
spi_reg.xlsx
timers_reg.xlsx
uart_reg.xlsx
Больше пока не находилось.
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
ROM-BIOS - это Internal ROM на 64 килобайта. ROM - это не Flash - это память с программой записанной на этапе разработки чипа. Бывает OTP - одноразово-программируемого типа или сразу дизайном ячеек типа перемычек со скрипта дизайна чипа.
Тип ROM указывает, что изменению не подлежит. ROM-BIOS может быть изменена только с выходом нового чипа (обычно с другим названием).
В LD файле перечислены адреса в этой ROM.
Т.к. ROM запускается при старте CPU и её процедуры используются далее, то это обычно называют BIOS - базовой системой.
Скорость работы области памяти адресуемой ROM-BIOS высокая - аналогичная RAM.
ROM-BIOS содержит процедуры загрузки и программирования flash, отладки по протоколу SLIP на COM WiFi...
ROM-BIOS использует область памяти в последних 16 килобайтах RAM. Там находятся все её данные. Эту область можно использовать тоже таблично, по LD ссылкам, т.к. там всё фиксировано. В области RAM используемой ROM-BIOS находятся программные буфера для UART (256+100 байт) и для программных таймеров и т.д.

ROM-BIOS "странслирована" на работу с кварцем в 40MHz, а большинство модулей продаются с кварцем 26 MHz. SDK при старте меняет PLL и прочие связанные с этим функции и связанные с этим данные.

В ROM-BIOS есть и процедуры работы с WiFi частью чипа. Но там старая версия библиотеки - v5, а у SDK уже v6 и часть процедур SDK меняет.
Интерфейс обращения к ним использует таблицу функций в памяти RAM занимаемой BIOS (0x3fffc734). Указатель на неё возвращает phy_get_romfuncs(void); Часть функций в этой таблице замещает SDK при инициализации. Видимо потребовались коррекции. К примеру, замещаются функции отвечающие за уровни передачи и анализа разных значений с SAR…

Таблица функций WiFi:
Код:
[0x3fffc730]=0x3fffc734  phy_get_romfuncs(void)
смещение / адрес функции / название
+000 0x400060c0 rom_abs_temp
+004 0x400060d0 rom_chip_v5_disable_cca
+008 0x400060ec rom_chip_v5_enable_cca
+012 0x4000610c rom_chip_v5_sense_backoff
+016 0x4000615c rom_dc_iq_est
+020 0x00000000
+024 0x400061b8 rom_en_pwdet
+028 0x40006238 rom_get_bb_atten
+032 0x40006260 rom_get_corr_power
+036 0x40250d9c ram_get_fm_sar_dout / rom_get_fm_sar_dout
+040 0x4024d50c ram_get_noisefloor / rom_get_noisefloor
+044 0x400063b0 rom_get_power_db
+048 0x40006400 rom_iq_est_disable
+052 0x40006430 rom_iq_est_enable
+056 0x40006484 rom_linear_to_db
+060 0x4000650c rom_set_txclk_en
+064 0x40006550 rom_set_rxclk_en
+068 0x400065a4 rom_mhz2ieee
+072 0x40251430 ram_rxiq_get_mis / rom_rxiq_get_mis
+076 0x40006738 rom_sar_init
+080 0x4000678c rom_set_ana_inf_tx_scale
+084 0x400067c8 rom_set_loopback_gain
+088 0x4024d558 ram_set_noise_floor / rom_set_noise_floor
+092 0x00000000
+096 0x00000000
+100 0x4024d5b4 ram_start_noisefloor / rom_start_noisefloor
+104 0x400068b4 rom_start_tx_tone
+108 0x4000698c rom_stop_tx_tone
+112 0x40006a1c rom_txtone_linear_pwr
+116 0x4010655c ram_tx_mac_disable / rom_tx_mac_disable
+120 0x4024c288 ram_tx_mac_enable
+124 0x4024b2d0 ram_ana_inf_gating_en / rom_ana_inf_gating_en
+128 0x40006c50 rom_set_channel_freq
+132 0x40006f84 rom_chip_50_set_channel
+136 0x4024af18 ram_chip_v6_rx_init / rom_chip_v5_rx_init
+140 0x4000718c rom_chip_v5_tx_init
+144 0x40007268 rom_i2c_readReg
+148 0x4000729c rom_i2c_readReg_Mask
+152 0x400072d8 rom_i2c_writeReg
+156 0x4000730c rom_i2c_writeReg_Mask
+160 0x4024ac38 ram_pbus_debugmode / rom_pbus_debugmode
+164 0x40007410 rom_pbus_enter_debugmode
+168 0x40007448 rom_pbus_exit_debugmode
+172 0x4000747c rom_pbus_force_test
+176 0x400074d8 rom_pbus_rd
+180 0x4000754c rom_pbus_set_rxgain
+184 0x40007610 rom_pbus_set_txgain
+188 0x40007648 rom_pbus_workmode
+192 0x40007688 rom_pbus_xpd_rx_off
+196 0x400076cc rom_pbus_xpd_rx_on
+200 0x400076fc rom_pbus_xpd_tx_off
+204 0x40007740 rom_pbus_xpd_tx_on
+208 0x400077a0 rom_pbus_xpd_tx_on__low_gain
+212 0x40007804 rom_phy_reset_req
+216 0x4024b430 ram_restart_cal / rom_restart_cal
+220 0x40007868 rom_rfpll_reset
+224 0x400078dc rom_write_rfpll_sdm
+228 0x40007968 rom_rfpll_set_freq
+232 0x40250e40 ram_cal_tos_v60 / rom_cal_tos_v50
+236 0x40007bf0 rom_pbus_dco___SA2
+240 0x40007eb4 rom_rfcal_pwrctrl
+244 0x4000804c rom_rfcal_rxiq
+248 0x40008264 rom_rfcal_rxiq_set_reg
+252 0x40008388 rom_rfcal_txcap
+256 0x40008610 rom_rfcal_txiq
+260 0x400088b8 rom_rfcal_txiq_cover
+264 0x40008a70 rom_rfcal_txiq_set_reg
+268 0x402515fc ram_rxiq_cover_mg_mp / rom_rxiq_cover_mg_mp
+272 0x40008c6c rom_set_txbb_atten
+276 0x40008d34 rom_set_txiq_cal
+280 0x00000000
Полная документация по реверсу их пока не готова и не сформирован её формат – всё раскидано клочками. Возможно, через некоторое время, попробую как-то собрать воедино… Возможно это вынудит Espressif дать заголовки в h или поможет найти используемые блоки дизайна чипа...
А то в https://github.com/esp8266/esp8266-wiki совсем беда. Там засел товарищь
jcmvbkbc и ничего не пополняет.
 
Последнее редактирование:

jcmvbkbc

New member
А то в https://github.com/esp8266/esp8266-wiki совсем беда. Там засел товарищь
jcmvbkbc и ничего не пополняет.
Какая чудесная картина мира. А между тем https://github.com/esp8266/esp8266-wiki -- это wiki, любой получивший право редактирования может написать там что угодно. Чтобы стать редактором нужно иметь аккаунт на github и обратиться к themindfactory (владельцу репозитория) с просьбой дать вашему аккаунту права редактора. По крайней мере я сделал именно так. Если вы сообщите имя своего аккаунта на github я могу попросить за вас.
 

pvvx

Активный участник сообщества
Продолжение про таблицу функций phy
Код:
/******************************************************************************
* FileName: rom_phy.h
* Description: Reverse SDK 1.0.0 (phy.a)
* Author: PV`
* ver1.0
*******************************************************************************/
#ifndef _LIBS_ROM_PHY_H_
#define _LIBS_ROM_PHY_H_
//[0x3fffc730]=0x3fffc734  phy_get_romfuncs(void)
struct phy_func_tab {
    void * abs_temp;                // +000 rom_abs_temp
    void * chip_v5_disable_cca;        // +004 rom_chip_v5_disable_cca
    void * chip_v5_enable_cca;        // +008 rom_chip_v5_enable_cca
    void * chip_v5_sense_backoff;    // +012 rom_chip_v5_sense_backoff
    void * dc_iq_est;                // +016 rom_dc_iq_est
    void * fun20;                    // +020 NULL ??
    void * en_pwdet;                // +024 rom_en_pwdet
    void * get_bb_atten;            // +028 rom_get_bb_atten
    void * get_corr_power;            // +032 rom_get_corr_power
    void * get_fm_sar_dout;            // +036 ram_get_fm_sar_dout / rom_get_fm_sar_dout
    void * get_noisefloor;            // +040 ram_get_noisefloor / rom_get_noisefloor
    void * get_power_db;            // +044 rom_get_power_db
    void * iq_est_disable;            // +048 rom_iq_est_disable
    void * iq_est_enable;            // +052 rom_iq_est_enable
    void * linear_to_db;            // +056 rom_linear_to_db
    void * set_txclk_en;            // +060 rom_set_txclk_en
    void * set_rxclk_en;            // +064 rom_set_rxclk_en
    void * mhz2ieee;                // +068 rom_mhz2ieee
    void * rxiq_get_mis;            // +072 ram_rxiq_get_mis / rom_rxiq_get_mis
    void * sar_init;                // +076 rom_sar_init
    void * set_ana_inf_tx_scale;    // +080 rom_set_ana_inf_tx_scale
    void * set_loopback_gain;        // +084 rom_set_loopback_gain
    void * set_noise_floor;            // +088 ram_set_noise_floor / rom_set_noise_floor
    void * fun92;                    // +092 NULL ??
    void * fun96;                    // +096 NULL ??
    void * start_noisefloor;        // +100 ram_start_noisefloor / rom_start_noisefloor
    void * start_tx_tone;            // +104 rom_start_tx_tone
    void * stop_tx_tone;            // +108 rom_stop_tx_tone
    void * txtone_linear_pwr;        // +112 rom_txtone_linear_pwr
    void * tx_mac_disable;            // +116 ram_tx_mac_disable / rom_tx_mac_disable
    void * tx_mac_enable;            // +120 ram_tx_mac_enable
    void * ana_inf_gating_en;        // +124 ram_ana_inf_gating_en / rom_ana_inf_gating_en
    void * set_channel_freq;        // +128 rom_set_channel_freq
    void * chip_50_set_channel;        // +132 rom_chip_50_set_channel
    void * chip_v6_rx_init;            // +136 ram_chip_v6_rx_init / rom_chip_v5_rx_init
    void * chip_v5_tx_init;            // +140 rom_chip_v5_tx_init
    void * i2c_readReg;                // +144 rom_i2c_readReg
    void * i2c_readReg_Mask;        // +148 rom_i2c_readReg_Mask
    void * i2c_writeReg;            // +152 rom_i2c_writeReg
    void * i2c_writeReg_Mask;        // +156 rom_i2c_writeReg_Mask
    void * pbus_debugmode;            // +160 ram_pbus_debugmode / rom_pbus_debugmode
    void * pbus_enter_debugmode;    // +164 rom_pbus_enter_debugmode
    void * pbus_exit_debugmode;        // +168 rom_pbus_exit_debugmode
    void * pbus_force_test;            // +172 rom_pbus_force_test
    void * pbus_rd;                    // +176 rom_pbus_rd
    void * pbus_set_rxgain;            // +180 rom_pbus_set_rxgain
    void * pbus_set_txgain;            // +184 rom_pbus_set_txgain
    void * pbus_workmode;            // +188 rom_pbus_workmode
    void * pbus_xpd_rx_off;            // +192 rom_pbus_xpd_rx_off
    void * pbus_xpd_rx_on;            // +196 rom_pbus_xpd_rx_on
    void * pbus_xpd_tx_off;            // +200 rom_pbus_xpd_tx_off
    void * pbus_xpd_tx_on;            // +204 rom_pbus_xpd_tx_on
    void * pbus_xpd_tx_on__low_gain;// +208 rom_pbus_xpd_tx_on__low_gain
    void * phy_reset_req;            // +212 rom_phy_reset_req
    void * restart_cal;                // +216 ram_restart_cal / rom_restart_cal
    void * rfpll_reset;                // +220 rom_rfpll_reset
    void * write_rfpll_sdm;            // +224 rom_write_rfpll_sdm
    void * rfpll_set_freq;            // +228 rom_rfpll_set_freq
    void * cal_tos_v60;                // +232 ram_cal_tos_v60 / rom_cal_tos_v50
    void * pbus_dco___SA2;            // +236 rom_pbus_dco___SA2
    void * rfcal_pwrctrl;            // +240 rom_rfcal_pwrctrl
    void * rfcal_rxiq;                // +244 rom_rfcal_rxiq
    void * rfcal_rxiq_set_reg;        // +248 rom_rfcal_rxiq_set_reg
    void * rfcal_txcap;                // +252 rom_rfcal_txcap
    void * rfcal_txiq;                // +256 rom_rfcal_txiq
    void * rfcal_txiq_cover;        // +260 rom_rfcal_txiq_cover
    void * rfcal_txiq_set_reg;        // +264 rom_rfcal_txiq_set_reg
    void * rxiq_cover_mg_mp;        // +268 ram_rxiq_cover_mg_mp / rom_rxiq_cover_mg_mp
    void * set_txbb_atten;            // +272 rom_set_txbb_atten
    void * set_txiq_cal;            // +276 rom_set_txiq_cal
    void * xxx_end;                    // +280 NULL
};

#endif /* _LIBS_ROM_PHY_H_ */
Модераторы: Кто удалит посты этого навязчиво-обреченного jcmvbkbc ? :)
 
Последнее редактирование:

jcmvbkbc

New member
А если "не иметь аккаунт на github" и не "обратиться к themindfactory" то как?
Остаётся просить тех, кто уже имеет права на редактирование. Но это будет неудобно, как вам, так и им.

Там уже вроде есть редакторы, взявшиеся за это дело. Если они ничего не делают, то зачем они взялись? :)
Я же и говорю, чудесная картина мира. Может быть вот эта ссылка ответит на ваш вопрос: http://www.communitywiki.org/DoOcracy
 

pvvx

Активный участник сообщества
Я же и говорю, чудесная картина мира. Может быть вот эта ссылка ответит на ваш вопрос: http://www.communitywiki.org/DoOcracy
А зачем тогда вы и сюда пишите свои недовольства?
Разве не правильно сказано - "А то в https://github.com/esp8266/esp8266-wiki совсем беда. Там засел товарищь
jcmvbkbc и ничего не пополняет."
Я здесь пишу информацию, которой нет там, где редактором являетесь вы. Вы хотите меня обязать работать на вас и по вашим методам? :)
У меня вопроса "отметиться", "застолбить везде всё" не стоит.
Понимаете, тут русскоязычный форум по ESP8266, а там тарабарский. И меня не особо интересуют “заграничные” методы и пополнение их информационной базы. Только частично и с некоторыми людьми, готовых к обмену информацией, а не претензиям и навязыванием своих правил.
 
Последнее редактирование:

jcmvbkbc

New member
А зачем тогда вы и сюда пишите свои недовольства?
В данном топике я подсказал вам, как именно вы можете в два простых шага поправить https://github.com/esp8266/esp8266-wiki. Я начинаю подозревать, что у вас серьёзные проблемы с пониманием написанного.

Я здесь пишу информацию, которой нет там, где редактором являетесь вы.
Однако вы и не просите разместить вашу информацию там. И сами размещать, похоже, не хотите.
Я не брал на себя никаких обязательств становясь редактором этой вики, и я пишу туда только то, что считаю нужным.
К тому же моих правок там не так уж много, всего штук 10. Почему вы, например, не говорите, что там засел zarya (который, кстати, организовал эту вики), и ничего не пополняет?
На мой взгляд всё в порядке. Но вы почему-то недовольны.

Вы хотите меня обязать работать на вас и по вашим методам?
Вы необоснованно подозрительны. Мне всё равно на кого и какими методами вы работаете, мне от вас ничего не нужно.

У меня вопроса "отметиться", "застолбить везде всё" не стоит.
Очень зарактерно, что вы это сказали. Я вам ещё раз предлагаю прочитать статью по моей ссылке.
 

pvvx

Активный участник сообщества
Очень зарактерно, что вы это сказали. Я вам ещё раз предлагаю прочитать статью по моей ссылке.
А я вам рекомендую прочитать название данной темы и сильно не отклоняться. На все ваши вопросы ответ дан.
 
Последнее редактирование:

AlexeyGR

New member
Здравствуйте pvvx, есть ли у Вас информация о том какие(ая) функции(я) отвечает за размер буфера при приёме пакета в режиме promiscuous mode?
wdev_go_sniffer не то?
 

pvvx

Активный участник сообщества
Здравствуйте pvvx, есть ли у Вас информация о том какие(ая) функции(я) отвечает за размер буфера при приёме пакета в режиме promiscuous mode?
Пока нет.
wdev_go_sniffer не то?
Это уже функция из SDK, а я пытаюсь раскрутить функции ROM, чтобы отказаться от SDK.
wdev_go_sniffer - это только инициализация пару флагов (ets_intr_lock(?) ... ets_intr_unlock(?) ..*0x60009D44 &=0xdbffffff... да пару флагов в памяти по адресу 0x3FF20C88 и т.д. и ret)
wdev_exit_sniffer отключает биты в регистрах WiFi *0x60009D44 |= 0x24000000 обратно и ставит пару флагов в памяти.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Спасибо, а находятся они (функции ROM) в libmain.a или liblwip.a?
Они прошиты в ППЗУ самого чипа и SDK обращается к ним.
Вы можете считать эту область (ROM: 0x40000000..0x40080000) и дизассемблировать.
Тут есть уже дизассемблированый начальный вариант http://df.lth.se/~kongo/esp8266.bin/
Оглавление (названия функций и их адреса в ROM) находятся в файле SDK ld\eagle.rom.addr.v6.ld
 

AlexeyGR

New member
Они прошиты в ППЗУ самого чипа и SDK обращается к ним.
Вы можете считать эту область (ROM: 0x40000000..0x40080000) и дизассемблировать.
Тут есть уже дизассемблированый начальный вариант http://df.lth.se/~kongo/esp8266.bin/
Оглавление (названия функций и их адреса в ROM) находятся в файле SDK ld\eagle.rom.addr.v6.ld
Огромное спасибо!
Всё нормально читается (адреса из eagle.rom.addr.v6.ld соответствуют ROM), этот файл ROM от какого чипа (я имею ввиду ESP-01,02,xx)?
 

pvvx

Активный участник сообщества
Огромное спасибо!
Всё нормально читается (адреса из eagle.rom.addr.v6.ld соответствуют ROM), этот файл ROM от какого чипа (я имею ввиду ESP-01,02,xx)?
От любого - это от чипа ESP8266, его встроенная ППЗУ. А дальше муторное разгребание какие параметры у каждой функции и как они управляют аппаратурой...
 

pvvx

Активный участник сообщества
По поводу WDT (реверс):
Код:
//=============================================
// ROM
//=============================================
uint32 func0x2f14(int a)
{
    if(a==3)  return 11;
    else if (a == 6) return 12;
    if(a-12 != 13) return 0;
    return 13;
}
//----------------------------------0x40002f88-
void _wdt_int(void)
{
    x = ets_wdt_get_mode();
    switch(x)
    {
        case 1:
         vmem_write(0x60000914,0x73);
         vmem_read(0x60000910);
         break;
        case 2:
         x = read(0x60000910);
         if(x == 1) {
            vmem_write(0x60000918,0x73);
            vmem_write(0x60000914,0x73);
         }
         else  break;
    }
}
//---------------------------------------------
void ets_wdt_init(void)
{
    vmem_and(0x60000900,0xfffffffe);
    ets_isr_attach(8, _wdt_int, 0);
    vmem_or(0x3FF00004,1);
}
//---------------------------------------------
ets_wdt_restore(int a)
{
    if(a) {
        uint32 *ptr = 0x3fffc708;
        ets_wdt_enable(a, ptr[1], ptr[2]);
    }
}
//---------------------------------------------
ets_wdt_enable(a,b,c)
{
    uint32 *ptr = 0x3fffc708;

    if(*ptr != 2 ) {
        ets_isr_mask(0x100);
    }
    ptr[1] = b;
    ptr[2] = c;
    vmem_and(0x60000900,0xfffffffe);
    switch(a){
        case 1:
            ets_timer_setfn(0x3fffdde0, _wdt_int, 0);
            ets_timer_arm(0x3fffdde0, b<<10, 1);
            vmem_write(0x60000900,0x3C);
            x = func0x2f14(c);
            vmem_write(0x60000904,x);
            break;
        case 3:
            x = func0x2f14(c)
            vmem_write(0x60000904,x);
        case 2:
        case 4:
            vmem_write(0x60000900,0x38);
            x = func0x2f14(b)
            vmem_write(0x60000904,x);
            vmem_write(0x60000908,x);
            if(a != 2)    ets_isr_unmask(0x100);
            break;
    };
      vmem_or(0x60000900,1);
      ptr[0] = a;
      break;
}
//=============================================
// SDK
//=============================================
void wdt_feed(void)
{
    system_rtc_mem_read(????);
    if(? == 2) system_rtc_mem_write(0,?,28);
    ets_post(30,0,0);
}
void wdt_task(void)
{
    system_rtc_mem_read(0,?,28);
    system_rtc_mem_write(0,?,28);
    vmem_write(0x60000914,0x73);
}
//---------------------------------------------
void wdt_init(void)
{
    ets_task(wdt_task,30,0x3ffea100,1);
    vmem_and(0x60000900,0xfffffffe);
    ets_isr_attach(8,wdt_feed,0);
    uint32 *ptr = 0x3FF00004;
    *ptr |= 1;
    vmem_write(0x60000904,0x0B);
    vmem_write(0x60000908,0x0B);
    vmem_or(0x60000900,0x38);
    vmem_and(0x60000900,0xfffffff9);
    vmem_or(0x60000900,1);
    ets_isr_unmask(0x100);
}
WDT постоянно тусует память RTC в SDK.
func0x2f14 не точная да и могут быть мелкие ошибки - писал бегло, для понятия сути.
 
Последнее редактирование:
Сверху Снизу