Elektroda.pl
Elektroda.pl
X
IGE-XAOIGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Rzadko zadawane pytania - niestandardowy interfejs SPI

ghost666 18 Maj 2020 13:55 1095 5
  • Rzadko zadawane pytania - niestandardowy interfejs SPI
    Pytanie: Czy mogę uzyskać dostęp do niestandardowego interfejsu SPI za pomocą mojego mikrokontrolera?

    Odpowiedź: Tak, ale może to wymagać trochę dodatkowego wysiłku podczas tworzenia oprogramowania układowego.

    Wiele współcześnie wykorzystywanych, precyzyjnych przetworników analogowo-cyfrowych (ADC) wyposażonych jest w szeregowy interfejs peryferyjny (SPI) lub jakiś inny interfejs szeregowy do komunikacji ze sterownikami, w tym z jednostką mikrokontrolera (MCU), procesora sygnałowego (DSP) lub układem programowalnym (FPGA). Sterowniki te zapisują lub odczytują wewnętrzne rejestry ADC i odczytują kody z konwersji. SPI staje się coraz bardziej popularnym interfejsem w tym zastosowaniu, dzięki prostemu prowadzeniu ścieżek tego interfejsu na płytkach drukowanych (PCB) i szybszej częstotliwości taktowania w porównaniu do interfejsu równoległego. Dodatkowo - łatwo jest podłączyć ADC do kontrolera za pomocą standardowego interfejsu SPI.

    Niektóre nowe ADC mają jednakże SPI, ale wykorzystują niestandardowe 3- lub 4-przewodowe implementacje SPI jako urządzenia podrzędnego. Wszystko to, ponieważ układy te chcą osiągnąć wyższą przepustowość niż w klasycznej implementacji tego interfejsu szeregowego. Na przykład rodzina AD7616, AD7606 i AD7606B ma dwie lub cztery linie danych SDO dla zwiększenia przepustowości komunikacji. Układy z rodzin AD7768, AD7779 i AD7134 mają wiele linii danych. Użytkownicy tych przetworników mają jednakże trudności z projektowaniem interfejsów SPI dla mikrokontrolera do konfiguracji ADC i odbierania z nich danych z uwagi na ich niestandardowy układ.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.1. Przetwornik AD7768 jako szeregowy master z dwoma pinami wyjściowymi dla danych.


    Standardowe połączenie SPI mikrokontrolera z ADC

    SPI jest synchronicznym interfejsem szeregowym opartym na architekturze master/slave z pełnym dupleksem przesyłu danych (linie danych biegną równolegle w obu kierunkach). Dane z urządzenia nadrzędnego lub podrzędnego są synchronizowane na, odpowiednio, narastającym lub opadającym zboczu zegara. Dzięki temu zarówno master, jak i slave mogą przesyłać dane w tym samym czasie. Rysunek 2 pokazuje typowe 4-liniowe podłączenie interfejsu SPI do mikrokontrolera.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rysunek 2. Standardowe połączenie SPI mikrokontrolera z urządzeniem podrzędnym takim jak przetwornik ADC.


    Aby rozpocząć komunikację poprzez SPI, kontroler musi wysłać sygnał zegara i wybrać ADC, włączając sygnał CS, który zwykle jest aktywowany stanem niskim. Ponieważ SPI jest interfejsem full-dupleks, zarówno kontroler, jak i ADC mogą jednocześnie wysyłać dane za pośrednictwem odpowiednio linii: MOSI/DIN oraz MISO/DOUT. Interfejs SPI kontrolera zapewnia użytkownikowi elastyczność wyboru rosnącego lub opadającego zbocza zegara w celu próbkowania linii danych. Aby zapewnić niezawodną komunikację między urządzeniem nadrzędnym a urządzeniem podrzędnym, użytkownicy muszą przestrzegać specyfikacji taktowania interfejsu cyfrowego mikrokontrolera i układu ADC.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.3. Przykładowy wykres taktowania zegara danych SPI.


    Jeśli interfejs SPI mikrokontrolera i interfejs szeregowy ADC mają standardowy tryb synchronizacji, użytkownicy nie będą mieli problemu z zaprojektowaniem projektu i płytki PCB oraz opracowaniem oprogramowania układowego dla mikrokontrolera. Na rynku są jednak dostępne nowe ADC z interfejsem szeregowym, który jest inny niż standardowy SPI. Typowe układy z mikrokontrolerami czy DSP często nie mogą czytać danych przez taki port szeregowy np. w przetworniku AD7768, który wymaga niestandardowego portu SPI i odmiennego taktowania, jak pokazano na rysunku 4.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.4. Przebieg wyjść cyfrowych z AD7768 dla FORMATx=1× - wyjście tylko na DOUT0.


    W poniższym artykule opisano sposoby manipulowania standardowym interfejsem SPI mikrokontrolera w celu współpracy z ADC, które mają niestandardowe porty SPI. W artykule tym omówiono cztery różne rozwiązania odczytu danych z ADC przez klasyczny interfejs szeregowy SPI:

    * Rozwiązanie 1: Mikrokontroler jako interfejs SPI slave do ADC jako SPI master przez jedną linię DOUT.
    * Rozwiązanie 2: Mikrokontroler jako interfejs SPI slave do ADC jako SPI master przez dwie linie DOUT.
    * Rozwiązanie 3: Mikrokontroler jako interfejs SPI slave do ADC jako SPI master poprzez DMA.
    * Rozwiązanie 4: Mikrokontroler jako SPI master i SPI slave do odczytu danych na dwóch liniach DOUT.

    Odczyt danych z AD7768 za pomocą interfejsu SPI mikrokontrolera STM32F429 przez jedną linię DOUT

    Jak pokazano na rysunku 4, gdy FORMATx = 11 lub 10, dane wyjściowe z kanału 0 do kanału 7 dostępne są tylko na DOUT0. W trybie standardowym AD7768/AD7768-4 działa jako master i przesyła dane do mikrokontrolera, procesora DSP lub układu FPGA. AD7768/AD7768-4 generuje dane, zegar danych (DCLK) i sygnał ramkowania na zboczu opadającym (DRDY) dla urządzenia podrzędnego.

    Rodzina mikrokontrolerów STM32Fxxx jest szeroko stosowana w wielu różnych aplikacjach. Mikrokontrolery te mają nawet po kilka portów SPI, które można skonfigurować jako master lub slave z różnymi, typowymi trybami synchronizacji interfejsu SPI. Metody wprowadzone w tym artykule można również zastosować w innych mikrokontrolerach z ramką 8-, 16- lub 32-bitową.

    Układy AD7768/AD7768-4 mają odpowiednio 8-kanałowe i 4-kanałowe przetworniki ADC typu sigma-delta (Σ-Δ) z modulatorem sigma-delta i filtrem cyfrowym w każdym kanale, co umożliwia synchronizowanie próbkowania sygnałów AC i DC na wszystkich kanałach. Osiągają zakres dynamiki do 108 dB przy maksymalnej szerokości pasma wejściowego równej 110,8 kHzoraz typową nieliniowość na poziomie ±2 ppm, offset napięciowy ±50 μV i błąd wzmocnienia ±30 ppm.

    Użytkownicy układów AD7768 i AD7768-4 mogą wymieniać przepustowość wejściową, na wyjściową szybkość transmisji danych lub ilość rozpraszanej mocy, a także wybrać jeden z trzech trybów zasilania w celu optymalizacji implementacji układu pod kątem docelowych poziomów szumu i zużycia energii. Elastyczność przetworników AD7768 oraz AD7768-4 pozwala im stać się platformami do wielokrotnego użytku w różnych systemach do pomiaru prądu przemiennego o wysokich parametrach. Niestety interfejs szeregowy AD7768 nie jest typowym interfejsem SPI opartym na sztywnych założeniach czasowych, a dodatkowo układ AD7768 działa jako master interfejsu SPI. Zasadniczo poleca się, by użytkownicy tych elementów używali układów FPGA lub CPLD jako kontrolerów tych przetworników.

    Można jednak korzystać, na przykład, z modułów ewaluacyjnych, takich jak STM32F429IDISCOVERY i układów AD7768. Interfejs SPI jest podłączony, jak pokazano na rysunku 5. W tym ustawieniu wszystkie osiem wyjść danych kanału AD7768 przesyłanych jest tylko w linii DOUT0.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.5. Schemat ideowy AD7768 wysyłającego dane przez linię SOUT0 do mikrokontrolera STM32F429 poprzez interfejs SPI.


    Problemy jakie trzeba rozwiązać w takim systemie:

    * AD7768 działa jako master w SPI, więc interfejs SPI STM32F429I musi być skonfigurowany jako slave,
    * Stan wysoki na linii DRDY trwa jedynie jeden okres zegara DCLK, co nie jest typowym czasem dla linii CS,
    * Zegar DCLK jest generowany w sposób ciągły, nawet gdy DRDY ustawione zostanie w stan niski, sygnalizując, że wszystkie dane z wszystkich kanałów zostały już przesłane przez przetwornik.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.6. Bity danych z układu AD7768, odczytane w rozwiązaniu zależnym czasowo.


    Rozwiązanie 1: SPI mikrokontrolera jako interfejs slave do SPI master przetwornika ADC przez jedną linię DOUT

    Skonfiguruj jeden z portów SPI STM32F429, taki jak SPI4, jako slave do odbierania bitów danych na MOSI wykorzystując zegar DCLK.

    Podłącz linię DRDY z AD7768 do pinu zewnętrznego przerwania w STM32F429 (EXTI0) i pinu NSS (linia Chip Select w interfejsie SPI). Narastające zbocze na DRDY uruchomi procedurę obsługi przerwania EXTI0, aby umożliwić urządzeniu slave SPI rozpoczęcie odbierania bitów danych z pierwszego zbocza opadającego DCLK po osiągnięciu przez DRDY niskiego poziomu. Kwestia zależności czasowych ma tutaj kluczowe znaczenie.

    Po odebraniu wszystkich danych z kanałów od 0 do 7 interfejs SPI powinien zostać wyłączony, aby zapobiec odczytaniu dodatkowych, nieprawidłowych danych, ponieważ sygnał DRDY powoduje, że CS interfejsu SPI slave jest w stanie niskim, a zegar DCLK nadal jest generowany i obecne są zbocza.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Na rysunku 7 po lewej stronie zamieszczono kod programu pokazujący, w jaki sposób skonfigurować należy interfejs SPI4.

    Gdy oprogramowanie działa w trybie przerwania, zegar DCLK może działać do 4 MHz, a ODR osiąga 8 kSPS. Oprogramowanie powinno przejść do obsługi przerwań, aby uruchomić interfejs SPI w ciągu półtora okresu zegara DCLK (375 ns). Aby ułatwić przejście do procedury przerwania w firmware, mikrokontroler może odczytywać dane na narastającym zboczu DCLK, co może dać dodatkową połowę okresu DCLK na reakcję. Ale ponieważ czas narastania DCLK do poziomu nieprawidłowego DOUTx wynosi –3 ns (–4 ns dla napięcia IOVDD = 1,8 V), opóźnienie wynikające z czasu propagacji (> bezwzględny czas narastania zegara DCLK + czas podtrzymania dla mikrokontrolera) na DOUTx należy dodać poprzez odpowiednie prowadzenie ścieżek na PCB lub dodanie bufora do linii danych.

    Rozwiązanie 2: SPI mikrokontrolera jako interfejs slave do SPI master ADC przez dwie linie DOUT

    W pierwszym rozwiązaniu tylko DOUT0 służy do transmisji danych z ośmiu kanałów ADC. Tak więc odczyt danych przez SPI ogranicza szybkość transmisji ADC do 8 kSPS. Jak pokazano na rysunku 1, przesyłanie wyjścia kanałów 0 - 3 na DOUT0 i wyjść kanałów 4 - 7 na DOUT1 może istotnie skrócić czas przesyłania danych. Linie interfejsów połączone są tak, jak pokazano na rysunku 8. Dzięki takiej zmianie ODR może łatwo wzrosnąć do 16 kSPS przy częstotliwości DCLK równej 4 MHz.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.8. Dane wyjściowe z układu AD7768 na liniach DOUT0 oraz DOUT1 podłączone do dwóch interfejsów SPI mikrokontrolera STM32F429.


    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Firmware może wykorzystywać tryb odpytywania zamiast działać na przerwaniach, aby zredukować opóźnienia pomiędzy narastającym zboczem linii DRDY a załączeniem się SPI, by odbierać dane. W ten sposób osiągnąć można ODR rzędu 32 kSPS przy DCLK o częstotliwości 8 MHz.

    Na rysunku 9 po prawej stronie zaprezentowano kod programu, w którym linia EXTI0 działa w trybie odpytywania, a interfejsy SPI4 i SPI5 służą do odbierania bitów danych z AD7768 przez linie danych DOUT0 i DOUT1.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rozwiązanie 3: MCU SPI jako interfejs Slave dla SPI Master ADC poprzez DMA

    Bezpośredni dostęp do pamięci (DMA) służy do szybkiego przesyłania danych między urządzeniami peryferyjnymi a pamięcią oraz między pamięcią a pamięcią z całkowitym pominięciem CPU układu. Dane mogą być szybko przenoszone przez DMA bez żadnych działań mikrokontrolera. Dzięki temu zasoby mikrokontrolera są wolne do innych operacji. Oto uwagi dotyczące wykorzystania interfejsu SPI w mikrokontrolerze, działającego jako urządzenie podrzędne w celu odbierania danych przez DMA.

    Na rysunku 10, po lewej stronie pokazano kod, w którym linia przerwania EXTI0 pracuje w trybie odpytywania, a interfejs SPI4 w trybie DMA i służy do odbierania danych z AD7768 na linii DOUT0.

    Rozwiązanie 4: SPI mikrokontrolera jako master i slave do odczytu danych na dwóch liniach DOUT

    Wysokoprzepustowe lub wielokanałowe, precyzyjne przetworniki ADC wyposażone są w dwie, cztery, a nawet osiem linii SDO w interfejsie SPI – wszystko dla szybszego odczytu danych przez interfejs szeregowy. W przypadku mikrokontrolerów z dwoma lub więcej portami SPI mogą one jednocześnie wykorzystywać te porty w celu szybszego odczytu danych z przetwornika na wielu liniach danych wyjściowych jednocześnie.

    W poniższym przypadku użycia płytki deweloperskiej STM32F429IDISCOVERY wykorzystano interfejs SPI4 jako SPI master, a SPI5 jako slave do odbierania danych z płytki EVAL-AD7606B-FMCZ na liniach DOUTA oraz DOUTB, jak pokazano na rysunku 8.

    Układ AD7606B jest 16-bitowym, przetwornikiem analogowo-cyfrowym z równoległym próbkowaniem każdej z ośmiu linii wejściowych. Każdy kanał układu posiada ochronę analogowych pinów wejściowych, programowalny wzmacniacz wejściowy (PGA), filtr dolnoprzepustowy i 16-bitowy rejestr o sukcesywnej aproksymacji (SAR) w celu wykonywania konwersji ADC. AD7606B zawiera również elastyczny filtr cyfrowy, i charakteryzuje się niskim dryftem, posiada precyzyjny bufor dla napięcia odniesienia i źródło napięcia odniesienia 2,5 V. Układ wyposażono w elastyczne interfejsy równoległe i szeregowe. AD7606B działa z pojedynczym zasilaniem 5 V i obsługuje rzeczywiste bipolarne zakresy wejściowe ±10 V, ±5 V i ±2,5 V, przy próbkowaniu o szybkości transmisji 800 kSPS dla wszystkich kanałów wejściowych.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rys.11. Interfejsy SPI mikrokontrolera wykorzystane jako master i slave, aby odbierać dane z wyjść DOUTA i DOUTB.


    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Na rysunku 12 po lewej stronie pokazano kod programu, konfigurujący interfejs SPI4 jako mastera transmisji, a SPI5 jako slave. Na rysunku 13 pokazano oscylogram interfejsu cyfrowego AD7606B - widoczne są linie BUSY, SCLK, DOUTA oraz DOUTB podczas pracy układu z prędkością 240 kSPS.

    Rzadko zadawane pytania - niestandardowy interfejs SPI
    Rysunek 13. Oscylogram linii BUSY, SCLK układu AD7606B i linii danych w DOUTA i DOUTB.


    Podsumowanie

    W artykule tym omówiono, jak podejść do używania interfejsu SPI typowego mikrokontrolera w celu uzyskania dostępu do danych przetwornika ADC z niestandardowym interfejsem SPI. Podejścia te można zastosować bezpośrednio w lub z niewielkimi korektami, aby kontrolować inne ADC z interfejsem SPI, np. taki, który działa jako master SPI lub posiada wiele linii wyjściowych danych wykorzystywanych równolegle w celu uzyskania większej przepustowości danych.

    Źródło: https://www.analog.com/en/analog-dialogue/raqs/raq-issue-172.html

    Fajne! Ranking DIY
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 9757 postów o ocenie 7934, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • IGE-XAOIGE-XAO
  • #2
    krisRaba
    Poziom 30  
    ghost666 napisał:
    Rys.11. Interfejsy SPI mikrokontrolera wykorzystane jako master i slave, aby odbierać dane z wyjść DOUTA i DOUTB.

    Ten rysunek według mnie zawiera błąd, a przynajmniej ja się kiedyś na tym naciąłem i jak przez mgłę pamiętam, że było inaczej niż na tym rysunku.. mianowicie DOUTA faktycznie wchodzić będzie na MISO (Master In Slave Out), bo SP14 będzie pracować jako MASTER, natomiast skoro SP15 pracuje jako SLAVE, to on dane przyjmuje na linii MOSI (Master Out Slave In)

    Dodano po 2 [minuty]:

    O, teraz nawet wróciłem do Rys.8 i tam mają poprawnie, że jeśli SPI jest SLAVE, a przetwornik MASTER, to dane wchodzą na MOSI ;)
  • IGE-XAOIGE-XAO
  • #3
    Marek_Skalski
    Admin Sekcji Początkujący
    Konia z rzędem temu, kto znajdzie w STM32F429Ix peryferiale SP14 i SP15. Powinno być SPI4 oraz SPI5, ale kto by się przejmował takim drobiazgami. Niestety, ale takie materiały są opracowywane przez AspenCore i udostępniane inżynierom.
  • #4
    krisRaba
    Poziom 30  
    Hehehe, dobre :-D A już myślałem, że w F4 zaszaleli i pozmieniali dziwnie nazwy ;-) Jest TIM15 czy TIM20, to może chcieli nadgonić z numeracją :lol:


    Dodano po 3 [minuty]:

    Ciekawe, że w tekście jest dobrze. Może grafikę do opracowania dostała osoba niezaznajomiona z tematem, a użyto czcionki, gdzie I wygląda tak samo jak 1 ;-) Jak widać sam się dałem nabrać myśląc, że w tej rodzinie jest inaczej :-)
  • #5
    baseemitercollector
    Poziom 11  
    Marek_Skalski napisał:
    Niestety, ale takie materiały są opracowywane przez AspenCore i udostępniane inżynierom.


    Daj spokoj, przeciez zaden profesjonalista nie bierze pod uwage materialow umieszczonych na elektrodzie jako powazne i godne zaufania. Tak samo pudelek.pl nie jest zrodle informacji dla inwestorow gieldowych.
  • #6
    zgierzman
    Poziom 26  
    baseemitercollector napisał:
    Marek_Skalski napisał:
    Niestety, ale takie materiały są opracowywane przez AspenCore i udostępniane inżynierom.


    Daj spokoj, przeciez zaden profesjonalista nie bierze pod uwage materialow umieszczonych na elektrodzie jako powazne i godne zaufania. Tak samo pudelek.pl nie jest zrodle informacji dla inwestorow gieldowych.


    A zwróciłeś uwagę, że artykuł jest tłumaczeniem ze strony Analog Devices, i stamtąd też pochodzą grafiki z błędami? Więc skąd mają czerpać wiedzę profesjonaliści, jak nie z materiałów udostępnianych przez producenta?