• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Нужна идея о том, как переключать UART

aloika

Active member
Есть у модуля UART0. Он используется, как известно, для программирования модуля. Вместе с тем, у меня к нему подключен UART ATtiny441 (кстати, очень здоровский относительно новый контроллер из этого семейства, рекомендую).
Сейчас для прошивки ESP8266 я снимаю перемычки, соединяющие UARTы ESP и ATtiny, прошиваю ESP, ставлю перемычки назад.
В конечном устройстве хотелось бы сделать один разъем программирования для ESP8266, без перемычек. Как-то бы так сделать, чтобы при прошивке UART ATtiny не оказывал влияния.
Может есть идеи, как бы это сделать?
 

pvvx

Активный участник сообщества
Поставить резисторы (470Ом..1кОм) от Тины к разъему программирования соединенного с модулем. "Подтяжки" перенести к Тине, т.е. к выводам которые Output.
 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx, что за подтяжки?
Резисторы 10..50 кОм к + 3.3В. Без них в момент вкл.питания на выводах будет неизвестно что и такая-же загрузка модуля в неизвестно какое состояние. Например в 4-ре режима SIP или в два режима программирования или в 6 режимов загрузки с flash или в режим загрузки с UART или ... :) Вот в какое состояние и с какими параметрами вам надо чтобы загрузился модуль, в такое состояние и ставите "подтяжки" вроде на 7 шт i/o чипа + reset и CH_PD... :)
Все режимы и модификации загрузки чипа я перечислить и описать пока не в состоянии, т.к. кроме ROM-BIOS в данном процессе участвует и SDK при старте и обработке констант из esp_init_data_default.bin. Эти константы обрабатываются тоже в зависимости от начальных значений на выводах i/o до сброса (защелки) + значений в регистрах RTC и от значений i/o после сброса... :) :)
 
Последнее редактирование:

aloika

Active member
pvvx, то есть TXD0 и RXD0 тоже надо подтягивать к плюсу? Сейчас они у меня не подтянуты... А почему Вы пишете 7 шт i/o, их же 9 + RX+TX+ADC (хотя и они i/o, конечно) и reset и ch_pd.
 

pvvx

Активный участник сообщества
pvvx, то есть TXD0 и RXD0 тоже надо подтягивать к плюсу? Сейчас они у меня не подтянуты... А почему Вы пишете 7 шт i/o, их же 9 + RX+TX+ADC (хотя и они i/o, конечно) и reset и ch_pd.
7-мь, по причине что опрашивается в ROM-BIOS. При разных уровнях на разных ножках ROM-BIOS выбирает тип загрузки + модификации. Например делать или нет автосинхронизацию скорости UART в режиме прошивки или тип работы SPI с flash при старте с flash и т.д. Если стоит модификация типа SPI работы с flash, то просто первые блоки будут грузиться медленнее, потом, при запуске загруженного кода он это поправляет на указанную в заголовке flash (смотрите параметры в FLASH_DOWNLOAD_TOOLS).
В итоге для загрузки не обязательно выставлять все ножки, а главное задать основную ветку загрузки... Частично это описано в https://github.com/pvvx/esp8266web/blob/master/info/ESP8266_reg/pin_reg.xlsx
Остальное смотрите в дизассемблере ROM-BIOS :)
Код:
ROM:40000FEC
main:   ; CODE XREF: ROM:loc_40000449j
    addi            a1, a1, 0xF0
    s32i.n          a12, a1, 4
    s32i.n          a13, a1, 8
    s32i            a0, a1, 0
    call0           uartAttach
    movi.n          a2, 0
    call0           Uart_Init
    call0           ets_install_uart_printf
    l32r            a12, a_0x60000200
    memw
    l32i            a0, a12, 0x118 ; 0x60000318 // GPIO_IN
    extui           a0, a0, 16, 3
    beqi            a0, 6, _main_bm06
    memw
    l32i            a3, a12, 0x118 ; 0x60000318
    extui           a3, a3, 16, 3
    addi            a3, a3, -7
    beqz            a3, _main_bm07
    memw
    l32i            a4, a12, 0x118 ; 0x60000318
    extui           a4, a4, 16, 3
    addi            a4, a4, -4
    beqz            a4, _main_bm04
    memw
    l32i            a5, a12, 0x118
    extui           a5, a5, 16, 3
    bnei            a5, 5, _main_bm00_03
    movi            a2, 3
    call0           sip_init_attach
    j               _main_bm00_03
В SDK есть ещё связь с RX1/TX1, на них тоже смотрятся уровни и если они активны (точно состояние не помню) то включается swap UART. :)

BIOS при старте пишет:
ets Jan 8 2013,rst cause:a, boot mode: ( b,c)
Где:
cause: a, a = rtc_get_reset_reason();
boot mode: (b, c) , b =(GPIO_IN>>16)&7; c = (GPIO_IN>>29)&7;

Примерная логика работы (выходного значения) у rtc_get_reset_reason()
Код:
int rtc_get_reset_reason(void) {
ret =  (IO(0x60000714) & 0x0F);
if(ret != 5) return ret;
int x = (IO(0x60000718)>>8) & 0x3F;
if(x == 1) return 6;
if(x != 8) return 0;
return ret;
}
 
Последнее редактирование:
Сверху Снизу