Document fait avec Nvu Document made with Nvu




Interface CAN

Version 0.1 du 22 Janvier 2012
Ecrit par jpb.forth

Table des registres
Description des registres
Initialisation

Introduction

Ces spécifications décrivent une interface CAN 2.0 destinée à être intégré dans le FPGA contenant le coeur FORTH permettant l'interconnexion de plusieures cartes ainsi que d'autres systèmes utilisant ce type de bus.

Cette page décrit uniquemen cette interface et sa configuration. Pour toute information sur le bus CAN, il suffit d'utiliser un moteur de recherche internet.

Plusieurs registres sont destinés à être logés dans la zone d'extension du coeur FORTH:

  • un registre de contrôle,
  • des registres de filtrage pour la réception des messages,
  • une file d'émission de message,
  • une file de réception de message.

L'interface CAN est ainsi un périphérique interne de ce processeur.

Voici le schéma synoptique de l'interface CAN:



Table des registres

Tous les registres sont définis sur 16 bits:

Numéro
Registre
448 (0x1C0)
CAN_CTRL
449 (0x1C1)
CAN_BRPR
450 (0x1C2)
CAN_BTR
451 (0x1C3)
CAN_TEC
452 (0x1C4)
CAN_REC
453 à 455 (0x3C5...1C7)
Réservé
456 (0x1C8)
CAN_AFMR1_H
457 (0x1C9)
CAN_AFMR1_L
458 (0x1CA)
CAN_AFIR1_H
459 (0x1CB)
CAN_AFIR1_H
460 (0x1CC) CAN_AFMR2_H
461 (0x1CD) CAN_AFMR2_L
462 (0x1CE) CAN_AFIR2_H
463 (0x1CF) CAN_AFIR2_L
464 (0x1D0) CAN_AFMR3_H
465 (0x1D1) CAN_AFMR3_L
466 (0x1D2) CAN_AFIR3_H
467 (0x1D3) CAN_AFIR3_L
468 (0x1D4) CAN_AFMR4_H
469 (0x1D5) CAN_AFMR4_L
470 (0x1D6) CAN_AFIR4_H
471 (0x1D7) CAN_AFIR4_L
472 (0x1D8) CAN_ID_H
473 (0x1D9) CAN_ID_L
474 (0x1DA) CAN_RF
475 (0x1DB) CAN_DLC
476 (0x1DC) CAN_DATA_01
477 (0x1DD) CAN_DATA_23
478 (0x1DE) CAN_DATA_45
479 (0x1DF) CAN_DATA_67


Description des registres

Le registre CAN_CTRL permet de contrôler l'interface CAN:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
RXrdy
TXrdy
réservé
réservé
RXmsq
TXmsq
RXclr
TXclr
réservé
réservé
réservé
LPB
AF4
AF3
AF2
AF1

RXrdy lu à 1 indique la présence d'au moins un message dans la file de réception. Une écriture dans ce bit ne l'affecte pas.
TXrdy lu à 1 indique la présence d'au moins un message dans la file de réception. Une écriture dans ce bit ne l'affecte pas.
RXmsq à 1 masque l'interruption de réception activée si RXrdy est à 1.
TXmsq à 1 masque l'interruption d'émission activée si TXrdy est à 1.
RXclr vide la file de réception lorsqu'il est écrit à 1. Il est toujours lu à 0.
TXclr vide la file d'émission lorsqu'il est écrit à 1. Il est toujours lu à 0.
LPB reboucle TX sur RX lorsqu'il est écrit à 1. Dans ce cas:
  • l'interface CAN est déconnecté du bus extérieur,
  • les filtres suppriment les messages non compatibles.
AF1 à 4 permettent, lorsqu'ils sont à 1, de prendre en compte les filtres d'acceptation correspondants. A l'initialisation, ces bits son mis à 0, tous les messages sont alors acceptés.

Le registre CAN_BRPR contient le générateur du quantum de temps:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
BRP15
BRP14
BRP13
BRP12
BRP11
BRP10
BRP9
BRP8
BRP7
BRP6
BRP5
BRP4
BRP3
BRP2
BRP1
BRP0

tq = (BRP+1)/25000000

Le registre CAN_BTR contient la configuration d'échantillonage de chaque bit:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
réservé
réservé
réservé
réservé
réservé
SJW1
SJW0
PRS2
PRS1
PRS0
PHS12
PHS11
PHS10
PHS22
PHS21
PHS20

tbit = (1+PRS+PHS1+PHS2)*tq

Le registre CAN_TEC contient compteur d'erreur de transmission:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
TEC7
TEC6
TEC5
TEC4
TEC3
TEC2
TEC1
TEC0

Le registre CAN_REC contient compteur d'erreur de réception:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
REC7
REC6
REC5
REC4
REC3
REC2
REC1
REC0

Les registres des filtres d'acceptation ont une taille de 32 bits répartie sur 2 mots de 16 bits:

CAN_AFMR
CAN_AFIR
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
H
ID28
ID27
ID26
ID25
ID24
ID23
ID22
ID21
ID20
ID19
ID18
SRR
RTR
IDE
ID17
ID16
ID15
L
ID14
ID13
ID12
ID11
ID10
ID9
ID8
ID7
ID6
ID5
ID4
ID3
ID2
ID1
ID0
RTR

CAN_AFMRx_H/L contient le masque des bits à prendre en compte par le filtre x. Un bit est pris en compte lorsque sa valeur est à 1.
CAN_AFIRx_H/L contient la valeur des bits à prendre en compte par le filtre x.
Pour tout filtre configuré, le contrôleur CAN compare l'identifiant du message reçu masqué par CAN_AFMRx_H/L avec CAN_AFIRx_H/L&CAN_AFMRx_H/L et accepte le message en cas d'égalité.
Pour configurer un filtre, il faut d'abord mettre à 0 le bit AFx, écrire les valeurs désirées dans les registres CAN_AFMRx_H/L e CAN_AFIRx_H/L puis mettre à 1 le bit AFx.
Pour que les messages CAN soient filtrés, il faut programmer au moins 1 des 4 filtres.

Le message reçu ou à émettre est contenu dans les registres CAN_ID_H/L, CAN_DLC, CAN_DATA_01/23/45/67.
Le contenu du registre CAN_ID_H/L est le suivant:

CAN_ID
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
H
ID28
ID27
ID26
ID25
ID24
ID23
ID22
ID21
ID20
ID19
ID18
SRR
RTR
IDE
ID17
ID16
ID15
L
ID14
ID13
ID12
ID11
ID10
ID9
ID8
ID7
ID6
ID5
ID4
ID3
ID2
ID1
ID0
RTR

Le contenu du registre CAN_RF, uniquement utilisé en mode réception, est le suivant:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
0
0
0
0
AF3
AF2
AF1
AF0

En lecture uniquement (réception), les bits AF1 à 4 sont mis à 1 lorsque le message reçu est accepté par le filtre correspondant.

Le contenu du registre CAN_DLC est le suivant:

D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
0
0
0
0
DLC3
DLC2
DLC1
DLC0

Les registres CAN_DATA_xx contiennent les données du message:

CAN_DATA
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
01
D07
D06
D05
D04
D03
D02
D01
D00
D17
D16
D15
D14
D13
D12
D11
D10
23
D27
D26
D25
D24
D23
D22
D21
D20
D37
D36
D35
D34
D33
D32
D31
D30
45
D47
D46
D45
D44
D43
D42
D41
D40
D57
D56
D55
D54
D53
D52
D51
D50
67
D67
D66
D65
D64
D63
D62
D61
D60
D77
D76
D75
D74
D73
D72
D71
D70

En lecture, un message est présent si le bit RXrdy est à 1. Le logiciel doit alors lire les registres CAN_ID_H à CAN_DATA_67 dans cet ordre, quelque soit la longueur du message (DLC). La lecture de CAN_DATA_67 retire le message reçu de la file de réception. La lecture doit être renouvelée jusqu'à ce que le bit RXrdy passe à 0 signifiant que la file de réception est vide.

En écriture, si le bit TXrdy est à 1, le logiciel peut écrire un nouveau message à transmettre dans les registres CAN_ID_H à CAN_DATA_67 dans cet ordre, quelque soit la longueur du message (DLC). L'écriture de CAN_DATA_67 insère le message à émettre dans la file d'émission. L'écriture peut être renouvelée tant que le bit TXrdy est à 1 signifiant que la file d'émission n'est pas pleine.

Initialisation

A l'initialisation, comme au RESET du coeur FORTH, CAN_CTRL est écrit avec la valeur 0x0C00 qui masque les interruptions et inhibe les filtres d'acceptation.

Le logiciel doit alors configurer le contenu des éventuels filtres utilisés si nécessaires. CAN_CTRL peut alors être écrit avec les bits AFx correspondant, vider les files de récepton et d'émission e démasquer éventuellement les interruptions si le bus CAN est géré ainsi.