La programmation d'un CV nécessite une séquence simple mais bien précise. En partant du principe que vous utilisez un WRITE BYTE (et pas un WRITE BIT), vous devez générer la séquence suivante de paquets :
A / Entrée en mode SERVICE MODE :
3 paquets RESET consécutifs
B / Envois de la commande d'écriture
5 paquets contenant la commande WRITE BYTE requise
C / Finalisation de l'écriture et attente ACK
5 à 6 paquets RESET
Les paquets envoyés pour le mode SERVICE doivent contenir un préambule d'au moins 20 bits et non 14 comme les paquets du mode OPERATION.
Par ailleurs il faut bien entendu interdire l'insertion de paquets IDLE au milieu du flux.
Si vous envoyez votre commande d'écriture sans respecter la phase RESET préalable, le décodeur ne doit pas se mettre en mode service et ne doit pas accepter l'écriture.
Le format de la commande DIRECT WRITE BYTE respecte la syntaxe MODE SERVICE des paquets DCC.
Premier octet :
> code commande sur 4 bits de poids fort = b0111 = CV ACCESS
> code opération sur 2 bits = b11 = DIRECT WRITE BYTE
> deux bits de poids le plus fort du numéro de CV = bAA avec AA = les bits 9 et 8 du numéro de CV
Second octet :
> 8 bits de poids faible du numéro de CV (bits 7 à 0)
Troisième octet :
> 8 bits de la valeur à écrire dans le CV
Ces trois octets constituent la PAYLOAD du paquet, il faut donc y ajouter la checksum de contrôle en quatrième octet.
Les commandes SERVICE MODE n'embarquent pas d'adresse, ce qui est normal si l'on considère que l'on ne connait pas encore l'adresse d'une LOCO qu'on veut programmer. C'est pour cette raison que, en dehors du cas particulier du "Program On Main", l'écriture de CV se fait nécessairement sur une voie isolée : tout équipement posé sur la voie de programmation traite les commandes.
Se pose alors la question de distinguer les commandes OPERATION (speed control & co) des commandes SERVICE.
La distinction est faite par l'entrée en mode SERVICE induite par l'émission des commandes RESET.