• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 не точная да и могут быть мелкие ошибки - писал бегло, для понятия сути.
 
Последнее редактирование:
Сверху Снизу