Document fait avec Nvu Document made with Nvu




Pilote des bus CAN de l'émulateur

Instructions
Utilisation
Exemple

Principe

Si les bus CAN A et B de l'émulateur sont des interfaces d'émission/réception adressables dans la zone des registres d'extension du coeur FORTH décrites dans la page correspondante, le pilote va permettre de faciliter l'utilisation de ces interfaces en se servant du noyau temps réel.

Instructions

- CW_NUMERO 129

Numéro du registre d'extension donnant le numéro d'identification de la carte.

- CW_CAN_A_CTRL 448
- CW_CAN_A_BRPR 449
- CW_CAN_A_BTR 450
- CW_CAN_A_TEC 451
- CW_CAN_A_REC 452
- CW_CAN_A_AFMR1_H 456
- CW_CAN_A_AFMR1_L 457
- CW_CAN_A_AFIR1_H 458
- CW_CAN_A_AFIR1_L 459
- CW_CAN_A_AFMR2_H 460
- CW_CAN_A_AFMR2_L 461
- CW_CAN_A_AFIR2_H 462
- CW_CAN_A_AFIR2_L 463
- CW_CAN_A_AFMR3_H 464
- CW_CAN_A_AFMR3_L 465
- CW_CAN_A_AFIR3_H 466
- CW_CAN_A_AFIR3_L 467
- CW_CAN_A_AFMR4_H 468
- CW_CAN_A_AFMR4_L 469
- CW_CAN_A_AFIR4_H 470
- CW_CAN_A_AFIR4_L 471
- CW_CAN_A_ID_H 472
- CW_CAN_A_ID_L 473
- CW_CAN_A_RF 474
- CW_CAN_A_DLC 475
- CW_CAN_A_DATA_01 476
- CW_CAN_A_DATA_23 477
- CW_CAN_A_DATA_45 478
- CW_CAN_A_DATA_67 479

Numéros des registres d'extension du bus CAN A.

- CW_CAN_B_CTRL 480
- CW_CAN_B_BRPR 481
- CW_CAN_B_BTR 482
- CW_CAN_B_TEC 483
- CW_CAN_B_REC 484
- CW_CAN_B_AFMR1_H 488
- CW_CAN_B_AFMR1_L 489
- CW_CAN_B_AFIR1_H 490
- CW_CAN_B_AFIR1_L 491
- CW_CAN_B_AFMR2_H 492
- CW_CAN_B_AFMR2_L 493
- CW_CAN_B_AFIR2_H 494
- CW_CAN_B_AFIR2_L 495
- CW_CAN_B_AFMR3_H 496
- CW_CAN_B_AFMR3_L 497
- CW_CAN_B_AFIR3_H 498
- CW_CAN_B_AFIR3_L 499
- CW_CAN_B_AFMR4_H 500
- CW_CAN_B_AFMR4_L 501
- CW_CAN_B_AFIR4_H 502
- CW_CAN_B_AFIR4_L 503
- CW_CAN_B_ID_H 504
- CW_CAN_B_ID_L 505
- CW_CAN_B_RF 506
- CW_CAN_B_DLC 507
- CW_CAN_B_DATA_01 508
- CW_CAN_B_DATA_23 509
- CW_CAN_B_DATA_45 510
- CW_CAN_B_DATA_67 511

Numéros des registres d'extension du bus CAN B.

id,msq,type,no CAN_A_FILTRE err

Configuration des filtres de réception du bus CAN A.
id est l'identifiant ou adresse des messages filtrés.
msq est le masque de l'identifiant.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
no est le numéro du filtre (1 à 4).
err: - 0 si configuration correcte,
- -1 si le numéro du filtre est incorrect,
- -2 si le type est incorrect.

id,msq,type,no CAN_B_FILTRE err


Configuration des filtres de réception du bus CAN B.
id est l'identifiant ou adresse des messages filtrés.
msq est le masque de l'identifiant.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
no est le numéro du filtre (1 à 4).
err: - 0 si configuration correcte,
- -1 si le numéro du filtre est incorrect,
- -2 si le type est incorrect.

adr,dlc,id,type CAN_A_TX err

Emission d'un message sur le bus CAN A.
adr est l'adresse du premier octet à émettre.
dlc est la longueur en octet du message (0 à 8).
id est l'identifiant ou adresse du message à émettre.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
err: - 0 si l'émission est correcte,
- -1 si l'émission est impossible (file d'émission saturée),
- -2 si le dlc est incorrect,
- -3 si le type est incorrect.

adr,dlc,id,type CAN_B_TX err

Emission d'un message sur le bus CAN B.
adr est l'adresse du premier octet à émettre.
dlc est la longueur en octet du message (0 à 8).
id est l'identifiant ou adresse du message à émettre.
ype: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
err: - 0 si l'émission est correcte,
- -1 si l'émission est impossible (file d'émission saturée),
- -2 si le dlc est incorrect,
- -3 si le type est incorrect.

adr CAN_A_RX dlc,id,type

Réception d'un message sur le bus CAN A.
adr est l'adresse du premier octet à recevoir.
dlc est la longueur en octet du message reçu (0 à 8).
id est l'identifiant ou adresse du message reçu.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
dlc, id et type sont à 0 si aucun message n'est reçu (file de réception vide).

adr CAN_B_RX dlc,id,type

Réception d'un message sur le bus CAN B.
adr est l'adresse du premier octet à recevoir.
dlc est la longueur en octet du message reçu (0 à 8).
id est l'identifiant ou adresse du message reçu.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
dlc, id et type sont à 0 si aucun message n'est reçu (file de réception vide).

phseg2,phseg1,propseg,sjw,brtq CAN_A_INIT -

Initialisation des paramètres du bus CAN A.
phseg2, phseg1, propseg et sjw configurent le format de chaque bit transmis selon la norme CAN.
brtq est la fréquence du quantum de bit.

phseg2,phseg1,propseg,sjw,brtq  CAN_B_INIT -

Initialisation des paramètres du bus CAN B.
phseg2, phseg1, propseg et sjw configurent le format de chaque bit transmis selon la norme CAN.
brtq est la fréquence du quantum de bit.


Utilisation

Le pilote n'étant pas intégré au noyau, il faut d'abord compiler le fichier source can_A_B.txt avant de pouvoir l'utiliser.

Il faut commencer par programmer les filtres de réception si nécessaire avec les instructions CAN_A_FILTRE et CAN_B_FILTRE (jusqu'à 4 par bus) puis initialiser les bus requis avec les instructions CAN_A_INIT et CAN_B_INIT.

Un message pourra alors être émis avec les instructions CAN_A_TX et CAN_B_TX ou reçu avec les instructions CAN_A_RX et CAN_B_RX.

Exemple

Le script du fichier test_can.txt permet de vérifier si les bus CAN A et B sont reliés ou non. Un compteur est incrémenté si la liaison existe de décrémenté jusqu'à 0 dans le cas contraire:

initialisation des bus CAN A et B
compteur_emis = 0
compteur_recu = 0
tant qu'aucune touche du clavier n'est activee, faire
     emission de compteur_emis sur le bus CAN A
     attente de 50ms
     si reception sur le bus CAN B
     alors compteur_recu = valeur recue et emission de compteur_recu+2 sur le bus CAN B
     fin de si
     attente de 50ms
     si reception sur le bus CAN A
     alors compteur_emis = valeur recue
     fin de si
     si compteur_emis>0
     alors compteur_emis = compteur_emis+1
     fin de si
     affichage de la valeur du compteur
fin de tant que

Voici une vidéo: