• Система автоматизации с открытым исходным кодом на базе 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;
}
 
Последнее редактирование:
Сверху Снизу