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

[Rozwiązano] Brak komunikacji SPI po konwersji na 1.8V z ADG3304 na OrangePi Zero

marekdb9 02 Kwi 2019 11:05 1716 25
  • #1 17881149
    marekdb9
    Poziom 10  
    Witam, mierzę się ostatnio z następującym problemem. Projektuję płytkę rozszerzeniową dla platformy OrangePi Zero. Jednym z feature'ów ma być możliwość flashowania pamięci poprzez interfejs SPI. Jednym z wymogów jest, żeby interfejs był kompatybilny z poziomami logicznymi 1.8V.
    Obwód został oparty na układzie scalonym ADG3304.

    Brak komunikacji SPI po konwersji na 1.8V z ADG3304 na OrangePi Zero

    Przekaźnikiem wybieram sobie poziom napięc urządzenia slave. Konwerter jest dwukierunkowy, jednak najwazniejsze jest, żeby VCCy było większe lub równe VCCa. Dlatego master jest podłączony do pinów Yx. Problem polega na tym, że nie jestem w stanie uzyskać komunikacji i na podglądzie na oscyloskopie uzyskuję jakieś śmieci. Próbowałem następujących sposobów:
    - dodałem kondensatory odsprzęgające (o czym zapomniałem na etapie projektu)
    - podciągałem linię /CS do zasilania
    - robiłem dzielnik napięciowy na linii MISO.

    Każda z tych metod zawiodła, a komunikacji jak nie było, tak nie ma. Pamięci, na których testowałem ten obwód, to MX25U6435F (1.8V) i Winbound W25Q64FW (3.3V). Układ jest dedykowany do pracy z urządzeniami w technologii CMOS (chipy pamięci takie są). Wyczerpały mi się pomysły na zdiagnozowanie problemów niedziałania. Może ktoś bardziej doświadczony się wypowie.
  • #2 17881970
    krzysiek_krm
    Poziom 40  
    Czy sygnał ENABLE jest w stanie wysokim ?
  • #3 17883434
    marekdb9
    Poziom 10  
    Tak, napięcie jest poprawne.
  • #4 17884683
    RometFan;p
    Poziom 26  
    Spróbuj zwierać linie od strony VCCb do masy i obserwuj czy stany na stronie VCCa się zmieniają.
    Sprawdziłem datasheet, i błędu nie widzę. Piny ok, nie zrobiłeś błędu w footprincie?
  • #5 17887287
    marekdb9
    Poziom 10  
    Napięcia się zgadzają, footprint też jest dobry. Myślę, że problemem może być wydajność prądowa.
  • #6 17887999
    krzysiek_krm
    Poziom 40  
    marekdb9 napisał:
    Myślę, że problemem może być wydajność prądowa.

    Chyba masz rację, z dokumentacji wynika, że to nie jest taki prosty w użyciu układ
    Cytat:
    INPUT DRIVING REQUIREMENTS
    To ensure correct operation of the ADG3304, the circuit that
    drives the input of the ADG3304 channels should have an
    output impedance of less than or equal to 150 Ω and a
    minimum peak current driving capability of 36 mA.

    Nie ma jakiegoś izolatora do SPI (na przykład ADuM) żeby miał odpowiednie napięcia zasilania ?

    Dodano po 11 [minuty]:

    Albo po prostu zastosuj zwyczajne translatory jednokierunkowe.
  • #7 17893882
    Thaddy

    Poziom 10  
    SPI działa na TXB0108 sprawdzone

    Pozdrawiam
  • #8 17897459
    marekdb9
    Poziom 10  
    Thaddy napisał:
    SPI działa na TXB0108 sprawdzone


    Jakie operacje po SPI Ci działają? Dla moich potrzeb wystarczający byłby konwerter 4-portowy. Widzę TXB0104. Nawet footprint i ułożenie pinów się zgadza.
  • #9 17897964
    Thaddy

    Poziom 10  
    marekdb9 napisał:
    Thaddy napisał:
    SPI działa na TXB0108 sprawdzone


    Jakie operacje po SPI Ci działają? Dla moich potrzeb wystarczający byłby konwerter 4-portowy. Widzę TXB0104. Nawet footprint i ułożenie pinów się zgadza.


    Odczyt, zapis. Komunikuję się z ICM-20948 przy 1MHz na pająku. Wykorzystuję 4 linie SPI + sygnał sterujący.
  • #10 17902096
    marekdb9
    Poziom 10  
    @Thaddy

    Zmieniłem układ scalony, ale wciąż nie mogę uzyskać komunikacji.

    Sprawa u mnie wygląda tak: chcę mieć kompatybilność z chipami pracującymi na poziomach logicznych 1.8V i 3.3V. Czy ma znaczenie z której strony jest podłączone urządzenie master, a z której slave? Z tego co widzę, to w dokumentacji przy zasilaniu VCCa jest dołączony procesor (master), a do VCCb peryferium (slave). Ja mam te dwa urządzenia podłączone odwrotnie, bo musi zostać spełniony warunek VCCa <= VCCb, więc masterem u mnie jest urządzenie zasilane z VCCb. Czy to ma wpływ na transmisję?
  • #11 17902166
    Loker
    Poziom 39  
    Pokaż cały schemat (razem z kondensatorami odsprzęgającymi). Generalnie konwertery dwustronne potrafią być kapryśne - rozważmy przypadek, że na "wyjściu" konwertera jest kondensator (odsprzęgający), a "wejście" przełącza się z H na L. Kondensator naładowany... Co będzie miało wyższy priorytet - ładunek zgromadzony w kondensatorze, który konwerter może potraktować jako stan H i próbować "przetransformować" na stronę "wejścia" czy rzeczywiste "wejście" w stanie L? ;)
  • #12 17902183
    Thaddy

    Poziom 10  
    Właśnie tak mam.
    Do VCCB podłączona płytka NUCLEO, strona VCCA to ICM-20948.
    Translator poziomów mam na płytce z wyprowadzonymi pinami.
    Na płytce oprócz scalaka są kondensatory filtrujące przy zasilaniu VCCA i VCCB oraz rezystor 100k przy OE podciągający do VCCA.

    To wszystko.
  • #13 17902901
    Konto nie istnieje
    Poziom 1  
  • #14 17906489
    _jta_
    Specjalista elektronik
    :arrow: #11/#12 - Tu nie chodzi o kondensatory na zasilaniu, tylko pojemność między linią sygnałową, a masą - jeśli to tam jest kondensator. Zarówno prąd wyjścia, jak i translatora poziomów jest skończony, więc po pierwsze, kondensator nie rozładuje się natychmiast; a po drugie, jeśli wydajność prądowa wyjścia, które usiłuje ściągnąć napięcie w dół, jest mniejsza od wydajności prądowej translatora, to zmiana stanu na tym wyjściu będzie opóźniona (zwłaszcza, jeśli napięcie kondensatora jest wyższe od napięcia zasilania wyjścia, które zmienia stan - napięcie ustali się na takim poziomie, przy którym prąd wyjścia będzie równy prądowi translatora - to może być np. VCC-1V - i zacznie dalej opadać po odpowiednim zmniejszeniu się napięcia na kondensatorze); jeśli jest odwrotnie, to wyjście ściągnie napięcie w dół, ale tylko po swojej stronie translatora, po drugiej będzie ono opadać w miarę rozładowywania kondensatora.

    Przy dużej wartości iloczynu pojemności, częstotliwości i kwadratu napięcia problemem będą straty energii zamieniające się w ciepło - coś może się przez nie przegrzać. To, że w układach występują pojemności (choćby pasożytnicze) jest główną przyczyną grzania się procesorów w komputerach - każde przeładowanie pojemności C zamienia w ciepło energię równą C*U²/2; ponieważ to jest proporcjonalne do kwadratu napięcia, konstruuje się procesory o coraz niższym napięciu zasilania rdzenia, pierwsze PC miały 5V, najnowsze około 1V.

    Moderowany przez Marek_Skalski:

    Litości! Ile tej mocy wydzieli się na 3 liniach dla SPI, gdzie częstotliwość nie przekroczy 10 MHz, a napięcie max. 3,3 V? Proszę nie prowadzić tutaj akademickich dywagacji czy analizy historii rozwoju procesorów, ale odnieść się do problemu zawartego w temacie.

    3.1.11. Nie wysyłaj wiadomości, które nic nie wnoszą do dyskusji ... czy nie rozwiązują problemu użytkownika.

  • #15 17907464
    marekdb9
    Poziom 10  
    Tak wygląda płytka PCB. Niestety o kondensatorach nie wiedzieć czemu zapomniałem. Przylutowałem w ten sposób (pojemność 100 nF). Drucikiem połączone oczywiście do masy. Schemat jest w pierwszym poście. Rezystor R7 już został zmieniony na 52 kiloomy.

    Brak komunikacji SPI po konwersji na 1.8V z ADG3304 na OrangePi Zero

    W chwili obecnej wciąż mi wyrzuca śmieci. Zmieniałem prędkość od 2 do 16 MHz z krokiem 2 MHz.

    @Thaddy jakiś pomysł?
  • #16 17909483
    marekdb9
    Poziom 10  
    Przylutowałem także kabelek, którym w sposób manualny podawałem stan wysoki na pin OE bez angażowania GPIO. Ten sposób też nie pomógł. Dodawałem też pull-up oraz pull-down do pinu OE, ale również bez rezultatu. Nie potrafię jednak zrozumieć czemu działa na tego typu układach, skoro mam niemal to samo zaaplikowane.

    Brak komunikacji SPI po konwersji na 1.8V z ADG3304 na OrangePi Zero
  • #17 17909517
    krzysiek_krm
    Poziom 40  
    Może Twój układ po prostu uległ uszkodzeniu.
  • #19 17910729
    marekdb9
    Poziom 10  
    krzysiek_krm napisał:
    Może Twój układ po prostu uległ uszkodzeniu.

    3 scalaki z rzędu by się upaliły?

    _jta_ napisał:
    Są różne wersje SPI - mogą się różnić np. tym, na którym zboczu zegara dane mają być zatrzaskiwane. Pomyłka skutkuje przesłaniem śmieci.

    Na "development boardzie" z tym układem SPI w Orange Pi pracuje bez zarzutu.
  • #21 17910837
    krzysiek_krm
    Poziom 40  
    Spróbuj w pierwszej kolejności zbadać Twoją płytkę w sposób czysto "sygnałowy", abstrahując od formatów transmisji: jedynka na wejściu powinna dać jedynkę na wyjściu, zero - zero, prostokąt - prostokąt, i tak dla wszystkich sygnałów.
  • #22 17911351
    marekdb9
    Poziom 10  
    Sprawdziłem manualnie poziomy napięć. Przy zmianach stanów na liniach SPI z poziomu GPIO wszystko jest ok. Konwersja działa zarówno 3.3V - 3.3V jak i 3.3V - 1.8V. Podłączyłem oscyloskop i mam taki przebieg.

    Brak komunikacji SPI po konwersji na 1.8V z ADG3304 na OrangePi Zero

    Od góry patrząc: MOSI, SCLK, CS, MISO.

    Zauważyłem, że linia SCLK zmienia swój stan zanim linia CS zmieni stan z wysokiego na niski.
  • #24 17911498
    marekdb9
    Poziom 10  
    _jta_ napisał:
    A na jaką szybkość masz ustawiony SPI? Oscyloskop chyba na 20 us/działkę, SPI chyba MHz, albo więcej - może spowolnij SPI?


    Zmieniam od 2 do 16 MHz. W dalszym ciągu transmisji brak.
  • #25 17911758
    _jta_
    Specjalista elektronik
    Przeczytaj jeszcze raz #18 i #20. I popatrz na te przebiegi z oscyloskopu - one nie wyglądają dobrze, zwłaszcza ten na dole. Być może to sprawa źle zestrojonej sondy, albo złego odtwarzania przebiegu przez oscyloskop - a może w tym układzie dzieje się coś niedobrego.
  • #26 17965591
    marekdb9
    Poziom 10  
    Problem rozwiązany. Zastosowałem konwerter TXS0104 i działa bez problemu
REKLAMA