Table of Contents
WIOCAN
Configuration
Protocole RCAN
WIOcan, (WIO-02 WIO-PROG2 WIO-PicoW-CAN), utilisent des trames CAN étendues, alimenté par le protocole Rocrail RCAN.
La vitesse de transmission utilisée est de 125k, qui est assez rapide pour autoriser de longs fils.
En utilisant l'ensemble des 29 bits d'identification, cela autorise les instructions entre zéro et huit octets de données.
Ce protocole peut être utilisé en parallèle avec d'autres protocoles utilisant des trames standard et la même vitesse de transmission.
Certaines interfaces CAN ne peuvent pas être utilisées pour des trames étendues parce que l'identifiant sera mutilé. Utilisez un autre Type d'interface disponible.
Le chemin recommandé pour sérialiser les trames CAN via USB et TCP est Trames CAN ASCII.
Trame étendue
Trame CAN étendue | |||||||
EID | Cnt | Donnée[Cnt] | |||||
---|---|---|---|---|---|---|---|
PRIO | TYPE | SID | IC | RID | DLC | DATA | CAN usage |
3 | 2 | 8 | 8 | 8 | 4 | (0…8) x 8 | Nr of bits |
Identifiant 29bit étendu: <PRIO 3bit> <TYPE 2bit> <SID 8bit> <IC 8bit> <RID 8bit> Masque: <0x1C000000><0x03000000><0x00FF0000><0x0000FF00><0x000000FF>
Utilisation CAN | Description | Plage | Remarque |
---|---|---|---|
PRIO | Priorité d'identifiant | 0…7 | |
TYPE | Type d'instruction | 0…3 | cmd, evt, rsp, inf |
SID | Identifiant de l'expéditeur | 1…255 | 1=Rocrail |
IC | Code d'instruction | 0x00…0xFF | Group 0xFn + Opcode 0xnF |
RID | Identifiant de récepteur (Identifiant du nœud) | 0…255 | 0=broadcast |
DLC | Nombre d'octets de données suivants | 0…8 | |
DATA | 8 octets de données | (0…8) x 0…255 |
Diffusion
Une exception sur cet en-tête est la diffusion:
Le PRIO et le SID sont utilisés comme compteur décroissant 11 bits. Cela autorise des tailles du fichier d'un maximum de 16kB.
La fin de la diffusion se déclenche si le décompte atteint zéro.
Le premier paquet de données contient le nom du fichier avec une longueur maximale de 8 caractères incluant l'extension.
0 Système
CBUS Bootloader
Le Groupe GRP_SYS et commande zéro, Instruction Code 0x00, ne sont pas utilisé pour éviter les conflits EID CBUS bootloader.
Cela peut arriver dans le cas ou le SID est 8 et le RID est 4 ou 5.
:X00080004N -> Bootloader command :X00080005N -> Bootloader data
0.1 État
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | SYS_STATE | x | 0 |
Réponse/Évènement
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_RSP/TYPE_EVT | x | SYS_STATE | 1 | 1 | State bits |
0.2 SoD
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | SYS_SOD | 0 | 0 |
Réponse
Ces paquets sont les même que les événements spontanés.
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_SENSOR | TYPE_EVT | x | INF_PORT | 0 | 6 | Port# | Type | Valeur | Aspect H | Aspect M | Aspect L | ||
PRIO_INFO | TYPE_EVT | x | INF_IO | 0 | 1..8 | Port 0-7 | Port 8-15 | Port16-23 | Port 24-31 | Port 32-39 | Port 40-47 | Port 48-55 | Port 56-63 |
0.3 Horloge
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_INFO | TYPE_CMD | 1 | SYS_CLOCK | 0 | 8 | Heure | Minute | Luminosité | Mois | Jour du mois | Temp.H | Temp.L | Diviseur |
0.4 EBreak
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | SYS_EBREAK | 0 | 0 |
0.5 Alimentation
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | SYS_POWER | 0 | 1 | On=1 Off=0 |
0.6 Arrêt
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | SYS_SHUTDOWN | x/0 | 1 | x or all=0 |
0.7 Redémarrage
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | SYS_REBOOT | x | 0 |
1 Configuration
1.0 Requête
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_QUERY | x | 0 |
Réponse
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_RSP | x | CNF_QUERY | 1 | 8 | Identifiant Manuel | Identifiant Produit | Type de carte | Options 1 | Options 2 | Options 3 | Version Haute | Version Basse |
1.1 Obtention
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_GET | x | 1 | CNF_OPTIONS | |||||||
PRIO_CONFIG | TYPE_CMD | 1 | CNF_GET | x | 1 | CNF_PORTGROUP_n |
Réponse
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_RSP | x | CNF_GET | 1 | 7 | CNF_OPTIONS | Options 1 | Options2 | Options3 | Longueur d'impulsion | CAN-ID | Sous-type | |
PRIO_CONFIG | TYPE_RSP | x | CNF_GET | 1 | 5 | CNF_PORTGROUP_n | nib0 + nib1 | nib2 + nib3 | nib4 + nib5 | nib6 + nib7 |
Un demi-octet représente un type de port, 0…15.
1.2 Réglage
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_SET | x | 7 | CNF_OPTIONS | Options 1 | Options 2 | Options 3 | Longueur d'impulsion | CAN-ID | Sous-type | |
PRIO_CONFIG | TYPE_CMD | 1 | CNF_SET | x | 5 | CNF_PORTGROUP_n | nib0 + nib1 | nib2 + nib3 | nib4 + nib5 | nib6 + nib7 |
1.3 Nom
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_NAME | x | 8 | Nommer les caractères; Les octets de données inutilisés doivent être mis à zéro. |
1.4 ID
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_ID | x | 2 | New ID | Type de carte |
1.5 Identification
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_IDENTIFY | x | 0 |
Le RID doit faire clignoter rapidement la LED intégrée jusqu'à ce qu'elle reçoive une autre commande d'identification.
1.6 Obtenir l'option
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONGET | x | 1 | Option# |
Le numéro d’option zéro demande tous les octets d’option.
1.7 Régler l'option
Numéro d'option zéro: (valeurs 8 bits)
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONSET | x | 8 | Option# | Options1 | Options2 | Options3 | Options4 | Options5 | Options6 | Options7 |
Numéro d'option supérieur à zéro: (valeur 16 bits)
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONSET | x | 3 | Option# | Options H | Options L |
2 Programmation
2.0 Obtenir le CV
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | PRG_GETCV | x | 6 | Adresse H | Adresse L | CV H | CV L | Valeur | Options |
2.1 Régler le CV
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | PRG_SETCV | x | 6 | Adresse H | Adresse L | CV H | CV L | Valeur | Options |
2.2 Voie de Programmation
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | 1 | PRG_PT | x | 1 | On/Off |
3 Diffusion en continu
3.0 Début du texte
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_LOW | TYPE_CMD | 1 | STR_TEXT_START | x | 4 | Afficheur# | décompte | longueur du texte | Type |
3.1 Paquet texte
Les champs Prio et SID sont utilisés comme index de paquet.
prio = (décompte & 0x700) » 8;
sid = décompte & 0xFF;
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
prio | TYPE_CMD | sid | STR_TEXT | x | 8 | text[] | text[] | text[] | text[] | text[] | text[] | text[] | text[] |
3.2 non utilisé
3.3 Paquet du fichier
Les champs Prio et SID sont utilisés comme index de paquet.
prio = (décompte & 0x700) » 8;
sid = décompte & 0xFF;
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
prio | TYPE_CMD | sid | STR_FILE | x | 8 | text[] | text[] | text[] | text[] | text[] | text[] | text[] | text[] |
3.4 Jouer
Le nom du fichier a un nombre de caractères maximum de 8.
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_LOW | TYPE_CMD | sid | STR_PLAY | x | 8 | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] |
3.5 Liste des fichiers
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_CONFIG | TYPE_CMD | sid | STR_LIST | x | 0 |
Le récepteur répondra avec STR_TEXT_START et n * STR_TEXT.
4 Port
4.0 Port
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | PRT_GET | x | 3…4 | Port# | Type | Valeur | Options |
Réponse
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_SENSOR | TYPE_EVT | x | INF_PORT | 0 | 3..6 | Port# | Type | Valeur | Aspect H | Aspect M | Aspect L |
4.1 Signal
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | PRT_SIGNAL | x | 7 | Port# | Aspects | Aspect | Valeur H | Valeur L | Luminosité | Délai d'atténuation |
4.2 Multiplex
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | PRT_MULTIPLEX | x | 7 | Port# | Aspects | Aspect | Valeur H | Valeur L | Luminosité | Délai d'atténuation |
Voir Charlieplexing
4.3 Paire PWM
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | PRT_PWMPAIR | x | 8 | PWM Port# | Options | Direction + F 0x80 | Velocité | Masse | Mission Min. | Mission Max. | Kickstart |
Voir H-Bridge pour plus d'information.
5 DCC
5.0 Dir-Velocité
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | DCC_DIRV | x | 5 | Adresse H | Adresse L | Velocité + direction 0x80 | Fn | Pas |
5.1 Fonction
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | DCC_FUN | x | 6 | Adresse H | Adresse L | F modifié | Valeur | Groupe | Fx |
5.3 Accessoire
Prio | Type | SID | Commande | RID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PRIO_HIGH | TYPE_CMD | 1 | DCC_ACC | x | 6 | Adresse H | Adresse L | Port | Porte | Valeur | Retard |
C-Header
// Priority #define PRIO_SENSOR 0x00 #define PRIO_HIGH 0x01 #define PRIO_MEDIUM 0x02 #define PRIO_CONFIG 0x03 #define PRIO_LOW 0x05 #define PRIO_INFO 0x07 // Types #define TYPE_CMD 0x00 #define TYPE_EVT 0x01 #define TYPE_RSP 0x02 #define TYPE_ACK 0x03 /* IC = GRP | OPC GRP = (IC & 0xF0) OPC = (IC & 0x0F) */ #define GRP_SYS 0x00 // System #define SYS_NOTUSED 0x00 // See "Bootloader" #define SYS_STATE 0x01 #define SYS_SOD 0x02 #define SYS_CLOCK 0x03 #define SYS_EBREAK 0x04 #define SYS_POWER 0x05 #define SYS_SHUTDOWN 0x06 #define SYS_REBOOT 0x07 #define SYS_LINK 0x08 #define SYS_UNLINK 0x09 #define GRP_CNF 0x10 // Configuration #define CNF_QUERY 0x10 #define CNF_GET 0x11 #define CNF_SET 0x12 #define CNF_NAME 0x13 #define CNF_ID 0x14 #define CNF_IDENTIFY 0x15 #define CNF_REBOOT 0x1F #define GRP_PRG 0x20 // Programming #define PRG_GETCV 0x20 #define PRG_SETCV 0x21 #define PRG_PT 0x22 #define GRP_STR 0x30 // Streaming #define STR_TEXT_START 0x30 // datat[0] = display number #define STR_TEXT 0x31 #define STR_FILE 0x33 #define STR_PLAY 0x34 // data = filename #define STR_LIST 0x35 // SPIFFS directory listing #define GRP_PRT 0x40 // Port I/O #define PRT_PORT 0x40 #define PRT_SIGNAL 0x41 #define PRT_MULTIPLEX 0x42 #define PRT_PWMPAIR 0x43 #define GRP_DCC 0x50 // DCC Command Station #define DCC_DIRV 0x50 #define DCC_FUN 0x51 #define DCC_BINSTATE 0x52 #define DCC_ACC 0x53 #define DCC_BIND 0x54 #define GRP_INF 0x60 // Unsolicited events like Sensors, RailCom, RFID scanner, ... #define INF_PORT 0x60 #define INF_RFID 0x61 #define INF_BIDI 0x62 #define INF_ENV 0x63 // temperature, humidity, pressure, light #define INF_IO 0x64 // Max. 64 I/O status which is mostly used for SoD. #define INF_GOODBYE 0x65 // type for streaming text #define TEXT_TYPE_TEXT 0 #define TEXT_TYPE_SSID 1 #define TEXT_TYPE_FILE 2 #define TEXT_TYPE_FILE_DEL 3 #define TEXT_TYPE_FILE_DOWNLOAD 4 #define TEXT_TYPE_BIN 5 // Config indexes #define WIO_CNF_OPTIONS 0 #define WIO_CNF_PORTGROUP_0 1 #define WIO_CNF_PORTGROUP_1 2 #define WIO_CNF_PORTGROUP_2 3 #define WIO_CNF_PORTGROUP_3 4 #define WIO_CNF_REBOOT 0xFF // Prio values #define PRIO_SENSOR 0x00 #define PRIO_HIGH 0x01 #define PRIO_CONFIG 0x03 #define PRIO_LOW 0x05 #define PRIO_INFO 0x07 // Instruction types #define TYPE_CMD 0x00 #define TYPE_EVT 0x01 #define TYPE_RSP 0x02 #define TYPE_ACK 0x03 // EID masks #define MASK_PRIO 0x1C000000 // >> 26 #define MASK_MODE 0x03000000 // >> 24 #define MASK_SID 0x00FF0000 // >> 16 #define MASK_IC 0x0000FF00 // >> 8 #define MASK_RID 0x000000FF // >> 0 #define SHIFT_PRIO 26 #define SHIFT_MODE 24 #define SHIFT_SID 16 #define SHIFT_IC 8 #define SHIFT_RID 0 // State bits #define SYS_STATE_POWER 0x01 #define SYS_STATE_SC 0x02 #define SYS_STATE_PT 0x04 #define SYS_STATE_SLAVE 0x08 // Port types #define PORTTYPE_DOUT 0 #define PORTTYPE_AOUT 1 #define PORTTYPE_SERVO 2 #define PORTTYPE_PAIR 3 #define PORTTYPE_MOTOR 4 #define PORTTYPE_DIN 5 #define PORTTYPE_ACC 6 #define PORTTYPE_LED 7 #define PORTTYPE_MULTIPLEX 10 #define PORT_STATE_STRAIGHT 0 #define PORT_STATE_TURNOUT 1 // Config indexes #define CNF_IDX_OPTIONS 0 #define CNF_IDX_PORTGROUP_0 1 // 0... 7 #define CNF_IDX_PORTGROUP_1 2 // 8...15 #define CNF_IDX_PORTGROUP_2 3 // 16...23 #define CNF_IDX_PORTGROUP_3 4 // 24...31