Après trois semaines d’attente, je viens de recevoir un clone chinois du programmateur de MicroChip PICKIT2 commandé sur e-Bay. Je vous délivre mes impressions dans cet article ainsi que les premiers tests.
Le kit se compose:
- du programmateur en lui-même dans un boîtier plastique noir style porte-clé avec 3 dels en face avant, un bouton poussoir, un connecteur mini USB pour la liaison au PC et un connecteur SIL pour connection vers votre maquette
- d’un câble de liaison USB
- d’un câble adaptateur SIL femelle vers SIL femelle
- d’un câble adaptateur SIL femelle vers un connecteur RJ12
- d’un changeur de genre mâle-mâle, en fait un bout de barrette sécable
Au moment du déballage du programmateur, je travaille sous GNU/Linux Debian. Je commence donc brutalement par connecter ce programmateur à un port USB et je regarde les messages du noyau:
1 2 3 4 5 6 7 |
usb 2-1: new full speed USB device using uhci_hcd and address 3 usb 2-1: configuration #1 chosen from 2 choices usb 2-1: New USB device found, idVendor=04d8, idProduct=0033 usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 2-1: Product: PICkit 2 Microcontroller Programmer usb 2-1: Manufacturer: Microchip Technology Inc. usb 2-1: SerialNumber: PIC18F2550 |
Vous voyez très bien que ce programmateur a été immédiatement reconnu en tant que « PICkit 2 Microcontroller Programmer ». Visiblement ce programmateur est équipé d’un PIC18F2550 (PIC avec support USB 2.0 natif). C’est bien parti…
Je décide donc de regarder s’il existe quelque chose pour ce programmateur qui fonctionne nativement sous Linux. Après quelques minutes de recherche, je me rends sur la page officielle du PICKIT2 sur le site de Microchip. Je découvre alors avec grand plaisir que MicroChip propose un logiciel (sources et exécutable) pour programmer les PICs avec ce kit. Je télécharge alors la version compilée pour noyau 2.6, la désarchive, lance un terminal en mode super utilisateur puis teste l’exécutable sans paramètre. J’obtiens la sortie suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd PICkit 2 COMMAND LINE HELP Options Description Default ---------------------------------------------------------------------------- A Set Vdd voltage Device Specific B Specify the path to PK2DeviceFile.dat Searches PATH and calling dir C Blank Check Device No Blank Check D OS Download None E Erase Flash Device Do Not Erase F Hex File Selection None G Read functions None Type F: = read into hex file, path = full file path, range is not used Types P,E,I,C: = ouput read of Program, EEPROM, ID and/or Configuration Memory to the screen. P and E must be followed by an address range in the form of x-y where x is the start address and y is the end address both in hex, path is not used (Serial EEPROM memory is 'P') H Delay before Exit Exit immediately K = Wait on keypress before exit 1 to 9 = Wait seconds before exit I Display Device ID & silicon revision Do Not Display J Display operation percent complete Rotating slash N = Each update on newline K Display Hex File Checksum Do Not Display L Set programming speed Fastest is a value of 1-16, with 1 being the fastest. M Program Device Do Not Program memory regions: P = Program memory E = EEPROM I = ID memory C = Configuration memory If no region is entered, the entire device will be erased & programmed. If a region is entered, no erase is performed and only the given region is programmed. All programmed regions are verified. (serial EEPROM memory is 'P') N Assign Unit ID string to first found None PICkit 2 unit. String is limited to 14 characters maximum. May not be used with other options. Example: -NLab1B P Part Selection. Example: -PPIC16f887 (Required) P Auto-Detect in all detectable families PF List auto-detectable part families PF Auto-Detect only within the given part family, using the ID listed with -PF Example: -PF2 Q Disable PE for PIC24/dsPIC33 devices Use PE R Release /MCLR after operations Assert /MCLR S Use the PICkit 2 with the given Unit ID First found unit string. Useful when multiple PICkit 2 units are connected. Example: -SLab1B If no is entered, then the Unit IDs of all connected units will be displayed. In this case, all other options are ignored. -S# will list units with their firmware versions. See help -s? for more info. T Power Target after operations Vdd off U Program OSCCAL memory, where: Do Not Program is a hexadecimal number representing the OSCCAL value to be programmed. This may only be used in conjunction with a programming operation. V Vpp override Device Specific W Externally power target Power from Pk2 X Use VPP first Program Entry Method VDD first Y Verify Device Do Not Verify P = Program memory E = EEPROM I = ID memory C = Configuration memory If no region is entered, the entire device will be verified. (Serial EEPROM memory is 'P') Z Preserve EEData on Program Do Not Preserve ? Help Screen Not Shown Each option must be immediately preceeded by a switch, Which can be either a dash <-> or a slash and options must be separated by a single space. Example: PK2CMD /PPIC16F887 /Fc:\mycode /M or PK2CMD -PPIC16F887 -Fc:\mycode -M Any option immediately followed by a question mark will invoke a more detailed description of how to use that option. Commands and their parameters are not case sensitive. Commands will be processed according to command order of precedence, not the order in which they appear on the command line. Precedence: -? (first) -B -S -D -N -P -A -F -J -L -Q -V -W -X -Z -C -U -E -M -Y -G -I -K -R -T -H (last) The program will return an exit code upon completion which will indicate either successful completion, or describe the reason for failure. To view the list of exit codes and their descriptions, type -?E on the command line. type -?V on the command line for version information. type -?L on the command line for license information. type -?P on the command line for a listing of supported devices. type -?P to search for and display a list of supported devices beginning with . Special thanks to the following individuals for their critical contributions to the development of this software: Jeff Post, Xiaofan Chen, and Shigenobu Kimura Operation Succeeded |
Parfait…pas de problème de librairie et en prime vous avez toute la syntaxe de la ligne de commande ! Continuons un peu en voyant si le programmateur est bien détecté avec la ligne de commande suivante:
1 2 3 4 5 6 7 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd /?V Executable Version: 1.20.00 Device File Version: 1.55.00 OS Firmware Version: 2.20.00 Operation Succeeded |
De mieux en mieux…le programmateur est trouvé ! La version du firmware de ce programmateur est 2.20.00. Or dans le répertoire issu de l’archive du logiciel, vous trouvez un firmware en version 2.32.00. Puisque nous sommes bien parti, continuons et soyons fou…mise à jour du firmware du programmateur avec la commande suivante:
1 2 3 4 5 6 7 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd /DPK2V023200.hex PICkit 2 found with Operating System v2.20.00 Use -D to download minimum required OS v2.32.00 or later Downloading OS... Verifying new OS... Resetting PICkit 2... OS Update Successful. |
Alors là je suis bluffé…cinq minutes que j’ai ce programmateur et tout se passe à merveille…et en plus sous Linux. Vérifions tout de même que la mise à jour à fonctionnée:
1 2 3 4 5 6 7 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd /?V Executable Version: 1.20.00 Device File Version: 1.55.00 OS Firmware Version: 2.32.00 Operation Succeeded |
Trés bien, rien à dire…Je pense que le PIC18F2550 du programmateur doit avoir un bootloader USB embarqué ce qui permet de faire une mise à jour du firmware. Je peux me tromper vu que je n’ai pas vérifié.
Passons maintenant à un test réel de programmation d’un PIC16F876 sur une carte de TP utilisé à mon travail. La carte de TP étant équipé d’un connecteur RJ12, j’utilise un des câble fourni dans le kit pour me connecter. Je vérifie au passage que les signaux VPP/MCLR (broche 1), VDD target (br 2), VSS (masse) (br 3), PGD (br 4), PGC (br 5) et Auxiliaire (br 6) du programmateur sont compatibles avec notre brochage du RJ12. Allez, je câble et je teste si le PIC est détecté avec la commande suivante:
1 2 3 4 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd -P Auto-Detect: Found part PIC16F876. Operation Succeeded |
Effectivement j’ai bien un PIC16F876 sur ma carte de test. Je remplace celui-ci par un PIC18F2520 et je relance la commande:
1 2 3 4 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd -P Auto-Detect: Found part PIC18F2520. Operation Succeeded |
Toujours très bien. Le PIC18F2520 est bien reconnu. Je vais donc pouvoir passer à la programmation d’un fichier HEX. Celui-ci a été produit avec le compilateur de CCS sous Microsoft Windows. Pour programmer le PIC16F876 je tape la commande suivante:
1 2 3 4 5 6 7 8 9 10 |
leonard:/home/olivier/Desktop/pk2cmdv1-20Linux2-6# ./pk2cmd -P -R -M -F Recopie_inter_dels.HEX Auto-Detect: Found part PIC16F876. PICkit 2 Program Report 17-5-2009, 12:25:19 Device Type: PIC16F876 Program Succeeded. Operation Succeeded |
La programmation se passe correctement. Une petite explication des paramètres est tout de même nécessaire:
- -P : lance une recherche automatique du PIC à programmer. Il est peut être plus judicieux de donner le type de PIC à programmer directement (Ex: -PPIC16F876)
- -R : permet d’informer le programmateur que la ligne MCLR sur le PIC est mise à l’état haut par une résistance de tirage vers le haut. Voir dans la doc le passage sur les paramètres -R et -T
- -M : efface toutes les données du PIC (flash, eeprom, fusibles), programme toutes les données du PIC puis effectue une vérification
- -F : mettre aprés ce paramètre le nom du fichier HEX à programmer
Ce programmateur est donc tout à fait en mesure d’être utilisé sous GNU/Linux pour réaliser la programmation des µC PIC de chez Microchip. Un regret cependant, les outils disponibles sous Microsoft Windows n’ont pas été portés sous GNU/Linux : un mini analyseur logique 3 voies et un convertisseur USB-Série. Enfin vu le prix de l’ensemble (17euros frais de port compris) ca vaut tout de même le coup !
Problème de tension de programmation VPP
Dans la description ci-dessus, j’ai omis (volontairement) de signaler un problème qui est apparu lors de la détection automatique du PIC. En effet, le programmateur m’informait systématiquement que la tension de programmation VPP était incorrecte. Je suis donc passé sous Microsoft Windows et installé le logiciel de programmation pour le PIC Kit2. Dans ce logiciel, un utilitaire de diagnostique permet de détecter les problèmes courants (alimentation Vcc de la carte incorrecte, tension de programmation Vpp trop basse, test de la ligne MCLR, test des lignes PGC et PGD). Or lors de ces tests, la tension VPP ne montait pas à 12V minimum comme prévu. En fait cette tension s’écroulait trés rapidement et la programmation ne pouvait s’effectuer correctement. En observant à l’oscilloscope les signaux issu du convertisseur Boost qui génére le 12V à partir du 5V de l’USB et du schéma du PICKit2 fourni par MicroChip, j’en ai dédui que la bobine avait une valeur trop faible (MicroChip recommande une 680µH, or c’est une 470µH sur le kit). Dans la photographie ci-dessous, la bobine entourée en rouge est celle que j’ai remplacé, cependant dans mon PICKIT2 cette même bobine n’était pas celle ci-dessous mais une beaucoup plus petite donc supportant un courant plus faible. Je ne disposais pas de bobine CMS pour faire un test, j’ai donc utilisé une bobine classique de 1mH en remplacement de la 470µH. A partir de ce moment là tout a fonctionné correctement. Cependant en observant la tension VPP à l’oscillo celle-ci décroit aprés 2s de programmation. Donc il risque d’y avoir des problèmes lors de la programmation de « gros » programmes. Je n’en ai pas parlé dans l’article car il se peut que ce soit mon programmateur qui soit défectueux. Pour comparer j’ai commandé à mon travail un « vrai » programmateur PICKit2, je pourrai alors comparer les signaux et la qualité des composants.
Ping : Electronique Innovante » Robot hexapode - Robot “Fourmi”
Salut
Quel commande t’as lancé sur le terminal pour regarder le message du noyau après connexion du hardware à l’ordinateur ?
Cordialement.
La commande est: dmseg
Elle permet de voir les messages du noyau Linux…
Bonsoir,
Je programme actuellement pour un PIC18F46K22. Est-ce que ce programmateur est compatible avec ce PIC ?
J’ai un peu peur car selon cette liste sur leur site officiel : http://www.sureelectronics.net/pdfs/Device%20Support.htm
ça semble mal parti 🙁
Merci pour votre site qui est une mine d’or, notamment les programmes de tests en C !
Ping : [Tuto] Programmer un PIC18F46K22 avec un clône PicKit 2 | Scrat iPhone