Cet article décrit les échanges UART pour piloter les signaux et les opérations élémentaires du protocole In-Circuit Serial Programming™ (ICSP™) permettant de programmer un PIC24 à partir d’un ordinateur PC ou d’un terminal série.
Les différentes commandes sont classées en 4 groupes; à savoir :
- Les commandes d’administration (Tableau 3a) qui n’ont aucune interaction avec le protocole ICSP™.
- Les commandes dites dynamiques (Tableau 3b) qui sont dédiées à la sérialisation et la désérialisation de données sur la ligne PGD au rythme de l’horloge sur PGC.
- Les commandes dites ICSP™ (Tableau 3c) qui permettront de réaliser une opération globale comme l’effacement du circuit cible, la lecture de données programme ou l’écriture des 4 registres de configuration.
- Les commandes dites statiques (Tableau 3d) qui sont dédiées au pilotage individuel des 4 lignes MCLR/, PGD, SENS-PGD et PGC ; la ligne SENS-PGD ne servant qu’à fournir le sens de PGD dans un but de son éventuelle bufferisation (cf. le schéma électronique présenté à la Figure 1-2).
Tableau 3a – Liste des commandes d’administration
| FF | Lecture de la configuration du programmateur | |
| FE | Écriture de la configuration du programmateur | |
| FD | Lecture des flags et du compteur d’erreurs | |
| FC | Effacement des flags et du compteur d’erreurs et extinction de la Led rouge | |
| FB | Lecture des indicateurs de statistiques du programmateur | |
| FA | Réinitialisation des indicateurs de statistiques du programmateur | |
| F9 | Application du masque sur une donnée du circuit cible et test avec le pattern | |
| F8 | Définition du masque et du pattern de test | |
| F7..F4 | F7 | Lecture de 4 octets désérialisés du circuit cible ou à sérialiser (1er buffer) |
| F6 | Lecture de 3 octets désérialisés du circuit cible ou à sérialiser (1er buffer) | |
| F5 | Lecture de 2 octets désérialisés du circuit cible ou à sérialiser (1er buffer) | |
| F4 | Lecture d’un octet désérialisé du circuit cible ou à sérialiser (1er buffer) | |
| F3..F0 | F3 | Écriture de 4 octets à sérialiser vers le circuit cible (1er buffer) |
| F2 | Écriture de 3 octets à sérialiser vers le circuit cible (1er buffer) | |
| F1 | Écriture de 2 octets à sérialiser vers le circuit cible (1er buffer) | |
| F0 | Écriture d’un octet à sérialiser vers le circuit cible (1er buffer) | |
| EF | Lecture de 48 octets de données depuis le 2ème buffer du programmateur | |
| EE | Écriture de 1 à 48 octets de données dans le 2ème buffer du programmateur | |
| E3..E0 | E3 | Écriture de 4 octets à sérialiser vers le circuit cible (similaire à F3) |
| E2 | Écriture de 3 octets à sérialiser vers le circuit cible (similaire à F2) | |
| E1 | Écriture de 2 octets à sérialiser vers le circuit cible (similaire à F1) | |
| E0 | Écriture d’un octet à sérialiser vers le circuit cible (similaire à F0) | |
| 7F..50 | 7F | Lecture de 48 octets de données depuis le 2ème buffer du programmateur |
| 7E | Lecture de 47 octets de données depuis le 2ème buffer du programmateur | |
| … | ||
| 50 | Lecture de 2 octets de données depuis le 2ème buffer du programmateur | |
| 51 | Lecture d’un octet de données depuis le 2ème buffer du programmateur | |