Étape 2: Firmware
Le firmware utilise la classe CDC USB pour émuler un port série. L’appareil sera affiché comme un port com virtuel sur un PC. Le firmware est divisé en trois sections :1. le pilote USB prend soin d’énumérer l’appareil sur un PC et d’émuler un port COM.
2. une routine de service alternativement lit les valeurs de température et les convertit en un format lisible. Faire les deux de ces opérations à la fois causé la clé USB pour connexion lâche le PC (monopolisant de temps). Conversion de la virgule flottante valorise une chaîne dans le cycle de service consécutive à la conversion éclaircie la connectivité problem.*
3. Enfin, une routine principale reçoit les octets envoyés par le PC et retourne les mesures demandées. Plusieurs mesures sont séparées par une virgule, les lignes sont terminent par un caractère null (0 x 00 hexadécimal)
Le firmware de démonstration accepte les commandes de suivre :
Retourne la valeur hexadécimale
température à l’intérieur de 0 x 00 (capteur embarqué)
température extérieure: 0 x 01 (en-tête externe)
0 x 02 deux températures (séparés par des virgules)
Température est calculée selon la référence de 2,5 volts et la micropuce TC1047A offset et la pente. Autres capteurs de température peuvent avoir des caractéristiques différentes. La feuille de données TC1047A est disponible ici :
http://WW1.Microchip.com/downloads/en/DeviceDoc/21498c.pdf
Le firmware est écrit dans MPLAB avec le compilateur C18 PIC de démonstration.
Le firmware USB réels est fourni par Microchip. L’environnement d’origine est disponible ici :
http://www.Microchip.com/Stellent/idcplg?IdcService=SS_GET_PAGE&NodeId=1824&appnote=en021631
Pour modifier le firmware : extraire la structure de répertoire entier de la source dans votre répertoire racine (c:\MCHPFSUSB). Vous pouvez ensuite charger le fichier d’espace de travail dans MPLAB.
* Le flotteur à la routine de la chaîne est un Dévoreur de ressources. Pour contourner le problème de connectivité USB routine de service est appelée à divers moments durant la routine float2string. Cela serait mieux fixe en servant l’USB périphérique sur une interruption. J’ai utilisé le hack pour que le firmware est resté aussi près que possible, la version de référence.