Programmation PIC via FPGA

9

Je voudrais savoir s'il existe un moyen de programmer un PIC pour la première fois (écrire en Flash) via une carte FPGA.

Le PIC est déjà soudé au FPGA et je ne peux pas le retirer. Aucun chargeur de démarrage n'existe sur le PIC. J'ai donc besoin de le programmer en mode USART / SPI / I2C avec un bootloader pour qu'il puisse recevoir des données du FPGA.

Je sais que normalement je dois le dessouder, le connecter à un programmeur matériel comme PICKit et le programmer avec un logiciel sur l'ordinateur comme MPLAB, mais je ne peux pas me le permettre.

Je peux générer le chargeur de démarrage avec MPLAB, qui est un fichier .hex, mais comment puis-je le transférer sur le FPGA puis sur le PIC via les broches FPGA?

Le PIC utilisé est le Microchip PIC12F1822.

Myst
la source
2
Juste une vérification: pouvez-vous reprogrammer le FPGA (c'est-à-dire que vous avez tous les outils nécessaires pour le faire)?
pjc50
C'est une sorte de carte de développement?
Matt Young
Oui, j'ai tous les outils nécessaires pour reprogrammer le FPGA (il est connecté à l'ordinateur via USB standard).
Myst
1
Non, ils ont été blâmés parce qu'ils n'ont pas fait cet effort. En fait, je suis en stage et j'ai trouvé cela très peu professionnel. Bien que je doive encore résoudre le problème. Je ne vois vraiment pas de moyen de reprogrammer ce PIC avec d'autres moyens qu'un programmeur externe que je ne peux pas utiliser car le package est déjà fait.
Myst
2
N'y a-t-il aucun moyen de souder des fils de pontage sur des traces ou des broches sur le PIC pour que vous puissiez le programmer via un programmeur externe? Essayer de le faire via le FPGA ressemble à un projet de thèse de troisième cycle.
horta

Réponses:

10

Non, vous n'avez pas besoin, en fait vous ne pouvez pas, utiliser SPI, UART ou I 2 C pour programmer le PIC. La seule façon d'obtenir un nouveau programme dans un PIC qui n'a pas de code spécial chargé à cet effet (un chargeur de démarrage) est d'utiliser l'interface de programmation matérielle externe. Électriquement, cela signifie la connexion à Vss, MCLR, PGC et PGD. Il peut être utile que le programmateur soit également connecté à Vdd, mais pas nécessaire pour cette puce tant que le niveau Vdd est connu et que le programmeur est ajusté en conséquence.

L'interface matérielle de bas niveau est assez simple. PGD ​​est la ligne de données, qui est échantillonnée par le PIC sur le front descendant de PGC (la ligne d'horloge). Pour mettre le PIC en mode de programmation en premier lieu, une clé spéciale de 32 bits est synchronisée par rapport à des bords spécifiques sur le MCLR (bien que voir la note ci-dessous concernant la programmation haute tension).

Le protocole de niveau supérieur devient plus compliqué. La plupart des choses se font avec des commandes 6 bits, dont certaines sont suivies de mots de données 14 bits. Vous devez lire attentivement les spécifications de programmation. Notez que la spécification de programmation est un document distinct de la fiche technique. Accédez à la page du produit pour votre PIC particulier sur le site Web de Microchip, et vous trouverez un lien vers les spécifications de programmation dans la section des documents.

Ajouté sur la programmation haute tension

Ces types de PIC ont deux façons d'entrer en mode de programmation: haute tension (HVP) et basse tension (LVP). La méthode haute tension nécessite d'élever le MCLR entre 8 et 9 volts et de le maintenir pendant la programmation. Cette méthode fonctionne toujours, indépendamment des éventuelles données programmées dans le PIC.

La méthode basse tension pour entrer en mode de programmation commence par conduire le MCLR à haut, puis à bas, puis à cadencer dans une séquence de touches spéciale de 32 bits en utilisant PGC et PGD normalement. La pièce entrera en mode de programmation sur la séquence de touches correcte et restera en mode de programmation tant que MCLR est maintenu bas.

La méthode basse tension peut être désactivée par l'un des bits de configuration. Cependant, l'état effacé du bit de configuration permet une programmation basse tension, il est expédié de l'usine de cette façon, et ce bit de configuration ne peut être défini pour interdire LVP que si la programmation a été entrée avec la méthode haute tension. Par conséquent, pour que LVP ne soit pas activé, toutes les conditions suivantes doivent être remplies:

  1. Le PIC a été programmé pour la dernière fois avec un programmateur compatible HVP et le mode d'entrée du programme HVP a été utilisé.

  2. Le fichier HEX programmé dans le PIC définit délibérément le bit LVP du mot de configuration 2 à l'état non effacé.

Étant donné que la désactivation de LVP nécessite à peu près une action délibérée et le bon programmeur, il est probablement toujours activé. S'il a été délibérément désactivé pour une raison étrange, vous devez fournir 8-9 V sur MCLR pour mettre le PIC en mode de programmation au moins assez longtemps pour effectuer un effacement en masse (qui réactive LVP).

Olin Lathrop
la source
3

La programmation d'un PIC nécessite une haute tension. Oui, il est possible de basculer un PIC en mode "LVP" ou programmation basse tension, mais vous avez besoin d'un programmateur haute tension pour ce faire.

Si votre PIC a déjà été mis en mode LVP, alors oui, vous pouvez facilement programmer le PIC depuis le FPGA. Les fiches de données contiennent toutes les formes d'onde de programmation nécessaires pour programmer la puce, il s'agirait donc de construire votre propre dispositif de programmation PIC dans le FPGA.

Cependant, si le PIC n'a pas été mis en mode LVP, vous devrez générer une haute tension (généralement 10 V) et l'appliquer à la broche MCLR au bon moment pour entrer en mode de programmation. Si vous n'avez pas déjà ce type de matériel sur votre carte, cela nécessiterait du matériel supplémentaire qui est finalement contrôlé par le FPGA quant à son déclenchement.

La plupart des programmeurs PIC incluent un petit régulateur boost (doubleur de tension) pour prendre le 5V jusqu'à 10V fourni en utilisant un PIC intégré pour gérer la régulation de la tension. Ils utilisent souvent PWM du PIC et une entrée ADC sur le PIC comme simple régulateur de boost.

Vous devriez jeter un œil aux schémas PICkit2 accessibles au public.

Majenko
la source
1
Non, très probablement aucune haute tension n'est requise. La plupart des pièces les plus récentes, y compris toutes les séries 12F1xxx / 16F1xxx, peuvent utiliser une séquence de touches pour entrer en mode de programmation. Cette séquence ne nécessite pas de haute tension. Cela peut être désactivé dans la configuration, mais la pièce provient de l'usine avec la méthode clé activée. Sauf si quelqu'un a délibérément désactivé l'entrée du mode programme de séquence de touches, il devrait toujours être disponible. S'il est désactivé, alors oui, vous devez augmenter le MCLR à 8-9 V pour passer en mode de programmation.
Olin Lathrop
Le mode de programmation des touches est le mode LVP. Il s'appuie sur LVP = 1 dans la config. Il semble que la puce par défaut soit LVP = 1, mais EST-elle = 1 sur cette puce spécifique, ou a-t-elle déjà été programmée avec LVP = 0? Qui sait? Comme je l'ai dit - SI il est en mode LVP, vous n'avez pas besoin du HV, sinon vous en avez besoin.
Majenko
Donc, pour programmer en mode LVP, dois-je implémenter un programmeur PIC "numérique" (VHDL) dans mon FPGA? Je ne peux vraiment pas penser à une façon de faire ça. Pourriez-vous m'aider à le construire?
Myst
Non, je ne peux pas. Vous disposez des schémas du pickit2, vous savez donc quels signaux sont nécessaires. Vous disposez de la source du micrologiciel pickit2, vous savez donc comment communiquer. Vous disposez des fiches techniques de programmation, vous savez donc quelles instructions envoyer et comment les envoyer. La façon dont vous communiquez le micrologiciel au PIC à partir de votre ordinateur dépend entièrement de vous. Combien d'intelligence voulez-vous dans votre FPGA, et combien à la fin du PC?
Majenko
D'accord, merci. En premier lieu, je vais essayer de programmer le PIC directement avec le PICKIT 3. Concernant le PICKIT (que ma firme a acheté à cet effet), j'ai peur de le connecter directement aux broches du PIC car ce sont des également connecté au FPGA. Je crains qu'une certaine tension ne passe par le FPGA éteint et fasse des dégâts. Est-ce une préoccupation justifiée?
Myst