Verzenden van CAN-berichten
Identifiers
In tegenstelling tot het 'node georiënteerde' of peer-to-peer berichtenverkeer, waarbij de transmissie van een bericht plaatsvindt tussen twee bepaalde nodes, is de verzending van berichten met CAN gebaseerd op het zogenaamde ‘producent-consument’- of broadcast-principe. Een bericht dat door een node wordt verstuurd, wordt door alle overige CAN-nodes ontvangen.
Om dit te bereiken worden berichten niet voorzien van een afleveradres zoals bij fysieke adressering, maar in plaats daarvan met een ondubbelzinnige berichtenidentificatie, CAN maakt dus gebruik van functionele adressering. Het versturen van berichten naar alle nodes in een netwerk wordt ook wel ‘broadcasting’ genoemd.
In het standaard CAN-protocol beschikken berichten normaal gesproken over een 11-bits identifier. Dit houdt in dat er 2048 verschillende soorten berichten binnen een systeem kunnen worden gedefinieerd. Dit is voor de meeste toepassingen meer dan voldoende.
Om CAN indertijd ook voor de SAE J1939 standaard beschikbaar te maken, is het extended frame toegevoegd. Dit maakt gebruik van 29-bits-identifiers en biedt daarmee de mogelijkheid om meer dan 512 miljoen verschillende berichten te definiëren.
Iedere node kan berichten verzenden en kan iedere identifier (=Id) hiervoor gebruiken. Id's zijn dus niet het exclusieve bezit van een bepaalde node. Zoals al aangegeven ontvangen alle overige nodes dit bericht. Wat een typische Id betekent, is volledig vrij en wordt bepaald door de applicatie zelf, en dus de achterliggende software.
Indien gewenst zouden bijvoorbeeld bepaalde Id's enkel door één node geïnterpreteerd kunnen worden; de overige nodes ontvangen het bericht natuurlijk ook, maar doen er niets mee. Zo kan bijvoorbeeld fysieke adressering softwarematig nagebootst worden.
Een node kan overigens de CAN-controller dusdanig programmeren dat slechts bepaalde, en gewenste, Id's aan de microcontroller doorgegeven worden. Zodoende kan een node relevante berichten filteren uit de berichtenstroom op de bus. Hiervoor bieden de CAN-controllerchips mechanismen, zogenaamde acceptatiefilters, die in hardware zijn geïmplementeerd. Deze mechanismen zijn vooral bedoeld om kleinere microcontrollersystemen, met beperkte verwerkingsmogelijkheden, niet te belasten met te veel onnodige berichten.
Standaard en Extended frames mogen door elkaar gebruikt worden. Ze hebben onderling ook geen relatie. Id=000hex (11-bit) is een ander identifier dan Id=00000000hex (29-bit).
Multimaster
Elke node binnen een CAN-netwerk kan beginnen met het versturen van een bericht zodra de bus vrij is. De node die een bericht verstuurd wordt, gedurende de verzending, Master genoemd. De overige nodes, die dit bericht ontvangen, zijn op dat moment de Slaves. Er kan op enig moment slechts één Master zijn. In het geval meer dan meerdere knooppunten binnen het netwerk gelijktijdig de transmissie van een bericht in gang wil zetten is een arbitrageproces noodzakelijk. Dit proces zorgt ervoor dat slechts één node daadwerkelijk de Master wordt en een bericht verstuurd. Dit is altijd de node die het laagste Id wenst te verzenden.
Zodra een andere node daarna een bericht wil versturen, wordt deze de Master. De oorspronkelijke Master wordt dan weer een van de luisterende slaves. Omdat elk node berichten kan versturen is ook een directe berichtentransmissie tussen alle nodes binnen het netwerk mogelijk, zonder dat dit centraal aangestuurd of geregeld dient te worden. Zodoende is het eveneens mogelijk om alleen dan berichten te verzenden wanneer dit noodzakelijk is, dat wil zeggen wanneer een bijbehorende gebeurtenis heeft plaatsgevonden. Vergeleken met een cyclische berichtendoorvoer heeft dit een aanzienlijk lagere bus belasting òf een besparing op de vereiste data-transmissieverhouding tot gevolg.
Databytes
Een CAN-bericht kan maximaal 8 databytes bevatten. Dat betekent dat een bericht ook geen enkele databyte mag bevatten.
In principe kan het aantal databyte’s dat in een bericht met een bepaalde Id verzonden wordt variabel zijn. De CAN-standaard staat dat toe meer sommige CAN-controllers niet. Deze typische controllers werken met een soort van dual-memory waarin alle CAN-berichten die verwerkt worden gedefinieerd zijn. Dat gebeurd bij het opstarten en kan niet gewijzigd worden.
Remote Request
Naast de bovenstaande dataframe kan een CAN-node ook een zogenaamd Remote Request frame (RTR) verzenden. Een Remote Request is als het ware naar een bepaald CAN-bericht vragen. Het is de bedoeling dat de node die 'eigenaar' van het desbetreffende CAN Id is, als reactie op een RTR een CAN-bericht met het gewenste Id en actuele data verzend. RTR berichten kunnen handig zijn voor data die bijvoorbeeld niet, of nauwelijks, verzonden worden of voor nodes die later op de bus verschijnen en up-to-dat willen zijn.
Sommige CAN-controllers slaan intern de actuele data van de CAN Id's op die ze kunnen verzenden. Dergelijke CAN-controllers kunnen autonoom op een RTR reageren. Bij de overige CAN-controllers dient de software een RTR af te handelen.












