Accueil > µC PIC > Test d’un clone du programmateur PICKIT2

Test d’un clone du programmateur PICKIT2

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

Programmateur PICKIT2 sur port USB

Programmateur PICKIT2 sur port USB

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.

Intérieur du programmateur PICKit2

Intérieur du programmateur PICKit2

Author: Olivier Categories: µC PIC Tags: ,
  1. ahamedBacar
    30/07/2011 à 06:30 | #1

    Salut
    Quel commande t’as lancé sur le terminal pour regarder le message du noyau après connexion du hardware à l’ordinateur ?
    Cordialement.

  2. 31/07/2011 à 10:07 | #2

    La commande est: dmseg
    Elle permet de voir les messages du noyau Linux…

  3. 16/08/2012 à 20:59 | #3

    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 !

  1. 21/12/2009 à 20:46 | #1
  2. 11/02/2013 à 22:14 | #2