Jaka jest maksymalna szybkość ramki (komunikatu) magistrali CAN przy 125 kbit / s?

18

Moja magistrala CAN działa z prędkością 125 kbit / si używa wyłącznie rozszerzonego formatu ramki. Chciałbym wiedzieć, jaka jest maksymalna szybkość ramki CAN, którą mogę wysłać. Załóżmy, że długość danych wynosi zawsze osiem bajtów.

Według tej strony Wikipedii każda ramka ma maksymalną długość (1+11+1+1+18+1+2+4+64+15+1+1+1+7) = 128bitów:

Wpisz opis zdjęcia tutaj

Biorąc pod uwagę odstęp między ramkami wynoszący co najmniej trzy bity , maksymalna szybkość pakietów poniżej 125 kbit / s powinna wynosić: 125000 / ( 128 + 3) = 954klatki na sekundę.

Ale w moim teście nie mogłem dostać tak wysoko. Maksymalna częstotliwość klatek, jaką mogę osiągnąć (przy wszystkich ośmiu bajtach danych) wynosi około 850 klatek na sekundę.

Co tu jest nie tak - moje obliczenia lub metoda testowa?

Penghe Geng
źródło
Spójrz na to z lunetą i zobacz, co faktycznie otrzymujesz. Być może twój sprzęt nie jest gotowy do przesłania nowej ramki natychmiast po jej wysłaniu. Czy bierzesz również pod uwagę czas ACK? Twoja nieznakowana suma bitów nie pomaga nam powiedzieć, co dokładnie liczysz.
Olin Lathrop
W praktyce trudno jest uzyskać 100% wykorzystanie magistrali przez dłuższy czas w stosunku do magistrali CAN, ze względu na potrzebę czasów ACK i odstępów między ramkami. Twój kontroler CAN może nie być w stanie obsłużyć 100% wykorzystania magistrali przez dłuższy czas.
Tristan Seifert
2
W zależności od dokładnie przesyłanych danych upychanie bitów może zwiększyć rozmiar ramki nawet o 10%.
WhatRoughBeast
1
@xiaobai - Nie, zmienia się długość pola danych. Jeśli chodzi o link, już go podałeś. Przeczytaj całą stronę. Jeśli twoje testy wysyłają wszystkie zera lub wszystkie, to by dużo wyjaśniało.
WhatRoughBeast
1
ACK może wpłynąć na czas transmisji, jeśli go nie rozliczasz. Ponownie, twój nieoznaczony bałagan zsumowanych liczb nie mówi nam, co tak naprawdę sumujesz, a zatem tego, czego możesz przegapić.
Olin Lathrop,

Odpowiedzi:

18

Zgodnie z sugestią Olin Lathrop zajmę się nadziewaniem bitów.

CAN używa kodowania NRZ i dlatego nie jest zadowolony z długich ciągów zer lub jedynek (traci to, gdzie powinny być krawędzie zegara). Rozwiązuje ten potencjalny problem poprzez upychanie bitów. Podczas transmisji, jeśli napotka ciąg 5 kolejnych zer lub zer, wstawi nieco innej polaryzacji, a podczas odbierania, jeśli napotka 5 kolejnych zer lub zer, zignoruje kolejny bit (chyba że bit jest taki sam jak poprzedni bitów, w którym to przypadku generuje flagę błędu).

Jeśli wysyłasz wszystkie zera lub wszystkie zera dla danych testowych, ciąg 64 identycznych bitów spowoduje wstawienie 12 wypchanych bitów. Zwiększy to całkowitą długość ramki do 140 bitów, przy najlepszej liczbie klatek na sekundę 874 klatek / s. Jeśli bity danych są takie same jak MSB CRC, dostaniesz tam kolejny wypchany bit, a szybkość klatek spadnie do 868 klatek / s. Jeśli CRC ma długi ciąg zer lub jedynek, to jeszcze bardziej zmniejszy częstotliwość klatek. To samo dotyczy twoich identyfikatorów.

Łącznie 16 wypchanych bitów zapewni idealną szybkość klatek wynoszącą 850,3 klatek / s, więc powinieneś to rozważyć. Szybki test polegałby na wykorzystaniu danych testowych z naprzemiennymi bitami i sprawdzeniu, co stanie się z częstotliwością klatek.

WhatRoughBeast
źródło
3
Tak, w moim pierwotnym teście jest naprawdę dużo zer w ładunku i identyfikatorze. Po upewnieniu się, że nie ma 5 kolejnych zer ani w danych, ani w ID, teraz mogę uzyskać 940 klatek / s, bardzo blisko obliczonego limitu. Wielkie dzięki za świetną odpowiedź.
Penghe Geng,
1

Olin ma rację, przedstawiając opis wypychania bitów i tego, jak może to negatywnie wpłynąć na teoretyczną przepustowość CAN. Inną rzeczą, która może dodatkowo zmniejszyć rzeczywistą przepustowość teoretyczną, jest opóźnienie. Nawet jeśli kontroler CAN jest w stanie osiągnąć 100% wykorzystanie magistrali, procesor hosta może nie być w stanie obsłużyć Tx i / lub Rx z tą szybkością. Może to być wynikiem wolnego procesora i / lub niewydajnego oprogramowania układowego, które implementuje stos CAN.

Trent Weaver
źródło
1

Najmniejsza ramka 2.0a (standardowa), którą można zbudować, to 47 bitów ... Najmniejsza ramka 2.0b (rozszerzona), którą można zbudować, to 67 bitów ... Obejmuje 3 bity odstępów między ramkami i wyklucza wypychanie bitów ... Teoretycznie możemy zbudować ramę, która nigdy się nie zapełni; W rzeczywistości upychanie bitów zdarza się całkiem często!

Maksymalna prędkość transmisji dla CANBus 2.0a / b wynosi 1 Mb.
Przy 1 Mb / s pojedynczy bit (dominujący / recesywny) ma długość 1uS, tj. 0,000'001 S
Tak więc 67-bitowa ramka [najmniejsza teoretyczna ramka 2,0b] zajmie 67uS do przesłania - zanim inna (67-bitowa) ramka może zostać przesłana.
1'000'000 / 67 daje 14 925 kompletnych ramek (+ 25 bitów następnej ramki)

Ponieważ
biegasz z 1/8 tej prędkości, możesz uzyskać maksymalnie 1/8 pakietów 14'925 / 8 = 1'865 klatek / sekundę przy 125Kb

Do czasu użycia wszystkich 64-bitowych (8 bajtów) danych i PRZYWRÓCENIE nie wywołałeś „błędów” wypychania bitów, mając ciągi następujących po sobie 1 lub 0
cyfr 1'000'000 / (67 + 64) = 7'633
7 ' 633/8 = 954

I to również przy założeniu, że twoje okablowanie jest idealne. Czy Twoja magistrala Can wykonana jest z kabla 120 Um UTP i jest odłączona pojemnościowo na obu końcach? A może jakiś losowy drut z rezystorem 120 omów na jednym końcu?

Ogólnie rzecz biorąc, powiedziałbym, że masz się całkiem dobrze, aby uzyskać 90% teoretycznej maksymalnej przepustowości.

Blue chip
źródło