Skocz do zawartości

ESP32 po uruchomieniu zasilania przechodzi od razu w tryb bootowania


Pomocna odpowiedź

Napisano

Cześć, 

Stworzyłem swoją płytkę pcb dla modułu ESP32-WROOM-32UE. Wszystko działa prawie dobrze, oprócz tego, że po włączeniu zasilania na płytce, ESP32 od razu wchodzi w tryb bootowania... za każdym uruchomieniem muszę wciskać reset i dopiero wtedy program uruchamia się prawidłowo. Drugim problemem jest to, że nie jestem w stanie zaprogramować mikrokontrolera przez FTDI232. Musze ręcznie wcisnąć i przytrzymać boot, następnie wcisnąć reset i puścić boot. Wnioskuję, że coś jest nie tak z wartościami rezystorów lub kondensatorów. Sprawdzałem z dokumentacją i nie wiem co może być nie tak...

image.thumb.png.2c6fe7bcf24f6ccfa7e5eb968f509261.png

Na IO0 masz τ=1ms, co może powodować problemy przy rozruchu, ale to wątpliwe. Dodatkowo IO12 to wejście danych z programatora (najpewniej JTAG). Podłączanie tam czegokolwiek co zbiera zakłócenia z okolicy może być złym pomysłem.

A jak chcesz automatyczne programowanie ESP32 to najlepiej użyć dwóch tranzystorów.

obraz.thumb.png.7ba3b367d76606f3034314732e46eefc.png

  • Lubię! 2
3 minuty temu, jand napisał:

Nie rozumiem, o co tu chodzi???

IO0 3.3V osiągnie dopiero po 1ms (w sumie pewnie nawet do 2ms biorąc pod uwagę oba kondensatory), nie znam timingów ESP32, ale wiem, że sporo STMów ma znaczne problemy z kondensatorami na BOOT0. Pozostaje też kwestia jakie napięcie jest uznawane przez MCU za stan wysoki.

To by tłumaczyło zachowanie - przy włączeniu płytki do zasilania kondensatory są rozładowane, więc IO0 ma stan niski przez pewien krótki czas... Pytanie czy MCU nie zdąży przejść w tym czasie procedury bootloadera. Po resecie IO0 ma już gwarantowany stan wysoki (kondensatory się naładują), więc ten problem nie będzie występował.

  • Lubię! 1
(edytowany)

Rozumiem.

W Esp32, aby procesor normalnie wystartował wysoki stan GPIO00 musi być ustalony przed narastającym zboczem RST. Tu jest to raczej zachowane, bo na RST jest większy kondensator, niż na GPIO00.

Edytowano przez jand
18 godzin temu, wojtek6000 napisał:

wylutuje też kondensator C3. Może 100nF to za dużo

Na pewno nie.

C3 jest potrzebny tylko przy  programowaniu, w trakcie normalnego uruchamiania nie ma znaczenia.

  • Lubię! 1
  • 3 tygodnie później...

Szanowni Panowie, 

Rozwiązałem problem. Był iście prozaiczny. Kondensator przy resecie powinien mieć wartość 1uF, rezystor bez zmian 10k, natomiast przy IO0 100nF i rezystor też 10k. Tylko tyle i aż tyle:)

Co do układu dwóch tranzystorów do wgrywania programu to póki co nie będę ich instalował, ładuje program przez OTA. 

Dziękuję wszystkim za pomoc:)

  • Lubię! 1

Czyli miałem rację Schrödingera... miałem rację i nie miałem racji. Chodziło o stałą czasową przy rozruchu... nawet podałem dobry powód, tylko problem był w innym miejscu na schemacie 😄 

Jeżeli dobrze myślę zamieniając rezystor linii reset z 10k na 100k też byś naprawił układ, ale analog nie jest moją mocną stroną.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...