Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

USART via IIC/SPI, 64 bajty FIFO, AUTO Flow control, AUTO DIR RS-485, 18 GPIO

R-MIK 21 Lip 2017 09:18 3414 0
  • USART via IIC/SPI, 64 bajty FIFO, AUTO Flow control, AUTO DIR RS-485, 18 GPIO

    Bywa, że w projekcie trzeba dodać dodatkowy port komunikacyjny. Jest to problemem, gdy taka potrzeba zajdzie w końcowej fazie projektu. Wymiana mikrokontrolera na większy spowoduje konieczność zmiany PCB.
    Dodatkowy port USART, może być potrzebny tylko podczas uruchamiania urządzenia (np do debugowania) albo tylko do upgrade softu. Wtedy może przydać się układ SC16IS7xx. Dodatkowe 8(10)-bit GPIO z możliwością generowania przerwań też może się przydać, bo nie trzeba dodawać np PCF8574.

    Wykonałem moduł na układach SC16IS760 i 762. Można jest skonfigurować do pracy z interfejsem IIC lub SPI. Łącznie 3 porty szeregowe. Na PCB znajduje się konwerter MAX3232 i FT230. Jeden USART wyprowadzono na goldpin tak jak GPIO.

    Zalety układów SC16IS:
    - kompatybilność na poziomie rejestrów 16C55x (polemizowałbym czy to zaleta)
    - komunikacjia po SPI 18Mb/s lub IIC 400kHz
    - FIFO nadawcze/odbiorcze 64 bajty
    - sprzętowe sterowanie przepływem (CTS, RTS) jak 8251 czy SIO od Z-80
    - automatyczne generowanie, reakcja na Xon, Xoff (jeden lub dwa znaki)
    - sprzętowe sterowanie kierunkiem dla RS485
    - własny oscylator więc kwarc w CPU nie musi być "UART-owy"
    - max transfer 5Mb/s (przy IIC nie bardzo ma to sens, ale przy SPI 9mb/s
    jak najbardziej)
    - 1 lub 2 USART-y w jednej obudowie
    - dodatkowe GPIO
    - generowanie przerwań po zmianie GPIO
    - zasilany z 3V3 ale akceptuje na IIC/SPI 5V
    - w przeciwieństwie do 16C55x można odczytać liczbę danych zgromadzonych w FIFO odbiorczym oraz liczbę danych w FIFO nadawczym
    - FIFO (TX i RX) może generować przerwania po zapełnieniu (odbiorcze) czy opróżnieniu (nadawcze) wybranej liczny danych w zakresie 4..64 z krokiem 4
    - w automatycznym sterowaniu przepływem konfiguruje się liczbę danych po których jest zmieniany stan linii RTS czy reakcja na CTS
    - interfejs IrDA
    - wiele mniej istotnych zalet

    Wady:
    - cena. W KAMAMI jeden SC16IS760 9zł brutto, SC16IS762 19zł

    Co do szybkości transferu to gdy użyje się blokowej operacji na FIFO można wykorzystać maksymalną przepustowość SPI/IIC, gdy czytamy bajt po bajcie (choć FIFO jest włączone) przepustowość spada dwukrotnie (trzeba wysłać komendę i daną). FIFO nadawcze jest bardzo wygodne, gdy wysyła sie rzadko niedużo danych zwłaszcza przy małych prędkościach. Można w krótkim czasie wysłać max 64 bajty i program główny działa dalej bez czekania na koniec transmisji i nie trzeba do tego używać przerwań.

    Używając SC16IS7xx zbudowałem konwerter DMX na WS2812. Operacje odczytu/nadawania DMX (konwerter ma USB i może pełnić rolę konwertera USB->DMX) nie wymagają przerwań. Zaletą SC16SI w stosunku do USART-a w AVR jest odróżnianie sygnału BREAK od błędu ramki.

    Fotka jest kiepska, dlatego na obrazek tytułowy wybrałem schemat (dodatkowo w załączniku w PDF).
    USART via IIC/SPI, 64 bajty FIFO, AUTO Flow control, AUTO DIR RS-485, 18 GPIO
    Na fotce widać linijkę z Elektrody, Łatwo wywnioskować, że była robiona niedawno.

    Jeszcze poznaję możliwości układów. Nie zamontowałem jeszcze SC16IS762 bo nie mam konwertera MAX3232 w SMD. Skoro jednak działa SC16IS760 to czemu 762 miałby nie zadziałać.
    Dostęp do konfiguracji zaawansowanej jest trochę zagmatwany. Do LCR trzeba wpisać $BF po czym w MCR ustawić bit 4.

    Kłopotliwa może tez być obsługa układu, gdy chcemy to robić w przerwaniach (np USART) i programie głównym (np GPIO). Jeszcze większe kłopoty można mieć gdy magistrala jest używana także przez inne układy w programie głównym. Trzeba wtedy użyć semaforów (flag zajętości magistrali komunikacyjnej).


    Na bieżąco z placu boju:
    Zapis blokowy działa rewelacyjnie. Odczytuje rejestr TXLVL i wysyłam blok (tyle ile może pomieścić FIFO używając sekwencji:
    CMD wybór THR,
    zapis THR ..... zapis THR
    Jest to praktycznie dwa razy szybsza operacja niż powtarzanie sekwencji CMD, THR bo CMD wysyłam raz.
    Wysłanie 48 bajtów dla SPI 10Mb/s trwa tyle co wysłanie 5 znaków po DMX (250kb/s).

    Niestety z odczytem mam problem. Robię to tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    I coś się kaszani. Może poczekam na obsługę SC16IS w BASCOM i zmienie jezyk?


    Fajne!
 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME