# CAN

# Protocole CAN — Commandes d'aiguillages

**Statut : expérimental / aide-mémoire**

## Paramètres CAN

<table id="bkmrk-param%C3%A8tre-valeur-vit"><thead><tr><th>Paramètre</th><th>Valeur</th></tr></thead><tbody><tr><td>Vitesse</td><td>125 kbit/s</td></tr><tr><td>Format d'identifiant</td><td>CAN standard 11 bits</td></tr><tr><td>CAN ID utilisé</td><td>`0x100` (valeur pour l'instant arbitraire)</td></tr><tr><td>DLC</td><td>`1` octet</td></tr><tr><td>Octet de commande</td><td>`DATA[0]`</td></tr></tbody></table>

## Trame de commande

La trame utilise actuellement uniquement le premier octet de données :

<table id="bkmrk-can-id-dlc-data%5B0%5D-d"><thead><tr><th>CAN ID</th><th>DLC</th><th>DATA\[0\]</th><th>DATA\[1..7\]</th></tr></thead><tbody><tr><td>`0x100`</td><td>`1`</td><td>Commande + n° aiguille</td><td>Non utilisés</td></tr></tbody></table>

### Format de `DATA[0]`

<table id="bkmrk-bit-7-6-5-4-3-2-1-0-"><thead><tr><th>Bit</th><th>7</th><th>6</th><th>5</th><th>4</th><th>3</th><th>2</th><th>1</th><th>0</th></tr></thead><tbody><tr><td>Fonction</td><td>Commande</td><td>Commande</td><td>N° aiguille</td><td>N° aiguille</td><td>N° aiguille</td><td>N° aiguille</td><td>N° aiguille</td><td>N° aiguille</td></tr></tbody></table>

- **Bits 0 à 5** : numéro de l'aiguille (`0` à `63`)
- **Bits 6 et 7** : commande

<table id="bkmrk-bits-7..6-valeur-com"><thead><tr><th>Bits 7..6</th><th>Valeur</th><th>Commande</th></tr></thead><tbody><tr><td>`11`</td><td>`0xC0`</td><td>**Basculer** l'aiguille</td></tr><tr><td>`10`</td><td>`0x80`</td><td>Position **déviée**</td></tr><tr><td>`01`</td><td>`0x40`</td><td>Position **droite**</td></tr><tr><td>`00`</td><td>`0x00`</td><td>Réservé</td></tr></tbody></table>

## Exemples

Pour commander le **basculement** de l'aiguille n°1 :

```text
CAN ID : 0x100
DLC    : 1
DATA   : C1
```

Pour l'aiguille n°2 :

```text
CAN ID : 0x100
DLC    : 1
DATA   : C2
```

Pour l'aiguille n°3 :

```text
CAN ID : 0x100
DLC    : 1
DATA   : C3
```

Le calcul est :

```text
DATA[0] = 0xC0 | numéro_aiguille
```

Les valeurs `0x00` à `0x3F` sont donc réservées aux commandes futures utilisant `00` dans les bits 7..6.

## Exemple `candump`

```text
can0  100   [1]  C1
can0  100   [1]  C2
can0  100   [1]  C3
```

Ce qui correspond respectivement au basculement des aiguilles **1, 2 et 3**.