Обсуждение Что делать, чтобы прошивка проходила гладко

nikolz

Well-known member
1)devkit NODEMCU с интерфейсом на борту без проблем.
источник usb
2) Для ESP-01 без проблем.СH_PD - 24 к на 3.3v.
Источник питания - 3.5-3.3v любой
 
Последнее редактирование:

JustACat

Moderator
Команда форума
nikolz, ну, значит я плохо понимаю понятие "хороший источник". Имхо, AMS1117-3.3 прямо рядом с ESP + электролит на 1000 uF + керамика. Куда уж ровнее... Конечно осциллографом не мерил, ибо нет его, увы... Но мультиметр (ut61e) показывает наировнейшее питание. И все равно прошивка то прекрасно и стабильно работает раз за разом, то через раз, а иногда бывает, что и раз 5 подряд не хочет шиться.
Не, я не утверждаю, может я что-то делаю не так - знать бы что...
Такие дела...
 

JustACat

Moderator
Команда форума
nikolz, может быть. Я грешу больше на ESP которые мне попались. Все таки меньше у меня к ним доверия, чем ко всему остальному.
Т.к. на том же самом оборудовании прекрасно шьются и работают и АВР'ки, и STM'ки, и еще куча всякой фигни, хоть через бутлодыри, хоть напрямую.
ESP (и прочие железки) питанию не от компа (компа жалко, он хороший), на нее отдельный БП (от ПК) -> AMS1117-3.3 -> ESP.
Пробовал и по-другому: отдельный БП (трансформаторный) -> другой преобразователь в 3.3 -> ESP.
К слову сказать, и сам ПК, и все, что обычно связано с микроконтроллерами во время тестов - запитано не напрямую от сети, а через сетевой стабилизатор (не "пилот" розеточный, а именно стабилизатор, ибо сеть наша домашняя, увы, и правда, не самая лучшая в этом плане, и напряжение, бывает, гуляет, но стабилизатор это лечит - после него всегда стабильно все).
В общем, как ни крути - все компоненты качественные и направлены как раз на отсутствие помех.
Так что остается только грешить на сами ESP. Они после аврок и стмок просто пипец какие капризные. Но я готов им это прощать, в виду их стоимости и наличия WiFi :)
Ну и без осцилла дальше проверять смысла нету, т.к. это все равно что пальцем в небо тыкать. Если бы были проблемы еще хоть с чем-то из моего электронного зоопарка, кроме ESP - тогда конечно заморочился бы. А так - бессмысленно.
 

JustACat

Moderator
Команда форума
блок питания б/у
А что, бывают не Б/У? :) Я ж им пользуюсь, значит конечно он Б/У - мною и Б/У :) Но БП хороший.
И до него стоит дополнительно сетевой стабилизатор + за ним еще и сетевой фильтр (оба не дешевые).
Модули при прошивке не перевключаю, вместо этого пользуюсь резетом. Так что бросков быть не должно.
Ведь по сути получается так: запускаем прошивку - прошивальщик дает резет и заодно GPIO дергает, чтобы режим загрузчика запустить - ESP сразу попадает в загрузчик, в котором (я очень надеюсь) WiFi вообще не стартует (зачем он в загрузчике?) - прошиваем - и вдруг прошивка падает (причем падать она может на совершенно разных процентах загрузки, что исключает повреждение памяти в какой-то конкретной ячейке).
Опять же, ну во время прошивки самой никак не должно влиять WiFi и прочее - ибо оно в этот момент вовсе не задействовано...
Остается как раз одно: память не очень высокого качества.
Ну либо какие-то фундаментальные проблемы/ошибки в загрузчике, либо в самом ESP.
А китайцы полагаю не виноваты, они флеш не делали они ее лишь припаяли.
А кто ж ее тогда делал? =) Ну не эти конкретно китайцы, так другие. Все равно же все оттуда :)
И есть же такое понятие как контроль качества - вполне могли заказать партию отбракованных не очень стабильных модулей памяти и напаять их на дешевские модули ESP.
Я, как человек, который заказывает много всяких железок из Китая знаю, что такое контроль качества :) Заказываешь вроде бы один и тот же телефон (по начинке), но от разных фирм. У одной он стоит (допустим) 100 баксов, у другой 200. В итоге первый глючит безбожно и падает где только можно, а второй прекрасно работает. А железо (процессор, объем памяти и т.п.) внутри одинаковое. В чем же подвох? Только в качестве компонентов... Имхо, конечно...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Шьется при болтании питания от 1.71 до 5 вольт. Всё остальное - завязка на I/O = как и куда включены + состояние перед сбросом. И значения в RTC часиках!!!
А так как у всех часики без питания - то там бардак.
Китайцы вообще в SDK контрольную сумму аппаратных настроек из часиков считают даже не суммой слов или XOR, а OR ! :eek: Ну это же програмеры из Espressif. В том блоке сохраняется и состояние для старта SDK - ну там deep-sleep и подобное...
Так что ничего удивительного, что модуль может не стартовать.
Решается принудительной перезаписью этой области путем нескольких переключений старта в режим программирования и в режим запуска.
 
Последнее редактирование:

sherr

New member
Имхо, AMS1117-3.3 прямо рядом с ESP + электролит на 1000 uF + керамика
1000 мкф после AMS1117-3.3 - это может быть много, не все стабилизаторы такое терпят, вплоть до выгорания при вклю-
чении или выключении (особенно если конденсатор LOW-ESR) и еще при таких емкостях диод нужен между входом и выходом
в обратном включении,,,, я бы ставил тантал на 100 мкф + керамика на 0,22-0,47 мкф. Вряд ли причина эта, но всё-таки ...
 

JustACat

Moderator
Команда форума
sherr, ага, спасибо, учтем. Это на макетке в общем-то, так что не сильно страшно, если выгорит. Страшнее именно сбои прошивки, но тут емкость кондера явно не играет роли :(
А так, без кондера, субъективно, прошивка рвется чаще. Субъективно, потому что уж больно это случайно происходит, и утверждать я не берусь.
 

pvvx

Активный участник сообщества
sherr, ага, спасибо, учтем. Это на макетке в общем-то, так что не сильно страшно, если выгорит. Страшнее именно сбои прошивки, но тут емкость кондера явно не играет роли :(
А так, без кондера, субъективно, прошивка рвется чаще. Субъективно, потому что уж больно это случайно происходит, и утверждать я не берусь.
Рваться может от резких фронтов, наводок на RESET. Этот пин срабатывает от импульса в 1 ns. Попробуйте на него повесить малую емкость - до десятков наноФарад.
Так-же от фронтов по RS каналу в минус, если длинные провода до USB-COM. Это может давать прямые наводки в кристалл. Простой последовательный резистор на сотню Ом прямо у модуля на проводники может спасти это дело.
Остальное - это расхождение скорости uart. При прошивке ВСЕГДА в модуле устанавливается автоопределение скорости по RS-232 TTL. Оно делается один раз при приеме первых синхро.
Проверка показала (несколько тестов просмотра что автоопределилось и записано в регистр делителя UART), что в ROM-BIOS у китайцев стоит коррекция автоопределения скорости для кварца в 40MHz. Итоговая скорость в делителе UART чипа всегда не совпадает. Расхождения в плюс и минус достаточно большие. Т.е. автоопределение скорости не очень четкое и главное - оно делается при старте синхро и любые помехи или предварительные символы будут мешать.
Код:
 // ROM:40003924
uint32 uart_baudrate_detect(uint32 uart_num, uint32 flg)
{
    volatile uint32_t *uartregs = REG_UART_BASE(uart_num);
    if(UartDev.rcv_state != BAUD_RATE_DET) {
        uartregs[6] &= 0x7E; // UART_AUTOBAUD(uart_num)
        uartregs[6] = 0x801; // UART_AUTOBAUD(uart_num)
        UartDev.rcv_state = WAIT_SYNC_FRM;
    }
    while(uartregs[12] >= 29) { // UART_PULSE_NUM(uart_num)
        if(flg) return 0;
        ets_delay_us(1000);
    }
    uint32 ret = (((uartregs[10] & 0xFFFFF) + (uartregs[11] & 0xFFFFF)) >> 1) + 12;  // UART_LOWPULSE(uart_num) + UART_HIGHPULSE(uart_num)
    uartregs[6] &= 0x7E; // UART_AUTOBAUD(uart_num)
    return ret;
}
 

JustACat

Moderator
Команда форума
pvvx, ага, спасибо за советы! Кондер на reset тоже добавил (в дополнение к подтяжке в 10 kOm). Но увы, не сказал бы, что стало шибко лучше.
Провода от USB-COM не более 10 см. Не знаю, короткие это или нет. Надо будет еще попробовать и на них резисторов навтыкать.
Что интересно, как уже замечал ранее: перезагружается ESP от прикосновения любого куска металла, начиная от короткой отвертки или канц. ножа - до любого участка GND связанной с этой ESP.
Даже расположенного достаточно далеко от ESP. Например, если ESP подключена к USB-UART, который в свою очередь подключен к ПК, и на этом ПК мы коснемся корпуса USB разъема - ESP перезагрузится. Причем не важно, есть у данного куска металла контакт прямой со мной или нет. То есть может ей емкости хватает этого куска, либо может статика так на нее срабатывает, хотя какая статика, заземляться перед этим - не помогает... Мистика :)
Не, вы не думайте, я понимаю, что где-то я чего-то не понимаю или не знаю, и в этом моя проблема. Ну пока не разобрался, может быть когда-нибудь.
 

pvvx

Активный участник сообщества
Что интересно, как уже замечал ранее: перезагружается ESP от прикосновения любого куска металла, начиная от короткой отвертки или канц. ножа - до любого участка GND связанной с этой ESP.
На макетке с внешними проводами от модуля данное не лечиться. Т.е. вылечить от этого не удалось. Это импульсная помеха.
Обычно, в практике, такое вызывает внутренний встроенный в чип BOR (Brown-out Reset), если он настроен на высокое напряжение срабатывания или работу по коротким импульсам.
При макетке с проводами во все стороны от этого импульса не избавиться ни как. Считайте сами - заряженная емкость (то есть железяка), хоть 10 пФ c напряжением в 100..300В включается на проводник. У проводника длина пусть 5 см. На нем будет более нескольких нс разница между его концами и другими проводниками в эти 100..300В (считайте индуктивность провода и получите частоту до 500MHz).
Попробуйте это сделать с батарейкой и в лесу - фигу что выйдет :) Там нету этой разницы заряда между отверткой и модулем.
Во всех современных устройствах, даже телефонах, на входах с кнопок или других внешних контактах стоят специальные быстродействующие варисторы на 3..5В. Выглядят как SMD резистор или как на USB - sot23-6
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Это импульсная помеха.
Вот и я так же подумал. и забил. По крайней мере пока что.
К своему стыду скажу, что у меня ESP пока ни в одном законченном проекте не втыкнута... Увы, никак времени не хватает... Вот когда во что-то законченное втыкну, там может и придется бороться со всеми этими шалостями. Покамест и так сойдет.
 

pvvx

Активный участник сообщества
Вот и я так же подумал. и забил. По крайней мере пока что.
К своему стыду скажу, что у меня ESP пока ни в одном законченном проекте не втыкнута... Увы, никак времени не хватает... Вот когда во что-то законченное втыкну, там может и придется бороться со всеми этими шалостями. Покамест и так сойдет.
Возьмите проводящий лист или фольгу. Главное побольше площадью (емкость). Положите на него все потроха и соедините gnd модуля с этим листом в центре. Никакая "заряженная" отвертка больше не сможет сбивать работу модуля при касании к листу (gnd) - у него есмкость больше и разность заряда гасится на ней (соотношение емкостей), а импульс тока становится локальным только в месте касания листа :)
Аналогично и с разводкой на плате, если правильно разведен слой gnd + все проводники имеют есмкость к этому слою и импульс заряда смещает их всех одновременно, не создавая большой разницы между gnd и этими проводниками. Вот тогда встречается только не правильно настроенный BOR (который слишком чувствительный).
А так ставьте защитные варисторы на все входяшие-выходящие провода из макетки и соедините их к gnd геометрически правильно - избавит от "сборса ответкой" :)
http://bourns.com/pdfs/MLC.pdf Maximum Response Time RT 1 ns
Беда эта у всей современной аппаратуры, т.к. скорости её работы (и соответственно реакции входов) - сотни MHz. Старинные микросхемы чихали на импульсы в несколько ns - у них рабочий фронт за 10 ns, а тут < 0.3 ns :)
 
Последнее редактирование:

sherr

New member
Поделюсь своим приколом - собрал платку на ESP-07(12) + USB-UART переходник на основе PL2303. Обвязку делал согласно советам ув. JustACat. Шьется нормально, работает до передергивания питания (выключатель стоит перед стабилизатором 3,3в, питание пока от USB). Разбирательство
показало, что виснет PL2303, да так, что при передергивании кабеля гарантированно перепрыгивает с ttyUSB0 на ttyUSB1...
Перенос выключателя за стабилизатор (+ керамика ~15-22 мкф до и после него) помогли, но заставили призадуматься .
 
Последнее редактирование:
Сверху Снизу