eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPrzesyłanie większych ilości danych przez CAN › Przesyłanie większych ilości danych przez CAN
  • Data: 2014-03-29 13:39:14
    Temat: Przesyłanie większych ilości danych przez CAN
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Kontynuuję temat, który już kiedyś tutaj poruszałem.
    Jak wspominałem, potrzebuję rozwiązania, które umożliwiłoby mi
    przesyłanie przez magistralę CAN danych o rozmiarze większym, niż
    pozwala na to pojedyncza ramka (8 bajtów). Chciałbym skomunikować
    urządzenia przy pomocy komend AT, przesyłać teksty do wyświetlenia na
    zdalnym LCD itp.

    Proste zapisywanie komend w jakimś buforze odbiorczym nie wchodzi w grę,
    bo jak wiadomo magistrala CAN jest magistralą multimaster. Istnieje więc
    możliwość, że w trakcie odbierania wiadomości od jednego urządzenia,
    wtrąci się jakieś inne i poszczególne ramki przemieszają się w jednym
    buforze odbiorczym. Stosowanie osobnego bufora dla każdego z odbiorców
    nie wchodzi w grę w małych MCU, a więc widzę tutaj jedynie dwa rozwiązania:

    1. Jakieś sprytne wydzielanie z bufora tylko tego, czego nam potrzeba,
    już po stwierdzeniu odebrania końca wiadomości. Ramki składające się na
    przychodzące wiadomości od niepasujących nadawców trzeba by wtedy
    przepisywać do innych komórek, robiąc coś w rodzaju "defragmentacji",
    uważając jednocześnie, by nic nie zostało nadpisane w momencie
    jednoczesnego przyjścia przerwania RX.
    2. Upewnienie się, że nic nie zacznie nadawać kolejnej wiadomości, zanim
    nie skończymy odbierać obecnej. Innymi słowy urządzenie wysyła prośbę o
    nawiązanie połączenia. Jeśli mamy wolną linię (i pusty bufor) wysyłamy
    mu ACK. Od tego momentu do otrzymania końca wiadomości (albo timeoutu) w
    buforze zapisywane są tylko ramki z tego adresu. Zapytania od innych
    chętnych do nawiązania transmisji skutkują prośbą o chwilowe wstrzymanie
    się.

    Nie chciałbym wyważać otwartych drzwi, jeśli istnieje już jakieś
    rozwiązanie. Ktoś kiedyś polecał standard ISO-TP. Znalazłem dzisiaj coś
    takiego:

    https://github.com/openxc/isotp-c

    Wikipedia mówi, że ten standard pozwala na przesyłanie 4095 bajtów
    danych. To znacznie więcej, niż potrzebuję (myślę, że 200 bajtów to aż
    nadto). Jednak w opisie biblioteki trafiłem na fragment, który wyowłał u
    mnie konsternację:

    "The current version supports only single frame ISO-TP messages. This is
    fine for OBD-II diagnostic messages, for example, but this library needs
    some additional work before it can support sending larger messages."

    Ktoś może mi powiedzieć o co chodzi? To chyba jakaś pomyłka? Po co
    tworzyć taką bibliotekę, skoro koniec końców nie potrafiłaby ona
    przesłać więcej danych, niż potrafi obsłużyć sprzętowo sam kontroler
    CAN? Jeśli jednak przy pomocy tej biblioteki mógłbym wysyłać i odbierać
    większe porcje danych, to czy istnieje szansa, że odpalę ją na jednym z
    większych ośmiobitowych AVR-ów (Mega644, Mega128, AT90CAN128)?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: