Rozpočet propustnosti: nikdy to není užitečný obsah
„Vždyť je to jenom osm bajtů“ není odpověď na otázku, jestli se to vejde. Na drát totiž neodchází osm bajtů, ale rámec — a u malých zpráv je režie ta větší půlka.
- užitečné = 8 B = 64 b
Osm bajtů na kloub: poloha a rychlost. To je celý užitečný obsah jedné zprávy.
- režie = 44 + 3 = 47 b
Standardní rámec CAN bez dat má 44 bitů a po něm musí projít tři bity mezery. Ta režie odejde s každou zprávou znovu.
- rámec = 64 + 47 = 111 b
Sto jedenáct bitů na osm bajtů dat. Režie je čtyřicet dva procent — u osmi bajtů, tedy u největšího rámce, jaký klasický CAN umí.
- zatížení = 67 %
Šest kloubů po kilohertzu se vejde — zabere dvě třetiny sběrnice. Přidej proud a nevejde se.
Šest kloubů se vejde. Sedmý stream ne.
Tohle je hlavní číslo celé kapitoly a je jiné, než se čeká. Šest kloubů, které posílají polohu po kilohertzu, zabere 666 kb/s, tedy 67 % megabitové sběrnice CAN — vejde se to, a dokonce s rezervou. Sběrnice není problém.
Problém přijde ve chvíli, kdy někdo řekne „a přidáme ještě proud“. Proud jsou čtyři bajty, tedy polovina toho, co poloha. Jenže:
Druhý stream stojí 71 % prvního, přestože nese poloviční data — protože si s sebou znovu bere celých 47 bitů režie. Šest kloubů se dvěma streamy je 1 140 kb/s, tedy 114 %. Sběrnice, která měla třetinovou rezervu, přeteče.
Proč se to nedá zabalit
Dvanáct bajtů v jednom rámci by se vešlo — 12 B na kloub je 143 bitů, šest kloubů 858 kb/s, tedy 86 %. Jenže klasický CAN nemá dvanáctibajtový rámec: maximum je osm. Není to aritmetický problém, ale problém návrhu, a řeší se buď CAN FD, nebo tím, že proud nepoletí po kilohertzu.
Kde se to číslo bere
Čtyřicet čtyři bitů prázdného rámce nepočítá tahle labka — počítá je LinkLab, bit po bitu, včetně tří řídicích bitů, o které se dá snadno splést. Tady se k nim přidávají tři bity mezery, protože ta ke zprávě nepatří, ale k zatížení sběrnice ano. Testy hlídají, že se ta dvě čísla nerozejdou.
Past: režie se počítá na zprávu, ne na bajt. Zdvojnásobit frekvenci malého streamu bolí víc než zdvojnásobit jeho velikost.