logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.

p.kaczmarek2 14 Maj 2023 09:57 2184 25

TL;DR LABEL_AI_GENERATED

  • Pokazano czujnik ruchu PIR WiFi na module CBU z układem BK7231N, który uruchomił się bez podłączonego VDD, tylko na masie oraz liniach UART RX/TX.
  • Sygnały UART zasiliły układ przez wewnętrzne diody ochronne do VDD, a kondensatory na zasilaniu podtrzymały pracę mikrokontrolera podczas odczytu.
  • Narzędzie BK7231 GUI Flash Tool odczytało pełny wsad flash o pojemności 2MB bez błędów CRC i dodatkowo pobrało konfigurację GPIO Tuya.
  • Zjawisko działa głównie wtedy, gdy moduł ma kondensatory na VDD; po wylutowaniu z płytki-matki UART nie potrafi już utrzymać układu przy życiu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    Witajcie, dziś krótka ciekawostka - mikrokontroler pracujący bez podłączenia jego pinów VDD. Praktyczna prezentacja oraz wyjaśnienie jak to jest możliwe. Sam mikrokontroler z tematu ruszył po samym podłączeniu mu masy oraz linii UART, czyli RX i TX. Okazało się być to w pełni wystarczające by uruchomić go w trybie bootloadera i nawet by odczytać jego pełny wsad flash, całe 2MB, bez żadnych błędów CRC. Jak to możliwe? Przekonajmy się!

    Układ testowy
    Pacjentem jest czujnik ruchu PIR z komunikacją WiFi, zrealizowany w oparciu o moduł WiFi CBU, czyli układ BK7231N, ale od razu zaznaczam, że opisywane tu zjawisko spotkacie też w normalnych, popularnych mikrokontrolerach. Z zewnątrz ktoś mógłby pomyśleć, że ten czujnik PIR ma po prostu wsadzone bateryjki, a całość to żart, ale na filmie widać, że slot na nie jest pusty.
    Oto wspomniany filmik:



    Na filmiku korzystam z mojego flashera BK7231 GUI Flash Tool:
    https://github.com/openshwprojects/BK7231GUIFlashTool

    Nie chcecie oglądać filmu? Nie ma problemu, oto sprawozdanie z akcji, krok po kroku:
    1. Tutaj podłączony jest UART (w trybie 3.3V) oraz masa, VDD (normalnie 3.3V) wisi w powietrzu:
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    2. Na komputerze rozpoczynam procedurę programowania, a raczej oczekiwania na rozpoczęcie programowania
    3. Tu zwieram do masy VDD od modułu WiFi, aby ten wykonał potem reboot, gdyż bootloader w tych układach tylko w momencie rebootu daje o sobie znać i czeka ułamek sekundy na handshake
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    4. VDD zostawiam w powietrzu, a mimo to trwa odczyt pamięci flash, czyli MCU pracuje:
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    5. Odczyt flash kończy się powodzeniem, nawet udaje się mojemu narzędziu (flasherowi) odczytać konfigurację GPIO Tuya:
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    6. Pokazuję dla formalności, że nie ma ukrytych bateryjek:
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.

    Wyjaśnienie zagadki
    Raczej tutaj każdy jest już przekonany, że MCU ruszył na samym podłączeniu masy oraz RX i TX. Tylko dlaczego?
    Odpowiedź umieszczam w spoilerze. Jeśli, czytelniku, chcesz, to sam się zastanów a potem dopiero sprawdź poniżej, czy miałeś rację.
    Spoiler:

    BK7231 jest dość egzotyczny, więc nie szukajmy nawet jego dokumentacji, tylko weźmy na stół coś bardziej popularnego.
    Może by Atmega8? Atmegi chyba każdy zna, chociażby dzięki Arduino.
    Co mówi nota katalogowa Atmegi na temat jej portów IO?
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    Wszystkie IO mają ochronne diody do VDD i GND, które niejako "ścinają" wyższe napięcia... te diody są w środku Atmegi, one nie są obok na płytce. Tylko co jeśli nie podłączymy zasilania? Wtedy jedna z tych diod, ta "ścinająca" do zasilania, może zacząć przewodzić...
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    Oczywiście ta dioda ma swój spadek napięcia, ale z reguły ten spadek nie jest na tyle duży, by napięcie pojawiająca się na VDD nie było wystarczające do wystartowania układu. Na wejściu jest 3.3V, spadek to, powiedzmy, 0.7V. 3.3-0.7 to 2.6, 2.6V jeszcze powinno starczyć by MCU ruszył.
    Zostaje jeszcze jedna kwestia - czy sygnał UART, który siłą rzeczy raz jest w stanie niskim, a raz wysokim, jest w stanie utrzymać zasilanie na takim poziomie by BK7231 nie wykonał ani jednego rebootu w trakcie całej procedury zasilania?
    Tutaj moim zdaniem ratują nas kondensatory na VDD. To one utrzymują MCU w stanie pracy nawet gdy chwilowo nie dostaje on zasilania przez GPIO.
    Wiem jeszcze z doświadczenia, że te zjawisko nie występuje gdy moduł z BK7231 jest poza układem, tj. nie ma kondensatorów na VDD, jest wylutowany z płytki-matki.

    Na koniec jeszcze jedna uwaga - te diody ochronne są w wielu układach, nie tylko w mikrokontrolerach:
    Mikrokontroler pracuje bez podłączenia zasilania? Ruszamy na samym GND i UART, zagadka.
    Nie zawsze jest o nich mowa w notach katalogowach, ale wydaje mi się, że z reguły są one dostępne. Zresztą można to łatwo sprawdzić.


    Podsumowanie
    Taka sytuacja może co najmniej bardzo zaskoczyć początkujących, bo z zewnątrz może wydawać się bardzo nieintuicyjna, dopiero wiedza o budowie układu scalonego w środku w pełni wyjaśnia sprawę. Mnie to raczej nie zaskoczyło i z doświadczenia wiem, że w przypadku omawianych tu modułów WiFi sytuacja ma tylko miejsce gdy programowany BK7231 ma na VDD jakiś kondensator, jeśli wylutujemy go całkiem z układu to UART nie daje rady go utrzymać przy życiu.
    Dajcie znać, czy spotkaliście się z tego typu zjawiskiem, które choć może wydawać się być problemem, jest jak najbardziej zrozumiałe - nie chciałbym, by GPIO moich MCU nie miały wbudowanej ochrony.
    Na koniec dodam, że przedstawiona sytuacja z BK7231 może być wyjątkowo problematyczna i zaskakująca, bo ten MCU uruchamia bootloader tylko na chwilę po reboocie, więc ktoś może być bardzo zdziwiony, że wykonanie cyklu "podpięcie i odpięcie zasilania" nie uruchamia tego bootloadera. A wszystkiemu winne jest... wiadomo, zgodnie z opisem ze spoilera. Jedyne co pomaga tu wykonać reboot to chwilowe zwarcie VDD ze strony MCU do masy, choć też nie jest to zbyt dobry pomysł, bo de facto to zwiera sygnał UART przez wspomnianą diodę do masy...

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14823 postów o ocenie 12994, pomógł 659 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • #2 20579435
    rubik123
    Poziom 21  
    Posty: 288
    Pomógł: 53
    Ocena: 111
    Może po prostu wewnątrz procka są rezystory podciągające RX i TX do VCC i jeśli kondensator zewnętrzny się przez nie naładuje to procek ma na tyle niski pobór prądu, że kondensator wystarcza do zasilania. Ja bym sprawdził jakie napięcie jest w tym przypadku w trakcie programowania na tym kondensatorze..
  • #3 20579545
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    rubik123 napisał:
    Może po prostu wewnątrz procka są rezystory podciągające RX i TX do VCC

    Są odłączone, to tylko diody tak jak Autor opisał, robią to zasilanie, nazywa się go pasożytniczym.
  • REKLAMA
  • #4 20579754
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Tak samo pasożytniczo mogą być zasilane inne urządzenia z pinów IO procka. Osoby, które nie mają świadomości takich rzeczy mogą się wpakować w problemy. Pierwszy pojawia się dosyć często - dlaczego producent deklaruje, że procek w sleep ma pobierac x nA, a pobiera 1000xwięcej - help :) Czasami to pasożytnicze zasilanie powoduje, że układ działa ale nie do końca poprawnie. Np. przy normalnej pracy procek pobiera minimalny prąd, napięcie się utrzymuje ok i wszystko działa. Ale włączamy jakiś układ peryferyjny i wszystko siada, procek robi cuda, program ma dziwne błędy - help.
    To przy okazji pokazuje, że nie wystarczy wiedza z wiki (w wersji nowszej z chatGPT), niestety ciągle trzeba się uczyć i to od podstaw, aby uniknąć właśnie takich niespodzianek.
  • #5 20579783
    Konto nie istnieje
    Poziom 1  
  • #6 20579807
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    khoam napisał:
    Dobrze więc, kiedy w MCU jest możliwość "odpięcia" pinów od wewnętrznych układów tak, jak np. w układach serii ESP32.

    Co ci da, że je "odepniesz" od układów wewnętrznych, jeśli masz diodę zabezpieczającą na wejściu, której nie odepniesz i to przez nią płynie prąd?
    Poza tym chyba każdy układ, który ma muliplekser sygnałów ma możliwość przepięcia pinów. Możesz sprecyzować o co chodzi?
  • #7 20579820
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 20580038
    krzbor
    Poziom 29  
    Posty: 1787
    Pomógł: 43
    Ocena: 1073
    Te diody często fachowo nazywane "clamping diode" mają bardzo małe prądy. Trudno znaleźć informacje o ich maksymalnych prądach, ale często czytałem o wartościach rzędu 1-5mA. Choć przy procesorach PIC czytałem nawet o 20mA. Tu ciekawy wpis użytkownika @dondu : Link
    W każdym razie te legalne 1-5mA to bardzo mało, aby zasilić taki procesor. Szukałem informacji o prądach tych diod dla ESP8266 ale nic jednoznacznego nie znalazłem.
    Dlaczego ta informacja jest przydatna? Otóż można łączyć układy zasilane napięciami 5V i 3.3V tylko za pomocą rezystora. 3.3V jest zwykle wystarczające aby układ 5V rozpoznał stan wysoki. W drugą stronę po podaniu 5v na wejście 3,3V zadziała dioda "clamp". Rezystor powinien być większy niż 1k. Układy powinny być w tym przypadku zasilane z tego samego źródła, a na zasilaniu układu z napięciem 3,3V powinien być kondensator elektrolityczny - chodzi o to aby wyeliminować zjawisko opisane w tym artykule - czyli aby układ nie był zasilany ze zbyt wysokiego napięcia.
  • #10 20580083
    pawelr98
    Poziom 39  
    Posty: 6465
    Pomógł: 413
    Ocena: 1156
    Dlatego w pewnych zastosowaniach daje się bufory 74244 na wejściu lub w wersji bardziej chamskiej, rezystory w szeregu.
    Żeby przypadkiem komunikacja z szafy obok nie była w stanie zasilić podzespołów.
  • #11 20580107
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    krzbor napisał:
    Układy powinny być w tym przypadku zasilane z tego samego źródła, a na zasilaniu układu z napięciem 3,3V powinien być kondensator elektrolityczny

    Kondensator to za mało, powinna być dioda Zenera.

    Dodano po 1 [minuty]:

    pawelr98 napisał:
    rezystory w szeregu.

    Lepszy jest N-mosfet logic-level.

    Dodano po 2 [minuty]:

    U Chińczyka można nawet kupić gotowe układy na 4 kanały.
    https://pl.aliexpress.com/item/1005001621749928.html
  • #12 20580113
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    krzbor napisał:
    Trudno znaleźć informacje o ich maksymalnych prądach, ale często czytałem o wartościach rzędu 1-5mA.

    W nocie Atmela jest informacja, że prąd takiej diody to 0,5 mA.
  • #13 20580121
    Konto nie istnieje
    Poziom 1  
  • #14 20580127
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    Ja w nocie Atmela na temat detekcji zera sieci widziałem opornik 1M na wejściu procka co dla nap sieci w szczycie (310-320V) dawało prąd ~0,3mA, czyli z odpowiednim zapasem.
  • #15 20580328
    krzbor
    Poziom 29  
    Posty: 1787
    Pomógł: 43
    Ocena: 1073
    Jak widać mówimy o poziomie 1mA dla diod zabezpieczających, a to na pewno nie wystarczy do zasilania tego 32bitowego procesora.
  • #16 20580485
    Urgon
    Poziom 38  
    Posty: 7297
    Pomógł: 197
    Ocena: 2637
    AVE...

    Dobre 10+ lat temu widziałem projekt emulatora tagu RFID na mikrokontrolerze PIC, który to układ zawierał tylko cewkę nadawczo-odbiorczą, rzeczony mikrokontroler i kondensator między pinami VDD i GND. Cewka była podłączona do dwóch pinów IO, z czego jeden to było wejście CLKIN zegara...
  • REKLAMA
  • #17 20580872
    Konto nie istnieje
    Poziom 1  
  • #18 20580937
    Jacek Rutkowski
    Poziom 28  
    Posty: 1330
    Pomógł: 69
    Ocena: 275
    krzbor napisał:
    Jak widać mówimy o poziomie 1mA dla diod zabezpieczających, a to na pewno nie wystarczy do zasilania tego 32bitowego procesora.

    To jest tylko prezentacja sztuczki :) Przy większym zegarze czy przy korzystaniu z ADC musisz zapewnić solidne zasilanie z dobrym filtrowaniem a nie na stałe pozbyć się pinów zasilania...
  • #19 20580985
    viayner
    Poziom 43  
    Posty: 10638
    Pomógł: 1563
    Ocena: 2055
    Witam,
    doloze mala cegielke do tematu, kiedys dawno jak "byly poczatki RFID" robilo sie uklady (osobiscie na PIC'ach) gdzie, mikrokontroler byl jednoczesnie "zasilany" wlasna antena nadawczo/odbiorcza, ilosc energii zgromadzonej wystarczala na odpowiedz. Te diody byly wlasnie do tego wykorzystywane.
    Pozdrawiam
  • #21 20581453
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    tronics napisał:
    Bo dokładnie ten sam problem ponad 30 lat temu..

    Ale jaki?arm się 'zasilał' z peryferii?
  • #22 20581482
    tronics
    Poziom 38  
    Posty: 5082
    Pomógł: 359
    Ocena: 845
    Dokładnie, mierzyli pobór z VCC który przez chyba błąd był albo niepodłączony, albo w ogóle w design był błąd... a mikroprocesor wstał przez zasilanie z I/O ... tak tą historię opisywał jeden z bardzo leciwych inżynierów projektujących ten procesor.
  • #24 20582333
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    tronics napisał:
    Dokładnie, mierzyli pobór z VCC który przez chyba błąd był albo niepodłączony, albo w ogóle w design był błąd... a mikroprocesor wstał przez zasilanie z I/O ...

    Dobre :) to że amator może taki błąd zrobić to normalne ale że firma tak potrafi dać ciała? :)
  • #25 20582669
    tronics
    Poziom 38  
    Posty: 5082
    Pomógł: 359
    Ocena: 845
    Janusz_kk napisał:

    Dobre :) to że amator może taki błąd zrobić to normalne ale że firma tak potrafi dać ciała? :)

    I tu jest pies pogrzebany, bo ta firma w tym okresie nie miała de facto nikogo z doświadczeniem w projektowaniu CPU :) Po prostu zebrała się garstka ludzi i uznali, że nie, że 6502 to już był, że 65C816 z WDC (taka firma z siedzibą przypominającą przeciętny amerykański garaż) to jednak nie to czego chcą i skoro WDC zrobiło CPU w takich warunkach to oni też dadzą radę. No i co tu dużo ukrywać, zasadniczo dali... A, że są w czasie prototypowania faile? No panie, z 3 zestawów chipsetu AAA do Amigi (który nie miał okazji wyjść) de facto nie działał żaden ;) W CIA do C64 był bug, który powodował, że nie można było wykorzystać sprzętowej transmisji szeregowej tylko walić bit po bicie (co znacząco ograniczało możliwą prędkość - w tym prędkość stacji dyskietek). To nie tak, że firma nie robi bugów. W Atmega8 AVcc i Vcc były w środku fizycznie połączone.
  • #26 20582684
    Janusz_kk
    Poziom 39  
    Posty: 5883
    Pomógł: 228
    Ocena: 1481
    tronics napisał:
    Po prostu zebrała się garstka ludzi

    Czyli zgodnie z przysłowiem nie wiedzieli że się nie da :) co się powozili to ich ,ale zrobili.
    Z tego pierwszego wpisu Twojego wnioskowałem że to była poważniejsza firma niż grupa zapaleńców, stąd moje zdziwienie nad tak banalnym błędem.

    tronics napisał:
    W Atmega8 AVcc i Vcc były w środku fizycznie połączone.

    To wiem, ale Atmel to i tak mało ich miał, właśnie przeczytałem artykuł Urgona na temat Pic-ów i dziękuje Bogu że się kiedyś nimi nie zainteresowałem :)

Podsumowanie tematu

LABEL_AI_GENERATED
Mikrokontroler BK7231N, używany w czujniku ruchu PIR z komunikacją WiFi, uruchomił się bez podłączenia pinów VDD, korzystając jedynie z masy oraz linii UART (RX i TX). Uczestnicy dyskusji wskazują na zjawisko pasożytniczego zasilania, gdzie prąd może płynąć przez diody zabezpieczające, co pozwala na zasilanie mikrokontrolera z pinów IO. Wskazano, że kondensatory mogą wystarczyć do krótkotrwałego zasilania, ale dla stabilnej pracy wymagane jest solidne zasilanie. Wspomniano również o projektach RFID, gdzie mikrokontrolery były zasilane energią z anteny. Uczestnicy podkreślają, że zjawisko to może prowadzić do problemów z działaniem układów, jeśli nie jest odpowiednio zrozumiane.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA