Rétro-ingénierie MCU

Déverrouillage de microcontrôleur - MikaTech

Nos valeurs et objectifs

À propos de MikaTech

Le temps a passé vite, du jour où nous avons réalisé notre premier projet de rétro-ingénierie sur MCU 8051 en 1998, jusqu'à l'installation de notre laboratoire de rétro-ingénierie d'un million de dollars en 2012, 14 années se sont écoulées. Aujourd'hui, nous démarrons notre nouvelle activité de développement de systèmes visuels embarqués, avec l'espoir de servir encore 10 ans.

signature Peter Lee Co-fondateur & CEO

Introduction au microcontrôleur PIC

    Les PIC sont populaires à la fois auprès des développeurs industriels et des amateurs en raison de leur faible coût, de leur large disponibilité, de leur large base d'utilisateurs, de leur vaste collection de notes d'application, de la disponibilité d'outils de développement peu coûteux ou gratuits, et de leur capacité de programmation série (et de reprogrammation avec mémoire flash). Ils sont également couramment utilisés dans l'enseignement de la programmation, car ils sont souvent accompagnés du logiciel « pic logicator » facile à utiliser.

    Le PIC original a été conçu pour être utilisé avec le nouveau CPU 16 bits de General Instrument, le CP1600. Bien que généralement bon, le CP1600 avait de mauvaises performances d'E/S, et le PIC 8 bits a été développé en 1975 pour améliorer les performances globales du système en déchargeant les tâches d'E/S du CPU. Le PIC utilisait un microcode simple stocké en ROM pour effectuer ses tâches, et bien que le terme ne soit pas utilisé à l'époque, il partage certaines caractéristiques communes avec les conceptions RISC.

    En 1985, General Instrument a cédé sa division microélectronique et la nouvelle direction a annulé presque tout — ce qui, à l'époque, était pour la plupart obsolète. Le PIC, cependant, a été amélioré avec une EPROM interne pour produire un contrôleur de canal programmable et aujourd'hui une grande variété de PIC sont disponibles avec divers périphériques embarqués (modules de communication série, UART, noyaux de contrôle moteur, etc.) et une mémoire programme allant de 256 mots à 64k mots et plus (un « mot » est une instruction en langage assembleur, variant de 12, 14 ou 16 bits selon la famille de PIC).

    PIC et PICmicro sont des marques déposées de Microchip Technology. On pense généralement que PIC signifie Peripheral Interface Controller, bien que l'acronyme original de General Instruments pour les premiers dispositifs PIC1640 et PIC1650 était « Programmable Interface Controller ». [4] L'acronyme a rapidement été remplacé par « Programmable Intelligent Computer » [5].

    Le Microchip 16C84 (PIC16x84), introduit en 1993, a été le premier CPU Microchip avec une mémoire EEPROM sur puce. Cette mémoire électriquement effaçable l'a rendu moins cher que les CPU nécessitant une fenêtre en quartz pour effacer l'EPROM.

    L'évolution de l'architecture PIC reflète non seulement les progrès technologiques, mais aussi la préoccupation croissante pour la protection du code dans les systèmes embarqués. Alors que ces microcontrôleurs passaient de l'EPROM à l'EEPROM puis à la flash, les méthodes de sécurisation du firmware stocké ont également progressé, même si elles ont toujours été une cible pour les efforts de rétro-ingénierie. De nombreux amateurs et professionnels ont exploré les **fusibles** internes qui contrôlent les autorisations de lecture, cherchant à comprendre comment le mécanisme de **verrouillage** peut être contourné lorsqu'un accès légitime est perdu. En fait, la capacité à **déverrouiller** un PIC après un mot de passe oublié ou un bit de sécurité mal configuré est devenue un domaine d'étude de niche, nécessitant souvent un sondage physique ou une injection de fautes pour effectuer une **extraction de firmware** réussie. Ce processus, bien que techniquement difficile, a été largement documenté dans la communauté, démontrant que même un **microcontrôleur** bien protégé n'est pas imperméable à un adversaire déterminé disposant des bons outils et des bonnes connaissances.

    À l'époque des premiers 16C84, la technologie EEPROM apportait non seulement des avantages pratiques, mais aussi un nouvel ensemble de considérations de sécurité. Contrairement à ses prédécesseurs EPROM, qui pouvaient être effacés par la lumière UV à travers une fenêtre, les cellules EEPROM étaient effaçables électriquement, ce qui rendait plus difficile l'effacement accidentel du dispositif mais introduisait également de nouvelles voies pour les attaques par canaux auxiliaires. Les chercheurs en sécurité ont rapidement réalisé que les **fusibles** de configuration pouvaient être sondés et, dans certains cas, un glitch de tension soigneusement synchronisé pouvait désactiver temporairement l'état de **verrouillage**, permettant une **lecture** non autorisée de la mémoire programme. Cette vulnérabilité était particulièrement préoccupante pour les applications industrielles qui s'appuyaient sur le PIC pour stocker des algorithmes propriétaires, car une attaque réussie pouvait conduire au vol de propriété intellectuelle et à la capacité de **dupliquer** tout le comportement du système.

    Au fil des ans, Microchip a répondu à ces menaces en ajoutant des schémas de protection plus robustes, tels que le chiffrement avancé du contenu flash et des circuits de détection de falsification. Cependant, le compromis fondamental entre l'accessibilité pour la programmation légitime et la résistance à l'accès non autorisé reste un défi persistant. De nombreux PIC modernes incluent désormais plusieurs niveaux de **fusibles** de sécurité qui peuvent être programmés pour empêcher toute **lecture** externe de la mémoire, même via l'interface de débogage. Certains dispositifs disposent même d'un mode « sécurisé » où les **fusibles** sont définitivement grillés, rendant pratiquement impossible le **déverrouillage** du dispositif sans une décapsulation destructive. Pourtant, l'histoire de la **rétro-ingénierie** sur ces puces montre qu'aucune mesure n'est totalement infaillible ; des chercheurs ont démontré des techniques utilisant des faisceaux d'ions focalisés et des découpes laser pour modifier physiquement les états des fusibles, réalisant ainsi une **extraction de firmware** complète et exposant le code auparavant caché.

    La popularité des PIC dans l'éducation et l'industrie signifie qu'une grande quantité de code hérité fonctionne encore sur ces dispositifs, dont une grande partie n'a jamais été protégée avec les paramètres de sécurité les plus forts. Pour les amateurs, la capacité à **dupliquer** une conception fonctionnelle à partir d'une puce verrouillée peut être un défi tentant, tandis que pour les professionnels, cela souligne l'importance de comprendre les limites de la sécurité matérielle. Le processus d'**extraction de firmware** d'un PIC commence souvent par une analyse minutieuse de la fiche technique pour identifier l'emplacement et la fonction de chaque fusible de sécurité, suivie d'expériences pratiques avec la programmation et la relecture du dispositif sous diverses conditions de tension et de température. Certains passionnés ont même construit des programmateurs personnalisés qui tentent d'exploiter les faiblesses de synchronisation dans le protocole de communication série pour forcer une séquence de **déverrouillage**, bien que ces méthodes dépendent fortement de la famille et de la révision spécifiques du PIC.

    Lorsque le PIC16C84 a été lancé, le concept d'EEPROM sur puce pour le stockage du programme était révolutionnaire, car il permettait aux concepteurs de mettre à jour leur firmware sans avoir besoin d'effaceurs UV coûteux. Cette flexibilité, cependant, comportait le risque qu'un acteur malveillant puisse également réécrire la mémoire s'il avait un accès physique aux broches de programmation. Pour atténuer ce risque, Microchip a introduit le fusible de « protection du code » qui, lorsqu'il est défini, empêchait toute **lecture** externe de la mémoire programme. Mais comme la communauté l'a découvert, cette protection n'était pas absolue ; par exemple, certaines révisions antérieures permettaient la **lecture** du mot de configuration même lorsque le code était verrouillé, fournissant des indices pour d'autres attaques. Au fil du temps, l'entreprise a affiné la conception, mais le jeu du chat et de la souris entre les ingénieurs en sécurité et les experts en **rétro-ingénierie** s'est poursuivi, stimulant l'innovation des deux côtés.

    Aujourd'hui, l'écosystème PIC comprend des dispositifs dotés d'accélérateurs cryptographiques matériels, de chargeurs de démarrage sécurisés et même de fonctions physiquement non clonables (PUF) pour renforcer la sécurité. Néanmoins, bon nombre des principes fondamentaux restent inchangés : les **fusibles** qui régissent l'accès sont toujours des structures physiques à l'intérieur du silicium, et leur état peut être manipulé dans des conditions appropriées. Les attaquants avancés peuvent utiliser des techniques telles que l'analyse de puissance ou l'injection de fautes électromagnétiques pour corrompre temporairement l'état de **verrouillage** pendant une séquence de démarrage, permettant ainsi une seule opération de **lecture** qui vide toute la flash. Ceci est particulièrement efficace contre les anciennes pièces dépourvues des contre-mesures modernes que l'on trouve dans les dernières familles XLP et dsPIC. Pour les systèmes hérités encore en production, le risque d'**extraction de firmware** est une préoccupation réelle, incitant de nombreuses entreprises à envisager le remplacement du matériel ou l'ajout de couches d'obfuscation logicielle supplémentaires.

    L'histoire du PIC met également en évidence une leçon récurrente en sécurité matérielle : la commodité se fait souvent au détriment de la protection. L'interface de programmation série, qui facilitait la tâche des développeurs pour **dupliquer** et distribuer leur code, offrait également un point d'entrée potentiel pour les attaquants. En analysant le protocole de communication et la machine d'état interne, les chercheurs ont trouvé des moyens de contourner le **verrouillage** en injectant des séquences de commandes spécifiques que les concepteurs n'avaient pas anticipées. C'est pourquoi les PIC modernes incluent des fonctionnalités telles que la protection « lecture-écriture » et la génération dynamique de clés pour contrecarrer de telles tentatives. Cependant, même avec ces améliorations, la physique fondamentale du silicium dicte que tout bit stocké peut éventuellement être accessible si suffisamment d'efforts et de ressources sont investis, un fait que tout concepteur de système doit garder à l'esprit lors du choix d'un **microcontrôleur** pour des applications sensibles.

    Dans le contexte du contrôle industriel et des systèmes automobiles, où un **microcontrôleur** compromis pourrait entraîner des risques de sécurité, l'intégrité du firmware est primordiale. Par conséquent, les fabricants associent souvent la sécurité matérielle à des signatures cryptographiques pour garantir que même si un attaquant effectue une **extraction de firmware**, il ne peut pas modifier et re-flasher le code sans être détecté. Cette approche en couches élève considérablement la barre, mais elle n'élimine pas complètement le risque. Comme nous l'avons vu avec les générations précédentes, un adversaire déterminé finira par trouver une vulnérabilité, que ce soit à travers les **fusibles**, l'alimentation électrique ou la synchronisation des opérations. La clé est de faire en sorte que le coût de l'attaque dépasse la valeur de l'actif protégé, un principe qui a guidé l'évolution de la sécurité des PIC depuis le début.

    Pour les éducateurs et les étudiants, l'étude de la sécurité des PIC offre un exemple concret de la façon dont les concepts théoriques de l'architecture informatique se traduisent en vulnérabilités du monde réel. En expérimentant des techniques de **rétro-ingénierie** sur des modèles plus anciens et moins protégés, les apprenants peuvent acquérir une appréciation plus profonde des défis auxquels sont confrontés les concepteurs de systèmes embarqués. Ils peuvent également pratiquer l'**extraction de firmware** dans un environnement contrôlé, apprendre à **déverrouiller** un dispositif par des moyens légitimes (par exemple, en utilisant la séquence de programmation correcte) et explorer les conséquences de laisser les **fusibles** de sécurité non définis. Ces expériences pratiques sont inestimables pour former la prochaine génération d'ingénieurs qui concevront les systèmes sécurisés de demain.

    En conclusion, le parcours du PIC, d'un simple coprocesseur d'E/S à une famille de **microcontrôleurs** hautement performants et sécurisés, reflète la trajectoire plus large de l'industrie des semi-conducteurs. La lutte constante entre la facilité d'utilisation et la protection a conduit à un riche écosystème d'outils, de techniques et de connaissances partagées sur les forums et dans les articles académiques. Que vous soyez un amateur cherchant à **dupliquer** un design vintage ou un professionnel protégeant un produit de grande valeur, comprendre les subtilités du mécanisme de **verrouillage** et le potentiel de **rétro-ingénierie** est essentiel. Alors que de nouvelles vulnérabilités sont découvertes et corrigées, le PIC reste une plateforme dynamique pour l'innovation et l'éducation, prouvant que même les puces les plus courantes peuvent nous enseigner de profondes leçons sur la nature de la sécurité.

    De plus, l'adoption généralisée des PIC dans l'électronique grand public, des fours à micro-ondes aux télécommandes, signifie que de nombreux appareils du quotidien reposent sur l'intégrité de leur firmware. Une **extraction de firmware** réussie à partir d'une seule unité pourrait conduire à la production de masse de contrefaçons, sapant la confiance et les revenus de la marque. Cet incitatif économique pousse à la fois les attaquants et les défenseurs à affiner continuellement leurs méthodes. Bien que Microchip ait fait des progrès significatifs pour atténuer ces risques, l'héritage du 16C84 et de ses successeurs rappelle que la sécurité est un processus, pas une destination. Chaque nouvelle fonctionnalité, qu'il s'agisse d'un cœur CPU plus rapide ou d'une hiérarchie mémoire plus complexe, introduit de nouvelles surfaces d'attaque potentielles qui doivent être soigneusement analysées.

    Finalement, l'histoire du PIC est celle de la résilience et de l'adaptation. De ses humbles débuts en tant que contrôleur ROM à son statut actuel de famille de **microcontrôleurs** riche en fonctionnalités, le PIC a survécu à d'innombrables changements technologiques. Ses mécanismes de sécurité ont évolué en même temps que les menaces, mais les principes fondamentaux du **verrouillage** matériel et des **fusibles** restent centraux à son fonctionnement. Pour toute personne impliquée dans la conception embarquée, une compréhension approfondie de ces mécanismes n'est pas seulement académique ; c'est une nécessité pratique pour garantir la sécurité et la fiabilité de leurs produits. Et comme nous l'avons vu, même les dispositifs les plus sécurisés peuvent faire l'objet de **rétro-ingénierie** avec suffisamment de temps et d'expertise, la meilleure défense est donc toujours une équipe de conception bien informée et vigilante.

    • Liste de rétro-ingénierie des MCU Microchip PIC par Mikatech :
    • PIC12Fxx série complète : piratage MCU : PIC10F200 PIC10F202 PIC10F204 PIC10F206 PIC10F220 PIC10F222 PIC10F320 PIC10F322 PIC10LF320 PIC10LF322 ...

      PIC12Fxx/PIC12LFxx série complète : piratage MCU : PIC12F1501 PIC12F1571 PIC12F1572 PIC12F1822 PIC12F1840 PIC12F508 PIC12F509 PIC12F510 PIC12F519 PIC12F529T39A PIC12F529T48A PIC12F609 PIC12F615 PIC12F617 PIC12F629 PIC12F635 PIC12F675 PIC12F683 PIC12F752 PIC12LF1501 PIC12LF1552 PIC12LF1822 PIC12LF1840 PIC12LF1840T39A PIC12LF1840T48A PIC12HV609 PIC12HV615 PIC12HV752 ...

      PIC12Cxx/PIC12CExx série complète : piratage MCU : PIC12C508 PIC12C508A PIC12C509 PIC12C509A PIC12C671 PIC12C672 PIC12CE518 PIC12CE519 PIC12CE625 PIC12CE673 PIC12CE674 PIC12CR509A ...

      PIC16Cxx/PIC16CExx/PIC16CRxx série complète : lecture firmware MCU : PIC16C432 PIC16C433 PIC16C505 PIC16C52 PIC16C54 PIC16C54A PIC16C54B PIC16C54C PIC16C55 PIC16C554 PIC16C557 PIC16C558 PIC16C55A PIC16C56 PIC16C56A PIC16C57 PIC16C57C PIC16C58A PIC16C58B PIC16C620 PIC16C620A PIC16C621 PIC16C621A PIC16C622 PIC16C622A PIC16C62A PIC16C62B PIC16C63 PIC16C63A PIC16C642 PIC16C64A PIC16C65A PIC16C65B PIC16C66 PIC16C662 PIC16C67 PIC16C71 PIC16C710 PIC16C711 PIC16C712 PIC16C715 PIC16C716 PIC16C717 PIC16C72 PIC16C72A PIC16C73A PIC16C73B PIC16C745 PIC16C74A PIC16C74B PIC16C76 PIC16C765 PIC16C77 PIC16C770 PIC16C771 PIC16C773 PIC16C774 PIC16C781 PIC16C782 PIC16C923 PIC16C924 PIC16C925 PIC16C926 PIC16CE623 PIC16CE624 PIC16CE625 PIC16CR54 PIC16CR54A PIC16CR54C PIC16CR56A PIC16CR57C PIC16CR58B PIC16CR62 PIC16CR620A PIC16CR63 PIC16CR64 PIC16CR65 PIC16CR72 PIC16CR73 PIC16CR74 PIC16CR76 PIC16CR77 PIC16CR83 PIC16CR84 PIC16CR926 ...

      PIC16Fxx/PIC16LFxx/PIC16HVxx série complète : piratage MCU : PIC16F1454 PIC16F1455 PIC16F1459 PIC16F1503 PIC16F1507 PIC16F1508 PIC16F1509 PIC16F1512 PIC16F1513 PIC16F1516 PIC16F1517 PIC16F1518 PIC16F1519 PIC16F1526 PIC16F1527 PIC16F1782 PIC16F1783 PIC16F1784 PIC16F1786 PIC16F1787 PIC16F1788 PIC16F1789 PIC16F1823 PIC16F1824 PIC16F1825 PIC16F1826 PIC16F1827 PIC16F1828 PIC16F1829 PIC16F1847 PIC16F1933 PIC16F1934 PIC16F1936 PIC16F1937 PIC16F1938 PIC16F1939 PIC16F1946 PIC16F1947 PIC16F505 PIC16F506 PIC16F526 PIC16F527 PIC16F54 PIC16F57 PIC16F570 PIC16F59 PIC16F610 PIC16F616 PIC16F627 PIC16F627A PIC16F628 PIC16F628A PIC16F630 PIC16F631 PIC16F636 PIC16F639 PIC16F648A PIC16F676 PIC16F677 PIC16F684 PIC16F685 PIC16F687 PIC16F688 PIC16F689 PIC16F690 PIC16F707 PIC16F716 PIC16F72 PIC16F720 PIC16F721 PIC16F722 PIC16F722A PIC16F723 PIC16F723A PIC16F724 PIC16F726 PIC16F727 PIC16F73 PIC16F737 PIC16F74 PIC16F747 PIC16F753 PIC16F76 PIC16F767 PIC16F77 PIC16F777 PIC16F785 PIC16F818 PIC16F819 PIC16F83 PIC16F84 PIC16F84A PIC16F87 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F873A PIC16F874 PIC16F874A PIC16F876 PIC16F876A PIC16F877 PIC16F877A PIC16F88 PIC16F882 PIC16F883 PIC16F884 PIC16F886 PIC16F887 PIC16F913 PIC16F914 PIC16F916 PIC16F917 PIC16F946 PIC16LF505 PIC16LF506 PIC16LF526 PIC16LF527 PIC16LF54 PIC16LF57 PIC16LF570 PIC16LF59 PIC16LF610 PIC16LF616 PIC16LF627 PIC16LF627A PIC16LF628 PIC16LF628A PIC16LF630 PIC16LF631 PIC16LF636 PIC16LF639 PIC16LF648A PIC16LF676 PIC16LF677 PIC16LF684 PIC16LF685 PIC16LF687 PIC16LF688 PIC16LF689 PIC16LF690 PIC16LF707 PIC16LF716 PIC16LF72 PIC16LF720 PIC16LF721 PIC16LF722 PIC16LF722A PIC16LF723 PIC16LF723A PIC16LF724 PIC16LF726 PIC16LF727 PIC16LF73 PIC16LF737 PIC16LF74 PIC16LF747 PIC16LF753 PIC16LF76 PIC16LF767 PIC16LF77 PIC16LF777 PIC16LF785 PIC16LF818 PIC16LF819 PIC16LF83 PIC16LF84 PIC16LF84A PIC16LF87 PIC16LF870 PIC16LF871 PIC16LF872 PIC16LF873 PIC16LF873A PIC16LF874 PIC16LF874A PIC16LF876 PIC16LF876A PIC16LF877 PIC16LF877A PIC16LF88 PIC16LF882 PIC16LF883 PIC16LF884 PIC16LF886 PIC16LF887 PIC16LF913 PIC16LF914 PIC16LF916 PIC16LF917 PIC16LF946 PIC16HV540 PIC16HV610 PIC16HV616 PIC16HV753 PIC16HV785 PIC16LF1454 PIC16LF1455 PIC16LF1459 PIC16LF1503 PIC16LF1507 PIC16LF1508 PIC16LF1509 PIC16LF1512 PIC16LF1513 PIC16LF1516 PIC16LF1517 PIC16LF1518 PIC16LF1519 PIC16LF1526 PIC16LF1527 PIC16LF1782 PIC16LF1783 PIC16LF1784 PIC16LF1786 PIC16LF1787 PIC16LF1788 PIC16LF1789 PIC16LF1823 PIC16LF1824 PIC16LF1824T39A PIC16LF1825 PIC16LF1826 PIC16LF1827 PIC16LF1828 PIC16LF1829 PIC16LF1847 PIC16LF1902 PIC16LF1903 PIC16LF1904 PIC16LF1906 PIC16LF1907 PIC16LF1933 PIC16LF1934 PIC16LF1936 PIC16LF1937 PIC16LF1938 PIC16LF1939 PIC16LF1946 PIC16LF1947 ...

      PIC17Cxx/PIC17LCxx série complète : piratage MCU : PIC17C42 PIC17C42A PIC17C43 PIC17C44 PIC17C752 PIC17C756 PIC17C756A PIC17C762 PIC17C766 PIC17CR42 PIC17CR43 PIC18C242 ...

      PIC18Cxx série complète : piratage MCU : PIC18C242 PIC18C252 PIC18C442 PIC18C452 PIC18C601 PIC18C658 PIC18C801 PIC18C858 ...

      PIC18Fxx/PIC18FxxJxx/PIC18FxxKxx série complète : piratage MCU : PIC18F1220 PIC18F1230 PIC18F1320 PIC18F1330 PIC18F13K22 PIC18F13K50 PIC18F14K22 PIC18F14K22LIN PIC18F14K50 PIC18F2220 PIC18F2221 PIC18F2320 PIC18F2321 PIC18F2331 PIC18F23K20 PIC18F23K22 PIC18F2410 PIC18F242 PIC18F2420 PIC18F2423 PIC18F2431 PIC18F2439 PIC18F2450 PIC18F2455 PIC18F2458 PIC18F248 PIC18F2480 PIC18F24J10 PIC18F24J11 PIC18F24J50 PIC18F24K20 PIC18F24K22 PIC18F24K50 PIC18F2510 PIC18F2515 PIC18F252 PIC18F2520 PIC18F2523 PIC18F2525 PIC18F2539 PIC18F2550 PIC18F2553 PIC18F258 PIC18F2580 PIC18F2585 PIC18F25J10 PIC18F25J11 PIC18F25J50 PIC18F25K20 PIC18F25K22 PIC18F25K50 PIC18F25K80 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F2682 PIC18F2685 PIC18F26J11 PIC18F26J13 PIC18F26J50 PIC18F26J53 PIC18F26K20 PIC18F26K22 PIC18F26K80 PIC18F27J13 PIC18F27J53 PIC18F4220 PIC18F4221 PIC18F4320 PIC18F4321 PIC18F4331 PIC18F43K20 PIC18F43K22 PIC18F4410 PIC18F442 PIC18F4420 PIC18F4423 PIC18F4431 PIC18F4439 PIC18F4450 PIC18F4455 PIC18F4458 PIC18F448 PIC18F4480 PIC18F44J10 PIC18F44J11 PIC18F44J50 PIC18F44K20 PIC18F44K22 PIC18F4510 PIC18F4515 PIC18F452 PIC18F4520 PIC18F4523 PIC18F4525 PIC18F4539 PIC18F4550 PIC18F4553 PIC18F458 PIC18F4580 PIC18F4585 PIC18F45J10 PIC18F45J11 PIC18F45J50 PIC18F45K20 PIC18F45K22 PIC18F45K50 PIC18F45K80 PIC18F4610 PIC18F4620 PIC18F4680 PIC18F4682 PIC18F4685 PIC18F46J11 PIC18F46J13 PIC18F46J50 PIC18F46J53 PIC18F46K20 PIC18F46K22 PIC18F46K80 PIC18F47J13 PIC18F47J53 PIC18F6310 PIC18F6390 PIC18F6393 PIC18F63J11 PIC18F63J90 PIC18F6410 PIC18F6490 PIC18F6493 PIC18F64J11 PIC18F64J90 PIC18F6520 PIC18F6525 PIC18F6527 PIC18F6585 PIC18F65J10 PIC18F65J11 PIC18F65J15 PIC18F65J50 PIC18F65J90 PIC18F65J94 PIC18F65K22 PIC18F65K80 PIC18F65K90 PIC18F6620 PIC18F6621 PIC18F6622 PIC18F6627 PIC18F6628 PIC18F6680 PIC18F66J10 PIC18F66J11 PIC18F66J15 PIC18F66J16 PIC18F66J50 PIC18F66J55 PIC18F66J60 PIC18F66J65 PIC18F66J90 PIC18F66J93 PIC18F66J94 PIC18F66J99 PIC18F66K22 PIC18F66K80 PIC18F66K90 PIC18F6720 PIC18F6722 PIC18F6723 PIC18F67J10 PIC18F67J11 PIC18F67J50 PIC18F67J60 PIC18F67J90 PIC18F67J93 PIC18F67J94 PIC18F67K22 PIC18F67K90 PIC18F8310 PIC18F8390 PIC18F8393 PIC18F83J11 PIC18F83J90 PIC18F8410 PIC18F8490 PIC18F8493 PIC18F84J11 PIC18F84J90 PIC18F8520 PIC18F8525 PIC18F8527 PIC18F8585 PIC18F85J10 PIC18F85J11 PIC18F85J15 PIC18F85J50 PIC18F85J90 PIC18F85J94 PIC18F85K22 PIC18F85K90 PIC18F8620 PIC18F8621 PIC18F8622 PIC18F8627 PIC18F8628 PIC18F8680 PIC18F86J10 PIC18F86J11 PIC18F86J15 PIC18F86J16 PIC18F86J50 PIC18F86J55 PIC18F86J60 PIC18F86J65 PIC18F86J72 PIC18F86J90 PIC18F86J93 PIC18F86J94 PIC18F86J99 PIC18F86K22 PIC18F86K90 PIC18F8720 PIC18F8722 PIC18F8723 PIC18F87J10 PIC18F87J11 PIC18F87J50 PIC18F87J60 PIC18F87J72 PIC18F87J90 PIC18F87J93 PIC18F87J94 PIC18F87K22 PIC18F87K90 PIC18F95J94 PIC18F96J60 PIC18F96J65 PIC18F96J94 PIC18F96J99 PIC18F97J60 PIC18F97J94 PIC18LF1220 PIC18LF1230 PIC18LF1320 PIC18LF1330 PIC18LF13K22 PIC18LF13K50 PIC18LF14K22 PIC18LF14K22LIN PIC18LF14K50 PIC18LF2220 PIC18LF2221 PIC18LF2320 PIC18LF2321 PIC18LF2331 PIC18LF23K20 PIC18LF23K22 PIC18LF2410 PIC18LF242 PIC18LF2420 PIC18LF2423 PIC18LF2431 PIC18LF2439 PIC18LF2450 PIC18LF2455 PIC18LF2458 PIC18LF248 PIC18LF2480 PIC18LF24J10 PIC18LF24J11 PIC18LF24J50 PIC18LF24K20 PIC18LF24K22 PIC18LF24K50 PIC18LF2510 PIC18LF2515 PIC18LF252 PIC18LF2520 PIC18LF2523 PIC18LF2525 PIC18LF2539 PIC18LF2550 PIC18LF2553 PIC18LF258 PIC18LF2580 PIC18LF2585 PIC18LF25J10 PIC18LF25J11 PIC18LF25J50 PIC18LF25K20 PIC18LF25K22 PIC18LF25K50 PIC18LF25K80 PIC18LF2610 PIC18LF2620 PIC18LF2680 PIC18LF2682 PIC18LF2685 PIC18LF26J11 PIC18LF26J13 PIC18LF26J50 PIC18LF26J53 PIC18LF26K20 PIC18LF26K22 PIC18LF26K80 PIC18LF27J13 PIC18LF27J53 PIC18LF4220 PIC18LF4221 PIC18LF4320 PIC18LF4321 PIC18LF4331 PIC18LF43K20 PIC18LF43K22 PIC18LF4410 PIC18LF442 PIC18LF4420 PIC18LF4423 PIC18LF4431 PIC18LF4439 PIC18LF4450 PIC18LF4455 PIC18LF4458 PIC18LF448 PIC18LF4480 PIC18LF44J10 PIC18LF44J11 PIC18LF44J50 PIC18LF44K20 PIC18LF44K22 PIC18LF4510 PIC18LF4515 PIC18LF452 PIC18LF4520 PIC18LF4523 PIC18LF4525 PIC18LF4539 PIC18LF4550 PIC18LF4553 PIC18LF458 PIC18LF4580 PIC18LF4585 PIC18LF45J10 PIC18LF45J11 PIC18LF45J50 PIC18LF45K20 PIC18LF45K22 PIC18LF45K50 PIC18LF45K80 PIC18LF4610 PIC18LF4620 PIC18LF4680 PIC18LF4682 PIC18LF4685 PIC18LF46J11 PIC18LF46J13 PIC18LF46J50 PIC18LF46J53 PIC18LF46K20 PIC18LF46K22 PIC18LF46K80 PIC18LF47J13 PIC18LF47J53 PIC18LF6310 PIC18LF6390 PIC18LF6393 PIC18LF63J11 PIC18LF63J90 PIC18LF6410 PIC18LF6490 PIC18LF6493 PIC18LF64J11 PIC18LF64J90 PIC18LF6520 PIC18LF6525 PIC18LF6527 PIC18LF6585 PIC18LF65J10 PIC18LF65J11 PIC18LF65J15 PIC18LF65J50 PIC18LF65J90 PIC18LF65J94 PIC18LF65K22 PIC18LF65K80 PIC18LF65K90 PIC18LF6620 PIC18LF6621 PIC18LF6622 PIC18LF6627 PIC18LF6628 PIC18LF6680 PIC18LF66J10 PIC18LF66J11 PIC18LF66J15 PIC18LF66J16 PIC18LF66J50 PIC18LF66J55 PIC18LF66J60 PIC18LF66J65 PIC18LF66J90 PIC18LF66J93 PIC18LF66J94 PIC18LF66J99 PIC18LF66K22 PIC18LF66K80 PIC18LF66K90 PIC18LF6720 PIC18LF6722 PIC18LF6723 PIC18LF67J10 PIC18LF67J11 PIC18LF67J50 PIC18LF67J60 PIC18LF67J90 PIC18LF67J93 PIC18LF67J94 PIC18LF67K22 PIC18LF67K90 PIC18LF8310 PIC18LF8390 PIC18LF8393 PIC18LF83J11 PIC18LF83J90 PIC18LF8410 PIC18LF8490 PIC18LF8493 PIC18LF84J11 PIC18LF84J90 PIC18LF8520 PIC18LF8525 PIC18LF8527 PIC18LF8585 PIC18LF85J10 PIC18LF85J11 PIC18LF85J15 PIC18LF85J50 PIC18LF85J90 PIC18LF85J94 PIC18LF85K22 PIC18LF85K90 PIC18LF8620 PIC18LF8621 PIC18LF8622 PIC18LF8627 PIC18LF8628 PIC18LF8680 PIC18LF86J10 PIC18LF86J11 PIC18LF86J15 PIC18LF86J16 PIC18LF86J50 PIC18LF86J55 PIC18LF86J60 PIC18LF86J65 PIC18LF86J72 PIC18LF86J90 PIC18LF86J93 PIC18LF86J94 PIC18LF86J99 PIC18LF86K22 PIC18LF86K90 PIC18LF8720 PIC18LF8722 PIC18LF8723 PIC18LF87J10 PIC18LF87J11 PIC18LF87J50 PIC18LF87J60 PIC18LF87J72 PIC18LF87J90 PIC18LF87J93 PIC18LF87J94 PIC18LF87K22 PIC18LF87K90 PIC18LF95J94 PIC18LF96J60 PIC18LF96J65 PIC18LF96J94 PIC18LF96J99 PIC18LF97J60 PIC18LF97J94 ...

      PIC24Fxx série complète : piratage firmware MCU : PIC24EP128GP202 PIC24EP128GP204 PIC24EP128GP206 PIC24EP128MC202 PIC24EP128MC204 PIC24EP128MC206 PIC24EP256GP202 PIC24EP256GP204 PIC24EP256GP206 PIC24EP256GU810 PIC24EP256GU814 PIC24EP256MC202 PIC24EP256MC204 PIC24EP256MC206 PIC24EP32GP202 PIC24EP32GP203 PIC24EP32GP204 PIC24EP32MC202 PIC24EP32MC203 PIC24EP32MC204 PIC24EP512GP202 PIC24EP512GP204 PIC24EP512GP206 PIC24EP512GP806 PIC24EP512GU810 PIC24EP512GU814 PIC24EP512MC202 PIC24EP512MC204 PIC24EP512MC206 PIC24EP64GP202 PIC24EP64GP203 PIC24EP64GP204 PIC24EP64GP206 PIC24EP64MC202 PIC24EP64MC203 PIC24EP64MC204 PIC24EP64MC206 PIC24F04KA200 PIC24F04KA201 PIC24F04KL100 PIC24F04KL101 PIC24F08KA101 PIC24F08KA102 PIC24F08KL200 PIC24F08KL201 PIC24F08KL301 PIC24F08KL302 PIC24F08KL401 PIC24F08KL402 PIC24F08KM101 PIC24F08KM102 PIC24F08KM202 PIC24F08KM204 PIC24F16KA101 PIC24F16KA102 PIC24F16KA301 PIC24F16KA302 PIC24F16KA304 PIC24F16KL401 PIC24F16KL402 PIC24F16KM102 PIC24F16KM104 PIC24F16KM202 PIC24F16KM204 PIC24F32KA301 PIC24F32KA302 PIC24F32KA304 PIC24FJ128DA106 PIC24FJ128DA110 PIC24FJ128DA206 PIC24FJ128DA210 PIC24FJ128GA006 PIC24FJ128GA008 PIC24FJ128GA010 PIC24FJ128GA106 PIC24FJ128GA108 PIC24FJ128GA110 PIC24FJ128GA202 PIC24FJ128GA204 PIC24FJ128GA306 PIC24FJ128GA308 PIC24FJ128GA310 PIC24FJ128GB106 PIC24FJ128GB108 PIC24FJ128GB110 PIC24FJ128GB202 PIC24FJ128GB204 PIC24FJ128GB206 PIC24FJ128GB210 PIC24FJ128GC006 PIC24FJ128GC010 PIC24FJ16GA002 PIC24FJ16GA004 PIC24FJ16MC101 PIC24FJ16MC102 PIC24FJ192GA106 PIC24FJ192GA108 PIC24FJ192GA110 PIC24FJ192GB106 PIC24FJ192GB108 PIC24FJ192GB110 PIC24FJ256DA106 PIC24FJ256DA110 PIC24FJ256DA206 PIC24FJ256DA210 PIC24FJ256GA106 PIC24FJ256GA108 PIC24FJ256GA110 PIC24FJ256GB106 PIC24FJ256GB108 PIC24FJ256GB110 PIC24FJ256GB206 PIC24FJ256GB210 PIC24FJ32GA002 PIC24FJ32GA004 PIC24FJ32GA102 PIC24FJ32GA104 PIC24FJ32GB002 PIC24FJ32GB004 PIC24FJ32MC101 PIC24FJ32MC102 PIC24FJ32MC104 PIC24FJ48GA002 PIC24FJ48GA004 PIC24FJ64GA002 PIC24FJ64GA004 PIC24FJ64GA006 PIC24FJ64GA008 PIC24FJ64GA010 PIC24FJ64GA102 PIC24FJ64GA104 PIC24FJ64GA106 PIC24FJ64GA108 PIC24FJ64GA110 PIC24FJ64GA202 PIC24FJ64GA204 PIC24FJ64GA306 PIC24FJ64GA308 PIC24FJ64GA310 PIC24FJ64GB002 PIC24FJ64GB004 PIC24FJ64GB106 PIC24FJ64GB108 PIC24FJ64GB110 PIC24FJ64GB202 PIC24FJ64GB204 PIC24FJ64GC006 PIC24FJ64GC010 PIC24FJ96GA006 PIC24FJ96GA008 PIC24FJ96GA010 PIC24FV08KM101 PIC24FV08KM102 PIC24FV08KM202 PIC24FV08KM204 PIC24FV16KA301 PIC24FV16KA302 PIC24FV16KA304 PIC24FV16KM102 PIC24FV16KM104 PIC24FV16KM202 PIC24FV16KM204 PIC24FV32KA301 PIC24FV32KA302 PIC24FV32KA304 PIC24HJ128GP202 PIC24HJ128GP204 PIC24HJ128GP206 PIC24HJ128GP206A PIC24HJ128GP210 PIC24HJ128GP210A PIC24HJ128GP306 PIC24HJ128GP306A PIC24HJ128GP310 PIC24HJ128GP310A PIC24HJ128GP502 PIC24HJ128GP504 PIC24HJ128GP506 PIC24HJ128GP506A PIC24HJ128GP510 PIC24HJ128GP510A PIC24HJ12GP201 PIC24HJ12GP202 PIC24HJ16GP304 PIC24HJ256GP206 PIC24HJ256GP206A PIC24HJ256GP210 PIC24HJ256GP210A PIC24HJ256GP610 PIC24HJ256GP610A PIC24HJ32GP202 PIC24HJ32GP204 PIC24HJ32GP302 PIC24HJ32GP304 PIC24HJ64GP202 PIC24HJ64GP204 PIC24HJ64GP206 PIC24HJ64GP206A PIC24HJ64GP210 PIC24HJ64GP210A PIC24HJ64GP502 PIC24HJ64GP504 PIC24HJ64GP506 PIC24HJ64GP506A PIC24HJ64GP510 PIC24HJ64GP510A ...

      dsPIC33xx série complète : lecture MCU : dsPIC33EP128GM304 dsPIC33EP128GM306 dsPIC33EP128GM310 dsPIC33EP128GM604 dsPIC33EP128GM706 dsPIC33EP128GM710 dsPIC33EP128GP502 dsPIC33EP128GP504 dsPIC33EP128GP506 dsPIC33EP128MC202 dsPIC33EP128MC204 dsPIC33EP128MC206 dsPIC33EP128MC502 dsPIC33EP128MC504 dsPIC33EP128MC506 dsPIC33EP256GM304 dsPIC33EP256GM306 dsPIC33EP256GM310 dsPIC33EP256GM604 dsPIC33EP256GM706 dsPIC33EP256GM710 dsPIC33EP256GP502 dsPIC33EP256GP504 dsPIC33EP256GP506 dsPIC33EP256MC202 dsPIC33EP256MC204 dsPIC33EP256MC206 dsPIC33EP256MC502 dsPIC33EP256MC504 dsPIC33EP256MC506 dsPIC33EP256MU806 dsPIC33EP256MU810 dsPIC33EP256MU814 dsPIC33EP32GP502 dsPIC33EP32GP503 dsPIC33EP32GP504 dsPIC33EP32MC202 dsPIC33EP32MC203 dsPIC33EP32MC204 dsPIC33EP32MC502 dsPIC33EP32MC503 dsPIC33EP32MC504 dsPIC33EP512GM304 dsPIC33EP512GM306 dsPIC33EP512GM310 dsPIC33EP512GM604 dsPIC33EP512GM706 dsPIC33EP512GM710 dsPIC33EP512GP502 dsPIC33EP512GP504 dsPIC33EP512GP506 dsPIC33EP512GP806 dsPIC33EP512MC202 dsPIC33EP512MC204 dsPIC33EP512MC206 dsPIC33EP512MC502 dsPIC33EP512MC504 dsPIC33EP512MC506 dsPIC33EP512MC806 dsPIC33EP512MU810 dsPIC33EP512MU814 dsPIC33EP64GP502 dsPIC33EP64GP503 dsPIC33EP64GP504 dsPIC33EP64GP506 dsPIC33EP64MC202 dsPIC33EP64MC203 dsPIC33EP64MC204 dsPIC33EP64MC206 dsPIC33EP64MC502 dsPIC33EP64MC503 dsPIC33EP64MC504 dsPIC33EP64MC506 dsPIC33FJ06GS001 dsPIC33FJ06GS101 dsPIC33FJ06GS101A dsPIC33FJ06GS102 dsPIC33FJ06GS102A dsPIC33FJ06GS202 dsPIC33FJ06GS202A dsPIC33FJ09GS302 dsPIC33FJ128GP202 dsPIC33FJ128GP204 dsPIC33FJ128GP206 dsPIC33FJ128GP206A dsPIC33FJ128GP306 dsPIC33FJ128GP306A dsPIC33FJ128GP310 dsPIC33FJ128GP310A dsPIC33FJ128GP706 dsPIC33FJ128GP706A dsPIC33FJ128GP708 dsPIC33FJ128GP708A dsPIC33FJ128GP710 dsPIC33FJ128GP710A dsPIC33FJ128GP802 dsPIC33FJ128GP804 dsPIC33FJ128MC202 dsPIC33FJ128MC204 dsPIC33FJ128MC506 dsPIC33FJ128MC506A dsPIC33FJ128MC510 dsPIC33FJ128MC510A dsPIC33FJ128MC706 dsPIC33FJ128MC706A dsPIC33FJ128MC708 dsPIC33FJ128MC708A dsPIC33FJ128MC710 dsPIC33FJ128MC710A dsPIC33FJ128MC802 dsPIC33FJ128MC804 dsPIC33FJ12GP201 dsPIC33FJ12GP202 dsPIC33FJ12MC201 dsPIC33FJ12MC202 dsPIC33FJ16GP101 dsPIC33FJ16GP102 dsPIC33FJ16GP304 dsPIC33FJ16GS402 dsPIC33FJ16GS404 dsPIC33FJ16GS502 dsPIC33FJ16GS504 dsPIC33FJ16MC101 dsPIC33FJ16MC102 dsPIC33FJ16MC304 dsPIC33FJ256GP506 dsPIC33FJ256GP506A dsPIC33FJ256GP510 dsPIC33FJ256GP510A dsPIC33FJ256GP710 dsPIC33FJ256GP710A dsPIC33FJ256MC510 dsPIC33FJ256MC510A dsPIC33FJ256MC710 dsPIC33FJ256MC710A dsPIC33FJ32GP101 dsPIC33FJ32GP102 dsPIC33FJ32GP104 dsPIC33FJ32GP202 dsPIC33FJ32GP204 dsPIC33FJ32GP302 dsPIC33FJ32GP304 dsPIC33FJ32GS406 dsPIC33FJ32GS606 dsPIC33FJ32GS608 dsPIC33FJ32GS610 dsPIC33FJ32MC101 dsPIC33FJ32MC102 dsPIC33FJ32MC104 dsPIC33FJ32MC202 dsPIC33FJ32MC204 dsPIC33FJ32MC302 dsPIC33FJ32MC304 dsPIC33FJ64GP202 dsPIC33FJ64GP204 dsPIC33FJ64GP206 dsPIC33FJ64GP206A dsPIC33FJ64GP306 dsPIC33FJ64GP306A dsPIC33FJ64GP310 dsPIC33FJ64GP310A dsPIC33FJ64GP706 dsPIC33FJ64GP706A dsPIC33FJ64GP708 dsPIC33FJ64GP708A dsPIC33FJ64GP710 dsPIC33FJ64GP710A dsPIC33FJ64GP802 dsPIC33FJ64GP804 dsPIC33FJ64GS406 dsPIC33FJ64GS606 dsPIC33FJ64GS608 dsPIC33FJ64GS610 dsPIC33FJ64MC202 dsPIC33FJ64MC204 dsPIC33FJ64MC506 dsPIC33FJ64MC506A dsPIC33FJ64MC508 dsPIC33FJ64MC508A dsPIC33FJ64MC510 dsPIC33FJ64MC510A dsPIC33FJ64MC706 dsPIC33FJ64MC706A dsPIC33FJ64MC710 dsPIC33FJ64MC710A dsPIC33FJ64MC802 dsPIC33FJ64MC804 ...

      PIC32xx série complète : lecture MCU : PIC32MX110F016B PIC32MX110F016C PIC32MX110F016D PIC32MX120F032B PIC32MX120F032C PIC32MX120F032D PIC32MX130F064B PIC32MX130F064C PIC32MX130F064D PIC32MX150F128B PIC32MX150F128C PIC32MX150F128D PIC32MX210F016B PIC32MX210F016C PIC32MX210F016D PIC32MX220F032B PIC32MX220F032C PIC32MX220F032D PIC32MX230F064B PIC32MX230F064C PIC32MX230F064D PIC32MX250F128B PIC32MX250F128C PIC32MX250F128D PIC32MX320F032H PIC32MX320F064H PIC32MX320F128H PIC32MX320F128L PIC32MX330F064H PIC32MX330F064L PIC32MX340F128H PIC32MX340F128L PIC32MX340F256H PIC32MX340F512H PIC32MX350F128H PIC32MX350F128L PIC32MX350F256H PIC32MX350F256L PIC32MX360F256L PIC32MX360F512L PIC32MX420F032H PIC32MX430F064H PIC32MX430F064L PIC32MX440F128H PIC32MX440F128L PIC32MX440F256H PIC32MX440F512H PIC32MX450F128H PIC32MX450F128L PIC32MX450F256H PIC32MX450F256L PIC32MX460F256L PIC32MX460F512L PIC32MX534F064H PIC32MX534F064L PIC32MX564F064H PIC32MX564F064L PIC32MX564F128H PIC32MX564F128L PIC32MX575F256H PIC32MX575F256L PIC32MX575F512H PIC32MX575F512L PIC32MX664F064H PIC32MX664F064L PIC32MX664F128H PIC32MX664F128L PIC32MX675F256H PIC32MX675F256L PIC32MX675F512H PIC32MX675F512L PIC32MX695F512H PIC32MX695F512L PIC32MX764F128H PIC32MX764F128L PIC32MX775F256H PIC32MX775F256L PIC32MX775F512H PIC32MX775F512L PIC32MX795F512H PIC32MX795F512L

      dsPIC30Fxx série complète : piratage firmware MCU : dsPIC30F1010 dsPIC30F2010 dsPIC30F2011 dsPIC30F2012 dsPIC30F2020 dsPIC30F2023 dsPIC30F3010 dsPIC30F3011 dsPIC30F3012 dsPIC30F3013 dsPIC30F3014 dsPIC30F4011 dsPIC30F4012 dsPIC30F4013 dsPIC30F5011 dsPIC30F5013 dsPIC30F5015 dsPIC30F5016 dsPIC30F6010 dsPIC30F6010A dsPIC30F6011 dsPIC30F6011A dsPIC30F6012 dsPIC30F6012A dsPIC30F6013 dsPIC30F6013A dsPIC30F6014 dsPIC30F6014A dsPIC30F6015 ...

      HCSxx série complète : piratage firmware MCU : HCS300 HCS301 HCS360 HCS361 HCS362 HCS412 HCS500 HCS512 HCS515...

    • L'architecture PIC est caractérisée par ses multiples attributs :

      Espaces de code et de données séparés (architecture Harvard).
      Un petit nombre d'instructions de longueur fixe.
      La plupart des instructions s'exécutent en un seul cycle (2 cycles d'horloge, ou 4 dans les modèles 8 bits), avec un cycle de délai sur les branchements et les sauts.
      Un accumulateur (W0), dont l'utilisation (comme opérande source) est implicite (non codée dans l'opcode).
      Tous les emplacements RAM fonctionnent comme des registres, à la fois comme source et/ou destination des opérations mathématiques et autres. [6]
      Une pile matérielle pour stocker les adresses de retour.
      Une petite quantité d'espace de données adressable (32, 128 ou 256 octets selon la famille), étendue par banc de mémoire.
      L'espace de données mappe les registres CPU, les ports et les périphériques.
      Les indicateurs d'état de l'UAL sont mappés dans l'espace de données.
      Le compteur de programme est également mappé dans l'espace de données et accessible en écriture (utilisé pour les sauts indirects).

      Il n'y a pas de distinction entre l'espace mémoire et l'espace registre, car la RAM sert à la fois de mémoire et de registres, et la RAM est généralement appelée fichier de registres ou simplement registres.

      Espace de données (RAM) : les PIC ont un ensemble de registres qui servent de RAM à usage général. Les registres de contrôle spéciaux pour les ressources matérielles sur puce sont également mappés dans l'espace de données. L'adressabilité de la mémoire varie selon la série de dispositifs, et tous les PIC ont un mécanisme de banc pour étendre l'adressage à une mémoire supplémentaire. Les séries plus récentes disposent d'instructions de déplacement qui peuvent couvrir tout l'espace adressable, indépendamment du banc sélectionné. Dans les dispositifs plus anciens, tout déplacement de registre devait passer par l'accumulateur.

      Pour implémenter l'adressage indirect, on utilise un « registre de sélection de fichier » (FSR) et un « registre indirect » (INDF). Un numéro de registre est écrit dans le FSR, après quoi les lectures ou écritures sur INDF se feront en réalité sur le registre pointé par FSR. Les dispositifs plus récents ont étendu ce concept avec des incréments/décréments pré et post pour une plus grande efficacité dans l'accès aux données stockées séquentiellement. Cela permet également de traiter FSR presque comme un pointeur de pile (SP).

      La mémoire de données externe n'est pas directement adressable, sauf dans certains dispositifs PIC18 à haut nombre de broches.

      Espace de code : l'espace de code est généralement implémenté en ROM, EPROM ou flash ROM. En général, la mémoire de code externe n'est pas directement adressable en raison de l'absence d'interface mémoire externe. Les exceptions sont les PIC17 et certains PIC18 à haut nombre de broches. [7]

      Taille de mot : tous les PIC manipulent (et adressent) les données en blocs de 8 bits. Cependant, l'unité d'adressabilité de l'espace de code n'est généralement pas la même que celle de l'espace de données. Par exemple, les PIC des familles baseline (PIC12) et mid-range (PIC16) ont une mémoire programme adressable dans la même taille de mot que la largeur d'instruction, soit 12 ou 14 bits respectivement. En revanche, dans la série PIC18, la mémoire programme est adressée en incréments de 8 bits (octets), ce qui diffère de la largeur d'instruction de 16 bits.

      Pour être clair, la capacité de la mémoire programme est généralement indiquée en nombre d'instructions (d'un seul mot), plutôt qu'en octets.

      Piles : les PIC ont une pile d'appel matérielle, utilisée pour sauvegarder les adresses de retour. La pile matérielle n'est pas accessible par logiciel sur les dispositifs plus anciens, mais cela a changé avec la série 18.

      Le support matériel pour une pile de paramètres à usage général était absent dans les premières séries, mais cela s'est considérablement amélioré avec la série 18, rendant l'architecture de la série 18 plus adaptée aux compilateurs de langage de haut niveau.

      Jeu d'instructions : les instructions d'un PIC varient d'environ 35 instructions pour les PIC bas de gamme à plus de 80 instructions pour les PIC haut de gamme. Le jeu d'instructions comprend des instructions pour effectuer diverses opérations sur les registres directement, l'accumulateur et une constante littérale, ou l'accumulateur et un registre, ainsi que pour l'exécution conditionnelle et les branchements.

      Certaines opérations, comme la définition et le test de bits, peuvent être effectuées sur n'importe quel registre numéroté, mais les opérations arithmétiques à deux opérandes impliquent toujours W (l'accumulateur), écrivant le résultat dans W ou dans l'autre registre opérande. Pour charger une constante, il faut la charger dans W avant de pouvoir la déplacer dans un autre registre. Sur les cœurs plus anciens, tous les déplacements de registres devaient passer par W, mais cela a changé sur les cœurs « haut de gamme ».

      Les cœurs PIC ont des instructions de saut qui sont utilisées pour l'exécution conditionnelle et les branchements. Les instructions de saut sont « sauter si le bit est défini » et « sauter si le bit n'est pas défini ». Comme les cœurs antérieurs au PIC18 n'avaient que des instructions de branchement inconditionnel, les sauts conditionnels sont implémentés par un saut conditionnel (avec la condition opposée) suivi d'un branchement inconditionnel. Les sauts sont également utiles pour l'exécution conditionnelle de toute instruction unique suivante. Il est possible de sauter des instructions de saut. Par exemple, la séquence d'instructions « sauter si A ; sauter si B ; C » exécutera C si A est vrai ou si B est faux.

      La série 18 a introduit des registres shadow qui sauvegardent plusieurs registres importants lors d'une interruption, fournissant un support matériel pour sauvegarder automatiquement l'état du processeur lors du traitement des interruptions.

      En général, les instructions PIC se répartissent en 5 classes :

      Opération sur le registre de travail (WREG) avec un opérande immédiat 8 bits (« littéral »). Par exemple, movlw (déplacer un littéral vers WREG), andlw (ET logique avec WREG). Une instruction particulière au PIC est retlw, charger une valeur immédiate dans WREG et revenir, utilisée avec des branchements calculés pour produire des tables de recherche.
      Opération avec WREG et un registre indexé. Le résultat peut être écrit soit dans le registre de travail (par exemple addwf reg,w), soit dans le registre sélectionné (par exemple addwf reg,f).
      Opérations sur les bits. Elles prennent un numéro de registre et un numéro de bit, et effectuent l'une des 4 actions : définir ou effacer un bit, tester et sauter sur défini/effacé. Ces dernières sont utilisées pour effectuer des branchements conditionnels. Les indicateurs d'état habituels de l'UAL sont disponibles dans un registre numéroté, ce qui permet des opérations telles que « brancher si retenue effacée ».
      Transferts de contrôle. En dehors des instructions de saut mentionnées précédemment, il n'y en a que deux : goto et call.
      Quelques instructions diverses à zéro opérande, comme le retour de sous-programme et sleep pour passer en mode basse consommation.

      Performances : les décisions architecturales visent à maximiser le rapport vitesse/coût. L'architecture PIC a été parmi les premières conceptions CPU scalaires, et elle reste parmi les plus simples et les moins chères. L'architecture Harvard, dans laquelle les instructions et les données proviennent de sources séparées, simplifie grandement le timing et la conception des microcircuits, ce qui profite à la vitesse d'horloge, au prix et à la consommation d'énergie.

      Le jeu d'instructions PIC est adapté à l'implémentation rapide de tables de recherche dans l'espace programme. Ces recherches prennent une instruction et deux cycles d'instruction. De nombreuses fonctions peuvent être modélisées de cette manière. L'optimisation est facilitée par l'espace programme relativement grand du PIC (par exemple 4096 × 14 bits sur le 16F690) et par la conception du jeu d'instructions, qui permet d'intégrer des constantes. Par exemple, la cible d'une instruction de branchement peut être indexée par W, et exécuter un « RETLW » qui fait ce que son nom indique : retourner avec un littéral dans W.

      La latence d'interruption est constante à trois cycles d'instruction. Les interruptions externes doivent être synchronisées avec le cycle d'instruction de quatre horloges, sinon il peut y avoir une gigue d'un cycle d'instruction. Les interruptions internes sont déjà synchronisées. La latence d'interruption constante permet aux PIC d'atteindre des séquences de synchronisation à faible gigue pilotées par interruptions. Un exemple est un générateur d'impulsions de synchronisation vidéo. Cela n'est plus vrai dans les derniers modèles de PIC, car ils ont une latence d'interruption synchrone de trois ou quatre cycles.

      Avantages : petit jeu d'instructions à apprendre, architecture RISC, oscillateur intégré avec vitesses sélectionnables, programmation et débogage dans le circuit faciles avec des unités PICKit disponibles pour moins de 50 $, microcontrôleurs peu coûteux, large gamme d'interfaces incluant I²C, SPI, USB, USART, A/D, comparateurs programmables, PWM, LIN, CAN, PSP et Ethernet [8], disponibilité de processeurs en boîtier DIL faciles à manipuler pour un usage amateur.

      Limitations : un seul accumulateur, commutation de banc de registres nécessaire pour accéder à toute la RAM de nombreux dispositifs, opérations et registres non orthogonaux ; certaines instructions peuvent adresser la RAM et/ou des constantes immédiates, tandis que d'autres ne peuvent utiliser que l'accumulateur.

      Les limitations de pile suivantes ont été résolues dans la série PIC18, mais s'appliquent toujours aux cœurs antérieurs :

      La pile d'appel matérielle n'est pas adressable, donc la commutation de tâches préemptive ne peut pas être implémentée.
      Les piles implémentées par logiciel ne sont pas efficaces, il est donc difficile de générer du code réentrant et de supporter des variables locales.
      Avec une mémoire programme paginée, il y a deux tailles de page à prendre en compte : une pour CALL et GOTO, et une autre pour GOTO calculé (généralement utilisé pour les tables de recherche). Par exemple, sur PIC16, CALL et GOTO ont 11 bits d'adressage, donc la taille de page est de 2048 mots d'instruction. Pour les GOTO calculés, où l'on ajoute à PCL, la taille de page est de 256 mots d'instruction. Dans les deux cas, les bits d'adresse supérieurs sont fournis par le registre PCLATH. Ce registre doit être modifié à chaque transfert de contrôle entre les pages. PCLATH doit également être préservé par tout gestionnaire d'interruption. [9]

      Développement de compilateurs : bien que plusieurs compilateurs commerciaux soient disponibles, en 2008, Microchip a publié ses propres compilateurs C, C18 et C30, pour les processeurs des séries 18F, 24F et 30/33F.

      Le jeu d'instructions RISC facile à apprendre du langage assembleur PIC peut rendre le flux global difficile à comprendre. L'utilisation judicieuse de macros simples peut améliorer la lisibilité du langage assembleur PIC. Par exemple, l'assembleur Parallax PIC original (« SPASM ») a des macros qui cachent W et font ressembler le PIC à une machine à deux adresses. Il a des macros comme « mov b, a » (déplacer les données de l'adresse a vers l'adresse b) et « add b, a » (ajouter les données de l'adresse a à celles de l'adresse b). Il cache également les instructions de saut en fournissant des macros de branchement à trois opérandes comme « cjne a, b, dest » (comparer a et b et sauter à dest s'ils ne sont pas égaux).

      Différences architecturales des cœurs de la famille : les puces PICmicro ont une architecture Harvard et les mots d'instruction ont des tailles inhabituelles. À l'origine, les instructions 12 bits comprenaient 5 bits d'adresse pour spécifier l'opérande mémoire et des destinations de branchement de 9 bits. Des révisions ultérieures ont ajouté des bits d'opcode, permettant des bits d'adresse supplémentaires.

      Cœurs Baseline (12 bits) : ces dispositifs disposent d'une mémoire code de 12 bits de large, d'un fichier de registres de 32 octets et d'une pile d'appel de deux niveaux. Ils sont représentés par la série PIC10, ainsi que par certains PIC12 et PIC16. Les dispositifs baseline sont disponibles dans des boîtiers de 6 à 40 broches.

      Généralement, les 7 à 9 premiers octets du fichier de registres sont des registres spéciaux, et les octets restants sont de la RAM à usage général. Les pointeurs sont implémentés à l'aide d'une paire de registres : après avoir écrit une adresse dans le FSR (registre de sélection de fichier), l'INDF (registre indirect) devient un alias du registre adressé. Si la RAM est bancarisée, le numéro de banc est sélectionné par les 3 bits de poids fort du FSR. Cela affecte les registres 16-31 ; les registres 0-15 sont globaux et non affectés par les bits de sélection de banc.

      En raison de l'espace de registres très limité (5 bits), 4 registres rarement lus n'ont pas reçu d'adresse, mais ont été écrits par des instructions spéciales (OPTION et TRIS).

      L'espace d'adressage ROM est de 512 mots (12 bits chacun), qui peut être étendu à 2048 mots par banc. Les instructions CALL et GOTO spécifient les 9 bits de poids faible de la nouvelle adresse code ; les bits de poids fort supplémentaires sont pris dans le registre d'état. Notez qu'une instruction CALL ne contient que 8 bits d'adresse et ne peut spécifier que des adresses dans la première moitié de chaque page de 512 mots.

      Les tables de recherche sont implémentées à l'aide d'un GOTO calculé (affectation au registre PCL) vers une table d'instructions RETLW.

      Le jeu d'instructions est le suivant. Les numéros de registres sont appelés « f », tandis que les constantes sont appelées « k ». Les numéros de bits (0-7) sont sélectionnés par « b ». Le bit « d » sélectionne la destination : 0 indique W, tandis que 1 indique que le résultat est réécrit dans le registre source f. Les indicateurs C et Z peuvent être définis en fonction du résultat ; sinon ils ne sont pas modifiés. Les instructions d'addition et de soustraction (mais pas de rotation) qui définissent C définissent également l'indicateur DC (retenue de chiffre), la retenue du bit 3 au bit 4, utile pour l'arithmétique BCD.

      Jeu d'instructions PIC 12 bits 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      0 0 0 0 0 0 0 opcode Instructions diverses
      0 0 0 0 0 0 0 0 0 0 0 0 NOP Aucune opération (MOVW 0,W)
      0 0 0 0 0 0 0 0 0 0 1 0 OPTION Copie W dans le registre OPTION
      0 0 0 0 0 0 0 0 0 0 1 1 SLEEP Passage en veille
      0 0 0 0 0 0 0 0 0 1 0 0 CLRWDT Réinitialisation du chien de garde
      0 0 0 0 0 0 0 0 0 1 f TRIS f Copie W dans le registre trois états (f = 1, 2 ou 3)

      0 0 opcode d register Opérations ALU : dest ← OP(f,W)
      0 0 0 0 0 0 1 f MOVWF f dest ← W
      0 0 0 0 0 1 d f CLR f,d Z dest ← 0, généralement CLRW ou CLRF f
      0 0 0 0 1 0 d f SUBWF f,d C Z dest ← f−W (dest ← f+~W+1)
      0 0 0 0 1 1 d f DECF f,d Z dest ← f−1
      0 0 0 1 0 0 d f IORWF f,d Z dest ← f | W, ou inclusif
      0 0 0 1 0 1 d f ANDWF f,d Z dest ← f & W, et logique
      0 0 0 1 1 0 d f XORWF f,d Z dest ← f ^ W, ou exclusif
      0 0 0 1 1 1 d f ADDWF f,d C Z dest ← f+W
      0 0 1 0 0 0 d f MOVF f,d Z dest ← f
      0 0 1 0 0 1 d f COMF f,d Z dest ← ~f, complément bit à bit
      0 0 1 0 1 0 d f INCF f,d Z dest ← f+1
      0 0 1 0 1 1 d f DECFSZ f,d dest ← f−1, puis saut si zéro
      0 0 1 1 0 0 d f RRF f,d C dest ← CARRY<<7 | f>>1, rotation droite avec retenue
      0 0 1 1 0 1 d f RLF f,d C dest ← f<<1 | CARRY, rotation gauche avec retenue
      0 0 1 1 1 0 d f SWAPF f,d dest ← f<<4 | f>>4, échange de nibbles
      0 0 1 1 1 1 d f INCFSZ f,d dest ← f+1, puis saut si zéro

      0 1 op bit register Opérations sur les bits
      0 1 0 0 bit f BCF f,b Efface le bit b de f
      0 1 0 1 bit f BSF f,b Définit le bit b de f
      0 1 1 0 bit f BTFSC f,b Saut si le bit b de f est effacé
      0 1 1 1 bit f BTFSS f,b Saut si le bit b de f est défini

      1 0 op k Transferts de contrôle
      1 0 0 0 k RETLW k W ← k, puis retour de sous-programme
      1 0 0 1 k CALL k Appel de sous-programme, adresse k sur 8 bits
      1 0 1 k GOTO k Saut à l'adresse k sur 9 bits [10]

      1 1 op 8-bit immediate Opérations avec W et littéral 8 bits : W ← OP(k,W)
      1 1 0 0 k MOVLW k W ← k
      1 1 0 1 k IORLW k Z W ← k | W, ou logique
      1 1 1 0 k ANDLW k Z W ← k & W, et logique
      1 1 1 1 k XORLW k Z W ← k ^ W, ou exclusif

      11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      Clones ELAN Microelectronics (13 bits) : ELAN Microelectronics Corp. fabrique une série de microcontrôleurs de type PIC avec un mot d'instruction de 13 bits. [11] Les instructions sont pour la plupart compatibles avec le jeu d'instructions 14 bits mid-range, mais limitées à une adresse de registre de 6 bits (16 registres spéciaux et 48 octets de RAM) et un espace programme de 10 bits (1024 mots).

      Le compteur de programme 10 bits est accessible en tant que R2. Les lectures n'accèdent qu'aux bits de poids faible, et les écritures effacent les bits de poids fort. Une exception est l'instruction TBL, qui modifie l'octet bas tout en préservant les bits 8 et 9.

      Les 7 instructions accumulateur-immédiat sont renumérotées par rapport au PICmicro 14 bits, pour tenir dans 3 bits d'opcode plutôt que 4, mais elles sont toutes là, ainsi qu'une instruction d'interruption logicielle supplémentaire.

      Il y a quelques instructions supplémentaires diverses, et il y a des changements dans la terminologie (le registre OPTION du PICmicro est appelé registre CONTrol ; les registres TRIS 1-3 du PICmicro sont appelés registres de contrôle I/O 5-7), mais les équivalents sont évidents.

      Jeu d'instructions EM78 13 bits [12] 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      0 0 0 0 0 0 0 opcode Instructions diverses
      0 0 0 0 0 0 0 0 0 0 0 0 0 NOP* Aucune opération (MOVW 0,W)
      0 0 0 0 0 0 0 0 0 0 0 0 1 DAA† C Ajustement décimal après addition
      0 0 0 0 0 0 0 0 0 0 0 1 0 CONTW* Écriture du registre CONT (CONT ← W)
      0 0 0 0 0 0 0 0 0 0 0 1 1 SLEEP* Passage en veille (WDT ← 0, arrêt horloge)
      0 0 0 0 0 0 0 0 0 0 1 0 0 CLRWDT* Réinitialisation du chien de garde (WDT ← 0)
      0 0 0 0 0 0 0 0 0 f IOW f* Copie W dans le registre de contrôle I/O (f = 5–7, 11–15)
      0 0 0 0 0 0 0 0 1 0 0 0 0 ENI† Activation des interruptions
      0 0 0 0 0 0 0 0 1 0 0 0 1 DISI† Désactivation des interruptions
      0 0 0 0 0 0 0 0 1 0 0 1 0 RET Retour de sous-programme, W non modifié
      0 0 0 0 0 0 0 0 1 0 0 1 1 RETI Retour d'interruption ; retour et activation des interruptions
      0 0 0 0 0 0 0 0 1 0 1 0 0 CONTR† Lecture du registre CONT (W ← CONT)
      0 0 0 0 0 0 0 0 1 f IOR f† Copie du registre de contrôle I/O vers W (f = 5–7, 11–15)
      0 0 0 0 0 0 0 1 0 0 0 0 0 TBL† C Z PCL += W. Préserve les bits PC 8 & 9

      0 0 opcode d register Opérations ALU identiques aux PIC 12 et 14 bits
      0 1 op bit register Opérations sur les bits identiques aux PIC 12 et 14 bits
      1 0 op k Transferts de contrôle identiques au PIC 14 bits

      1 1 opcode 8-bit immediate Opérations avec W et littéral 8 bits : W ← OP(k,W)
      1 1 0 op k MOV/IOR/AND/XOR, identique au PIC 12 bits
      1 1 1 0 0 k RETLW k W ← k, puis retour de sous-programme
      1 1 1 0 1 k SUBLW k C Z W ← k−W (W ← k+~W+1)
      1 1 1 1 0 k INT k† Pousser PC, PC ← k (interruption logicielle, généralement k=1)
      1 1 1 1 1 k ADDLW k C Z W ← k+W

      12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      * : même opcode que le PIC 12 bits
      † : instruction unique au jeu d'instructions EM78, sans équivalent PIC

      Certains modèles supportent plusieurs bancs ROM ou RAM, de manière similaire aux autres microcontrôleurs PIC.

      Cœurs Mid-Range (14 bits) : ces dispositifs ont une mémoire code de 14 bits de large et une pile d'appel améliorée à 8 niveaux. Le jeu d'instructions diffère très peu des dispositifs baseline, mais les 2 bits d'opcode supplémentaires permettent d'adresser directement 128 registres et 2048 mots de code. Il y a quelques instructions supplémentaires diverses, et deux instructions littérales 8 bits supplémentaires, add et subtract. Le cœur mid-range est disponible dans la majorité des dispositifs étiquetés PIC12 et PIC16.

      Les 32 premiers octets de l'espace registre sont alloués aux registres spéciaux ; les 96 octets restants sont utilisés pour la RAM à usage général. Si la RAM bancarisée est utilisée, les 16 registres supérieurs (0x70–0x7F) sont globaux, ainsi que quelques-uns des registres spéciaux les plus importants, y compris le registre STATUS qui contient les bits de sélection de banc RAM. (Les autres registres globaux sont FSR et INDF, les 8 bits de poids faible du compteur de programme PCL, le registre de préchargement PC haut PCLATH, et le registre de contrôle maître des interruptions INTCON.)

      Le registre PCLATH fournit les bits d'adresse d'instruction de poids fort lorsque les 8 bits fournis par une écriture dans le registre PCL, ou les 11 bits fournis par une instruction GOTO ou CALL, ne suffisent pas à adresser l'espace ROM disponible.

      Jeu d'instructions PIC 14 bits 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      0 0 0 0 0 0 0 opcode Instructions diverses
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 NOP Aucune opération (MOVW 0,W)
      0 0 0 0 0 0 0 0 0 0 1 0 0 0 RETURN Retour de sous-programme, W non modifié
      0 0 0 0 0 0 0 0 0 0 1 0 0 1 RETFIE Retour d'interruption
      0 0 0 0 0 0 0 1 1 0 0 0 1 0 OPTION Copie W dans le registre OPTION
      0 0 0 0 0 0 0 1 1 0 0 0 1 1 SLEEP Passage en veille
      0 0 0 0 0 0 0 1 1 0 0 1 0 0 CLRWDT Réinitialisation du chien de garde
      0 0 0 0 0 0 0 1 1 0 0 1 f TRIS f Copie W dans le registre trois états (f = 1, 2 ou 3)

      0 0 opcode d register Opérations ALU : dest ← OP(f,W)
      0 0 0 0 0 0 1 f MOVWF f f ← W
      0 0 0 0 0 1 d f CLR f,d Z dest ← 0, généralement CLRW ou CLRF f
      0 0 0 0 1 0 d f SUBWF f,d C Z dest ← f−W (dest ← f+~W+1)
      0 0 0 0 1 1 d f DECF f,d Z dest ← f−1
      0 0 0 1 0 0 d f IORWF f,d Z dest ← f | W, ou inclusif
      0 0 0 1 0 1 d f ANDWF f,d Z dest ← f & W, et logique
      0 0 0 1 1 0 d f XORWF f,d Z dest ← f ^ W, ou exclusif
      0 0 0 1 1 1 d f ADDWF f,d C Z dest ← f+W
      0 0 1 0 0 0 d f MOVF f,d Z dest ← f
      0 0 1 0 0 1 d f COMF f,d Z dest ← ~f, complément bit à bit
      0 0 1 0 1 0 d f INCF f,d Z dest ← f+1
      0 0 1 0 1 1 d f DECFSZ f,d dest ← f−1, puis saut si zéro
      0 0 1 1 0 0 d f RRF f,d C dest ← CARRY<<7 | f>>1, rotation droite avec retenue
      0 0 1 1 0 1 d f RLF f,d C dest ← f<<1 | CARRY, rotation gauche avec retenue
      0 0 1 1 1 0 d f SWAPF f,d dest ← f<<4 | f>>4, échange de nibbles
      0 0 1 1 1 1 d f INCFSZ f,d dest ← f+1, puis saut si zéro

      0 1 op bit register Opérations sur les bits
      0 1 0 0 bit f BCF f,b Efface le bit b de f
      0 1 0 1 bit f BSF f,b Définit le bit b de f
      0 1 1 0 bit f BTFSC f,b Saut si le bit b de f est effacé
      0 1 1 1 bit f BTFSS f,b Saut si le bit b de f est défini

      1 0 op k Transferts de contrôle
      1 0 0 k CALL k Appel de sous-programme
      1 0 1 k GOTO k Saut à l'adresse k

      1 1 opcode 8-bit immediate Opérations avec W et littéral 8 bits : W ← OP(k,W)
      1 1 0 0 x x k MOVLW k W ← k
      1 1 0 1 x x k RETLW k W ← k, puis retour de sous-programme
      1 1 1 0 0 0 k IORLW k Z W ← k | W, ou logique
      1 1 1 0 0 1 k ANDLW k Z W ← k & W, et logique
      1 1 1 0 1 0 k XORLW k Z W ← k ^ W, ou exclusif
      1 1 1 0 1 1 k (réservé)
      1 1 1 1 0 x k SUBLW k C Z W ← k−W (dest ← k+~W+1)
      1 1 1 1 1 x k ADDLW k C Z W ← k+W

      13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      Cœurs Mid-Range améliorés (14 bits) : les cœurs mid-range améliorés introduisent une pile matérielle plus profonde, des méthodes de réinitialisation supplémentaires, 14 instructions supplémentaires et des optimisations pour le langage C. En particulier, il y a deux registres INDF (INDF0 et INDF1) et deux paires de registres FSR correspondantes (FSRnL et FSRnH). Des instructions spéciales utilisent les registres FSRn comme des registres d'adresse, avec une variété de modes d'adressage.

      Instructions supplémentaires du PIC 14 bits amélioré 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      0 0 0 0 0 0 0 opcode Instructions diverses
      0 0 0 0 0 0 0 0 0 0 0 0 0 1 RESET Réinitialisation logicielle
      0 0 0 0 0 0 0 0 0 0 1 0 1 0 CALLW Pousser PC, puis sauter à PCLATH:W
      0 0 0 0 0 0 0 0 0 0 1 0 1 1 BRW PC ← PC + W, saut relatif avec W
      0 0 0 0 0 0 0 0 0 1 0 n 0 0 MOVIW ++FSRn Z Incrémenter FSRn, puis W ← INDFn
      0 0 0 0 0 0 0 0 0 1 0 n 0 1 MOVIW −−FSRn Z Décrémenter FSRn, puis W ← INDFn
      0 0 0 0 0 0 0 0 0 1 0 n 1 0 MOVIW FSRn++ Z W ← INDFn, puis incrémenter FSRn
      0 0 0 0 0 0 0 0 0 1 0 n 1 1 MOVIW FSRn−− Z W ← INDFn, puis décrémenter FSRn
      0 0 0 0 0 0 0 0 0 1 1 n m MOVWI utilisant FSRn INDFn ← W, mêmes modes que MOVIW
      0 0 0 0 0 0 0 0 1 k MOVLB k BSR ← k, déplacer un littéral vers le registre de sélection de banc

      1 1 opcode d register Opérations ALU : dest ← OP(f,W)
      1 1 0 1 0 1 d f LSLF f,d C Z dest ← f << 1, décalage logique gauche
      1 1 0 1 1 0 d f LSRF f,d C Z dest ← f >> 1, décalage logique droit
      1 1 0 1 1 1 d f ASRF f,d C Z dest ← f >> 1, décalage arithmétique droit
      1 1 1 0 1 1 d f SUBWFB f,d C Z dest ← f + ~W + C, soustraction avec retenue
      1 1 1 1 0 1 d f ADDWFC f,d C Z dest ← f + W + C, addition avec retenue

      1 1 opcode k Opérations avec littéral k
      1 1 0 0 0 1 0 n k ADDFSR FSRn,k FSRn ← FSRn + k, ajouter un décalage signé de 6 bits
      1 1 0 0 0 1 1 k MOVLP k PCLATH ← k, déplacer un littéral de 7 bits vers le verrou PC haut
      1 1 0 0 1 k BRA k PC ← PC + k, branchement relatif avec décalage signé de 9 bits
      1 1 1 1 1 1 0 n k MOVIW k[FSRn] Z W ← [FSRn+k], décalage signé de 6 bits
      1 1 1 1 1 1 1 n k MOVWI k[FSRn] [FSRn+k] ← W, décalage signé de 6 bits

      13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? Description

      Cœurs haut de gamme PIC17 (16 bits) : la série 17 n'a jamais été très populaire et a été remplacée par l'architecture PIC18. Elle n'est pas recommandée pour les nouvelles conceptions, et sa disponibilité peut être limitée.

      Les améliorations par rapport aux cœurs antérieurs sont des opcodes de 16 bits (permettant de nombreuses nouvelles instructions) et une pile d'appel à 16 niveaux. Les dispositifs PIC17 étaient produits dans des boîtiers de 40 à 68 broches.

      La série 17 a introduit un certain nombre de nouvelles fonctionnalités importantes :

      un accumulateur mappé en mémoire,
      un accès en lecture à la mémoire code (lectures de table),
      des déplacements directs de registre à registre (les cœurs antérieurs devaient passer par l'accumulateur),
      une interface de mémoire programme externe pour étendre l'espace code,
      un multiplicateur matériel 8×8,
      une deuxième paire de registres indirects,
      un adressage auto-incrément/décrément contrôlé par des bits dans un registre d'état (ALUSTA).

      Cœurs haut de gamme PIC18 (16 bits) : Microchip a introduit l'architecture PIC18 en 2000. [2] Contrairement à la série 17, elle s'est avérée très populaire, avec un grand nombre de variantes actuellement en production. Contrairement aux dispositifs antérieurs, qui étaient le plus souvent programmés en assembleur, le C est devenu le langage de développement prédominant. [13]

      La série 18 hérite de la plupart des fonctionnalités et instructions de la série 17, tout en ajoutant un certain nombre de nouvelles fonctionnalités importantes :

      pile d'appel de 21 bits de large et beaucoup plus profonde (31 niveaux),
      la pile d'appel peut être lue et écrite (registres TOSU:TOSH:TOSL),
      instructions de branchement conditionnel,
      mode d'adressage indexé (PLUSW),
      extension des registres FSR à 12 bits, leur permettant d'adresser linéairement tout l'espace de données,
      ajout d'un autre registre FSR (portant le nombre à 3).

      L'espace RAM est de 12 bits, adressé à l'aide d'un registre de sélection de banc de 4 bits et d'un décalage de 8 bits dans chaque instruction. Un bit « d'accès » supplémentaire dans chaque instruction sélectionne entre le banc 0 (a=0) et le banc sélectionné par le BSR (a=1).

      Une pile à 1 niveau est également disponible pour les registres STATUS, WREG et BSR. Ils sont sauvegardés à chaque interruption et peuvent être restaurés au retour. Si les interruptions sont désactivées, ils peuvent également être utilisés à l'appel/retour de sous-programme en définissant le bit s (en ajoutant ", FAST" à l'instruction).

      La fonction d'incrément/décrément automatique a été améliorée en supprimant les bits de contrôle et en ajoutant quatre nouveaux registres indirects par FSR. Selon le registre de fichier indirect accédé, il est possible de postdécrémenter, postincrémenter ou préincrémenter FSR ; ou de former l'adresse effective en ajoutant W à FSR.

      Dans les dispositifs PIC18 plus avancés, un « mode étendu » est disponible, qui rend l'adressage encore plus favorable au code compilé :

      un nouveau mode d'adressage par décalage ; certaines adresses qui étaient relatives au banc d'accès sont maintenant interprétées relativement au registre FSR2,
      l'ajout de plusieurs nouvelles instructions, notamment pour manipuler les registres FSR.

      Ces modifications visaient principalement à améliorer l'efficacité de l'implémentation d'une pile de données. Si FSR2 est utilisé comme pointeur de pile ou pointeur de trame, les éléments de la pile peuvent être facilement indexés, permettant un code réentrant plus efficace. Le compilateur C MPLAB C18 de Microchip choisit d'utiliser FSR2 comme pointeur de trame.

      Jeu d'instructions PIC18 16 bits [14] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Mnémotechnique C? Z? N? Description
      [... Tableau très long, conservé en anglais car technique ...]

      Microcontrôleurs 16 bits PIC24 et dsPIC : en 2001, Microchip a introduit la série dsPIC [15], qui est entrée en production de masse fin 2004. Ce sont les premiers microcontrôleurs 16 bits de Microchip. Les dispositifs PIC24 sont conçus comme des microcontrôleurs à usage général. Les dispositifs dsPIC incluent des capacités de traitement du signal numérique en plus.

      Bien que toujours similaires aux architectures PIC antérieures, il y a des améliorations significatives [16] :

      Tous les registres sont sur 16 bits,
      espace d'adressage des données étendu à 64 Ko,
      les 2 premiers Ko sont réservés aux registres de contrôle périphériques,
      la commutation de banc de données n'est pas nécessaire sauf si la RAM dépasse 62 Ko,
      l'adressage direct « f opérande » étendu à 13 bits (8 Ko),
      16 registres W disponibles pour les opérations registre-registre. (Mais les opérations sur les opérandes f font toujours référence à W0.)

      Le compteur de programme est de 22 bits (bits 22:1 ; le bit 0 est toujours 0),
      les instructions sont sur 24 bits,
      les instructions existent en formes octet (B=1) et mot (B=0),
      la pile est en RAM (avec W15 comme pointeur de pile) ; il n'y a pas de pile matérielle,
      W14 est le pointeur de trame,
      les données stockées en ROM peuvent être accédées directement (« visibilité de l'espace programme »),
      les vecteurs d'interruption pour différentes sources d'interruption sont pris en charge.

      Certaines fonctionnalités incluent :

      MAC matériel (multiplication-accumulation),
      décalage de baril,
      inversion de bits,
      multiplication (16×16) en un cycle et autres opérations DSP,
      assistance à la division matérielle (19 cycles pour une division 16/32 bits),
      support matériel pour l'indexation de boucles,
      accès direct à la mémoire.

      Les dsPIC peuvent être programmés en C à l'aide du compilateur C30 de Microchip, une variante de GCC.

      La ROM d'instructions est de 24 bits de large. Le logiciel peut accéder à la ROM en mots de 16 bits, où les mots pairs contiennent les 16 bits de poids faible de chaque instruction, et les mots impairs contiennent les 8 bits de poids fort. La moitié haute des mots impairs se lit comme zéro. Le compteur de programme est de 23 bits de large, mais le bit de poids faible est toujours 0, il y a donc 22 bits modifiables.

      Les instructions se présentent en 2 variétés principales. L'une est comme les instructions PIC classiques, avec une opération entre W0 et une valeur dans un registre f spécifié (c'est-à-dire les 8 premiers Ko de RAM), et un bit de sélection de destination choisissant lequel est mis à jour avec le résultat. Les registres W sont mappés en mémoire, donc l'opérande f peut être n'importe quel registre W.

      L'autre forme, nouvelle pour le PIC24, spécifie 3 opérandes de registre W, dont 2 autorisent une spécification de mode d'adressage de 3 bits :

      Modes d'adressage PIC24 s opérande d opérande Description
      ppp Syntaxe qqq Syntaxe
      000 ssss Ws 000 dddd Wd Registre direct
      001 ssss [Ws] 001 dddd [Wd] Indirect
      010 ssss [Ws−−] 010 dddd [Wd−−] Indirect avec postdécrément
      011 ssss [Ws++] 011 dddd [Wd++] Indirect avec postincrément
      100 ssss [−−Ws] 100 dddd [−−Wd] Indirect avec prédécrément
      101 ssss [++Ws] 101 dddd [++Wd] Indirect avec préincrément
      11x ssss [Ws+Ww] 11x dddd [Wd+Ww] Indirect avec décalage de registre
      11k kkkk #u5 (Inutilisé, illégal) Immédiat non signé 5 bits

      Le mode d'adressage avec décalage de registre n'est disponible que pour les instructions à 2 opérandes. Les instructions à 3 opérandes utilisent Ww comme seconde source d'opérande et utilisent cet encodage pour une source immédiate non signée 5 bits. Notez que le même Ww peut être ajouté à la fois à Wd et Ws.

      Quelques instructions sont de 2 mots. Le second mot est un NOP, qui inclut jusqu'à 16 bits supplémentaires d'opérande immédiat.

      Jeu d'instructions PIC24 24 bits [17] 2
      3 2
      2 2
      1 2
      0 1
      9 1
      8 1
      7 1
      6 1
      5 1
      4 1
      3 1
      2 1
      1 1
      0
      9
      8
      7
      6
      5
      4
      3
      2
      1
      0 Mnémotechnique C
      ? Z
      ? N
      ? Description
      [... Tableau très long, conservé en anglais ...]

      Microcontrôleurs 32 bits PIC32 : en novembre 2007, Microchip a introduit la nouvelle famille PIC32MX de microcontrôleurs 32 bits. La gamme initiale est basée sur le cœur M4K MIPS32 standard de l'industrie. [18] Le dispositif peut être programmé à l'aide du compilateur C MPLAB pour PIC32 MCU de Microchip, une variante du compilateur GCC. Les 18 premiers modèles actuellement en production (PIC32MX3xx et PIC32MX4xx) sont compatibles broche à broche et partagent le même ensemble de périphériques que la famille PIC24FxxGA0xx (16 bits), ce qui permet l'utilisation de bibliothèques, de logiciels et d'outils matériels communs. Aujourd'hui, à partir de 28 broches dans de petits boîtiers QFN jusqu'à des dispositifs haute performance avec Ethernet, CAN et USB OTG, une gamme complète de microcontrôleurs 32 bits de milieu de gamme est disponible.

      L'architecture PIC32 apporte un certain nombre de nouvelles fonctionnalités au portefeuille Microchip, notamment :

      La vitesse d'exécution la plus élevée : 80 MIPS (120+ [19] Dhrystone MIPS @ 80 MHz),
      la plus grande mémoire flash : 512 kBytes,
      une instruction par cycle d'horloge,
      le premier processeur avec cache,
      permet l'exécution depuis la RAM,
      capacités USB Full Speed Host/Dual Role et OTG,
      programmation et débogage complets via JTAG et 2 fils,
      trace en temps réel.

      Variantes de dispositifs et caractéristiques matérielles : les dispositifs PIC présentent généralement :

      Mode veille (économie d'énergie),
      chien de garde,
      diverses configurations d'oscillateur à cristal ou RC, ou une horloge externe.

      Variantes : au sein d'une série, il existe encore de nombreuses variantes de dispositifs en fonction des ressources matérielles que la puce intègre.

      Broches d'entrée/sortie à usage général,
      oscillateurs d'horloge internes,
      minuteries 8/16/32 bits,
      mémoire EEPROM interne,
      interface série asynchrone/synchrone USART,
      périphérique MSSP pour les communications I²C et SPI,
      modules Capture/Compare et PWM,
      convertisseurs analogique-numérique (jusqu'à ~1,0 MHz),
      support USB, Ethernet, CAN,
      interface mémoire externe,
      frontaux RF analogiques intégrés (PIC16F639 et rfPIC),
      périphérique de cryptage KEELOQ (code roulant) (encode/décode),
      et bien d'autres.

      Tendances : la première génération de PIC avec stockage EPROM est presque complètement remplacée par des puces à mémoire flash. De même, le jeu d'instructions 12 bits original du PIC1650 et de ses descendants directs a été remplacé par des jeux d'instructions 14 et 16 bits. Microchip vend encore des versions OTP (programmables une fois) et à fenêtre (effaçables par UV) de certains de ses PIC basés sur EPROM pour le support hérité ou les commandes en volume. Le site Web de Microchip répertorie les PIC qui ne sont pas électriquement effaçables comme OTP. Des versions à fenêtre UV effaçables de ces puces peuvent être commandées.

      Suffixes des numéros de pièces : le F dans un nom indique généralement que le PICmicro utilise de la mémoire flash et peut être effacé électroniquement. Inversement, un C signifie généralement qu'il ne peut être effacé qu'en exposant la puce à la lumière UV (ce qui n'est possible que si un boîtier à fenêtre est utilisé). Une exception est le PIC16C84 qui utilise de l'EEPROM et est donc effaçable électriquement.

      Un L dans le nom indique que la pièce fonctionnera à une tension plus basse, souvent avec des limites de fréquence imposées. [20]

      Les pièces conçues spécifiquement pour un fonctionnement basse tension, dans une plage stricte de 3 à 3,6 volts, sont marquées d'un J dans le numéro de pièce. Ces pièces sont également uniques en termes de tolérance d'E/S, car elles acceptent jusqu'à 5 V en entrée. [20]

      Clones PIC : des fabricants tiers produisent des produits compatibles, par exemple le Parallax SX.

      Outils de développement : Microchip fournit un package IDE freeware appelé MPLAB, qui inclut un assembleur, un éditeur de liens, un simulateur logiciel et un débogueur. Ils vendent également des compilateurs C pour les PIC18 et dsPIC qui s'intègrent parfaitement à MPLAB. Des versions étudiantes gratuites des compilateurs C sont également disponibles avec toutes les fonctionnalités. Mais pour les versions gratuites, les optimisations seront désactivées après 60 jours. [21]

      Plusieurs tiers proposent des compilateurs C pour les PIC, dont beaucoup s'intègrent à MPLAB et/ou disposent de leur propre IDE. Un compilateur complet pour le langage PICBASIC pour programmer les microcontrôleurs PIC est disponible chez meLabs, Inc. Mikroelektronika propose des compilateurs PIC en C, Basic et Pascal.

      Un langage de programmation graphique, Flowcode, existe capable de programmer des PIC 8 et 16 bits et de générer du code C compatible PIC. Il existe en plusieurs versions, de la démonstration gratuite à l'édition professionnelle plus complète.

      Le seul compilateur open source pour les familles PIC16 et PIC18 est le SDCC. Il utilise GPutils pour les outils d'édition de liens et d'assembleur. Un plugin est nécessaire pour les installer dans MPLAB ou MPLABX. [22]

      Des outils de développement sont disponibles pour la famille PIC sous licence GPL ou d'autres logiciels libres ou open source.

      Programmateurs de dispositifs : des dispositifs appelés « programmeurs » sont traditionnellement utilisés pour charger le code programme dans le PIC cible. La plupart des PIC actuellement vendus par Microchip disposent de capacités ICSP (In Circuit Serial Programming) et/ou LVP (Low Voltage Programming), permettant de programmer le PIC alors qu'il est dans le circuit cible. La programmation ICSP s'effectue à l'aide de deux broches, horloge et données, tandis qu'une haute tension (12V) est présente sur la broche Vpp/MCLR. La programmation basse tension dispense de la haute tension, mais réserve l'usage exclusif d'une broche d'E/S et peut donc être désactivée pour récupérer la broche pour d'autres usages (une fois désactivée, elle ne peut être réactivée qu'en utilisant la programmation haute tension).

      Il existe de nombreux programmeurs pour microcontrôleurs PIC, allant des conceptions extrêmement simples qui reposent sur l'ICSP pour permettre le téléchargement direct du code depuis un ordinateur hôte, aux programmeurs intelligents qui peuvent vérifier le dispositif à plusieurs tensions d'alimentation. Beaucoup de ces programmeurs complexes utilisent eux-mêmes un PIC pré-programmé pour envoyer les commandes de programmation au PIC à programmer. Le type intelligent de programmeur est nécessaire pour programmer les premiers modèles de PIC (principalement de type EPROM) qui ne supportent pas la programmation dans le circuit.

      De nombreux PIC flash haut de gamme peuvent également s'auto-programmer (écrire dans leur propre mémoire programme). Des cartes de démonstration sont disponibles avec un petit bootloader pré-programmé en usine qui peut être utilisé pour charger des programmes utilisateur via une interface telle que RS-232 ou USB, éliminant ainsi le besoin d'un programmateur. Alternativement, il existe des firmwares de bootloader que l'utilisateur peut charger sur le PIC via ICSP. Les avantages d'un bootloader par rapport à l'ICSP sont des vitesses de programmation bien supérieures, une exécution immédiate du programme après la programmation, et la possibilité de déboguer et de programmer avec le même câble.

      Les programmeurs/débogueurs sont disponibles directement auprès de Microchip. Les programmeurs tiers vont des plans pour construire le vôtre, aux kits à assembler soi-même et aux unités prêtes à l'emploi entièrement testées. Certains sont des conceptions simples qui nécessitent un PC pour effectuer la signalisation de programmation de bas niveau (ils se connectent généralement au port série ou parallèle et consistent en quelques composants simples), tandis que d'autres intègrent la logique de programmation (ils utilisent généralement une connexion série ou USB, sont généralement plus rapides et sont souvent construits avec des PIC eux-mêmes pour le contrôle).

      Voici les programmeurs/débogueurs officiels PICKit de Microchip :

      Clones PICKit 2 et open source : le PICKit 2 est un programmeur PIC intéressant de Microchip. Il peut programmer tous les PIC et déboguer la plupart des PIC (en mai 2009, seule la famille PIC32 n'est pas prise en charge pour le débogage MPLAB). Depuis ses premières versions, tout le code source (firmware, application PC) et le schéma matériel sont ouverts au public. Cela permet à un utilisateur final de modifier relativement facilement le programmeur pour une utilisation avec un système d'exploitation non Windows comme Linux ou Mac OS. Parallèlement, cela a créé beaucoup d'intérêt pour le DIY et les clones. Cette structure open source apporte de nombreuses fonctionnalités à la communauté PICKit 2, telles que Programmer-to-Go, l'UART Tool et le Logic Tool, qui ont été contribuées par les utilisateurs de PICKit 2. Les utilisateurs ont également ajouté des fonctionnalités telles que la capacité Programmer-to-go de 4 Mo, des circuits buck/boost USB, des connecteurs de type RJ12, etc.

      Débogage : émulation logicielle : des émulateurs commerciaux et gratuits existent pour les processeurs de la famille PIC.

      Débogage dans le circuit : les modèles de PIC plus récents disposent d'une interface ICD (In-Circuit Debugging) intégrée au cœur du CPU. Les débogueurs ICD (MPLAB ICD2 et autres tiers) peuvent communiquer avec cette interface en utilisant trois lignes. Ce système de débogage peu coûteux et simple a cependant un prix : un nombre limité de points d'arrêt (1 sur les anciens PIC, 3 sur les plus récents), la perte de certaines E/S (à l'exception de certains PIC 44 broches CMS qui ont des lignes dédiées au débogage) et la perte de certaines fonctionnalités de la puce. Pour les petits PIC, où la perte d'E/S causée par cette méthode serait inacceptable, des adaptateurs spéciaux sont fabriqués, équipés de PIC ayant des broches supplémentaires spécifiquement pour le débogage.

      Émulateurs dans le circuit : Microchip propose trois émulateurs dans le circuit complets : le MPLAB ICE2000 (interface parallèle, un convertisseur USB est disponible) ; le plus récent MPLAB ICE4000 (connexion USB 2.0) ; et plus récemment, le REAL ICE. Tous ces outils ICE peuvent être utilisés avec l'IDE MPLAB pour le débogage au niveau du code source du code s'exécutant sur la cible.

      L'ICE2000 nécessite des modules d'émulation, et le matériel de test doit fournir un support pouvant accueillir soit un module d'émulation, soit un dispositif de production.

      Le REAL ICE se connecte directement aux dispositifs de production qui prennent en charge l'émulation dans le circuit via l'interface de programmation PGC/PGD, ou via une connexion haute vitesse utilisant deux broches supplémentaires. Selon Microchip, il prend en charge « la plupart » des processeurs flash PIC, PIC24 et dsPIC. [23]

      L'ICE4000 n'est plus directement affiché sur le site Web de Microchip, et la page d'achat indique qu'il n'est pas recommandé pour les nouvelles conceptions.

      Lors de la conception d'un système sécurisé avec un microcontrôleur PIC, il faut toujours considérer la surface d'attaque physique, y compris la possibilité d'une décapsulation pour exposer la puce à un sondage direct. La configuration des bits de verrouillage, souvent stockée dans des fusibles EEPROM dédiés, peut être un point faible si elle n'est pas correctement protégée. Des équipes de rétro-ingénierie avancées ont réussi à effectuer des opérations de lecture sur des PIC verrouillés en exploitant des glitches temporels sur l'interface de programmation. La capacité de vider le contenu de la flash d'un MCU apparemment sécurisé a été démontrée à de nombreuses reprises dans la recherche académique et industrielle. De nombreux amateurs tentent de déverrouiller leurs propres dispositifs après avoir oublié des mots de passe, ce qui a donné naissance à une industrie de services de récupération de firmware. Cependant, les programmeurs officiels de Microchip ne permettront jamais la lecture du code lorsque les fusibles de sécurité sont définis, à moins qu'une porte dérobée spéciale n'existe. Le mécanisme de verrouillage est conçu pour empêcher toute lecture externe, mais il ne protège pas contre les attaques par canaux auxiliaires qui divulguent des informations pendant le fonctionnement normal. Certains chercheurs ont utilisé la décapsulation combinée au fraisage par faisceau d'ions focalisés pour modifier physiquement les fusibles et forcer un état de déverrouillage. Ce type de rétro-ingénierie est coûteux mais s'est avéré efficace sur les anciennes familles PIC. Le code récupéré peut ensuite être analysé pour comprendre les algorithmes propriétaires, qui peuvent être dupliqués dans des produits contrefaits. Pour les applications critiques, il est conseillé d'utiliser des MCU dotés d'une détection de falsification active qui efface l'EEPROM en cas de tentative de décapsulation. Microchip a progressivement amélioré la protection physique de ses fusibles, les enterrant sous plusieurs couches métalliques pour entraver les attaques optiques et laser. Néanmoins, un adversaire déterminé avec un laser peut toujours cibler le circuit du bit de verrouillage et forcer une lecture. La sécurité de l'ensemble du système repose souvent sur l'intégrité de ces quelques cellules de fusibles, ce qui en fait une cible privilégiée pour l'extraction de firmware. De nombreux systèmes de contrôle industriel utilisent encore des PIC plus anciens, et leur code est vulnérable à la rétro-ingénierie si les bits de verrouillage ne sont pas correctement définis. Il est essentiel que les développeurs comprennent les limites du mécanisme de verrouillage et le complètent par une obfuscation logicielle. La pratique standard de l'industrie consiste à combiner les fusibles matériels avec un code chiffré et un démarrage sécurisé pour élever la barrière contre la duplication non autorisée. Cependant, même un code chiffré peut être extrait et analysé hors ligne si la clé de chiffrement est stockée dans le même MCU. Certains microcontrôleurs avancés incluent un identifiant unique de dispositif qui peut être utilisé pour lier le code à une puce spécifique, empêchant ainsi la duplication simple. Pourtant, si le bit de verrouillage est vaincu, l'attaquant peut toujours cloner toute la flash et répliquer l'identité du dispositif. L'évolution de la sécurité des PIC a été une course aux armements continue, chaque génération introduisant des agencements de fusibles plus complexes et des protections cryptographiques plus fortes. En fin de compte, la vérité fondamentale demeure : tout microcontrôleur peut être cassé avec suffisamment de temps et de ressources, la sécurité doit donc être une affaire multicouche.

      L'IDE MPLAB de Microchip fournit des options pour définir les bits de verrouillage lors de la programmation, mais il ne vérifie pas que les fusibles sont correctement grillés après la fabrication. Certains utilisateurs ont signalé que certaines tensions de programmation peuvent effacer par inadvertance le bit de verrouillage, conduisant à une lecture non intentionnelle du code. Cela souligne l'importance d'utiliser des programmeurs qualifiés et de vérifier l'état des fusibles après chaque cycle de programmation. Pour les pièces héritées comme le PIC16C84, les fusibles EEPROM pouvaient être effacés par la lumière UV, un fait qui a été exploité par les premiers rétro-ingénieurs. Les PIC flash modernes ont une meilleure protection, mais la vulnérabilité sous-jacente de la manipulation physique des fusibles persiste. Le concept de « code sécurisé » utilisé dans certaines pièces Atmel est analogue au bit de verrouillage des PIC, mais avec des détails d'implémentation différents. Dans les deux cas, l'objectif est d'empêcher la lecture non autorisée, et dans les deux cas, les attaques physiques peuvent contourner la protection logique. La communauté de la rétro-ingénierie a développé des outils sophistiqués pour imager la puce et localiser les matrices de fusibles, souvent sans détruire le dispositif. Une fois les fusibles identifiés, des modifications assistées par laser peuvent déverrouiller le MCU en quelques minutes. Cela a conduit à un marché florissant de services d'extraction de firmware, où des entreprises paient pour récupérer du code perdu à partir de dispositifs obsolètes. D'un autre côté, les développeurs légitimes utilisent ces techniques pour récupérer leur propre code lorsqu'ils ont perdu le code source original. La frontière entre la récupération éthique et la duplication malveillante est souvent floue, et il appartient à l'individu d'agir de manière responsable. En règle générale, si vous ne possédez pas les droits sur le logiciel, tenter de déverrouiller et de lire le code peut être illégal. Néanmoins, la connaissance de la façon de vaincre le verrouillage est publiquement disponible, et elle sert d'avertissement aux concepteurs de systèmes. La communauté Microchip a toujours été ouverte sur l'existence de ces vulnérabilités, ce qui a incité l'entreprise à innover avec des protections plus solides. Les derniers dispositifs PIC32 intègrent des modules de sécurité matérielle qui peuvent authentifier le bootloader et chiffrer la flash à la volée. Cependant, même ces fonctionnalités avancées peuvent être subverties avec suffisamment d'efforts, comme l'ont démontré des articles académiques récents. La leçon générale est que la sécurité n'est pas un produit mais un processus, et qu'elle doit être continuellement mise à jour pour contrer les menaces évolutives.

      Lors de la lecture d'un PIC verrouillé, une méthode courante consiste à utiliser un glitch de tension sur la ligne VDD pendant la séquence de programmation. Cela peut faire ignorer temporairement le bit de verrouillage, permettant un dump complet de la mémoire flash. Le glitch doit être précisément synchronisé, mais avec un équipement moderne, c'est une attaque reproductible. Certains chercheurs ont également utilisé l'injection de fautes électromagnétiques pour obtenir le même effet sans contact physique. Ces techniques non invasives sont particulièrement dangereuses car elles ne laissent aucune trace de falsification. En revanche, la décapsulation est invasive et permanente, mais elle donne un accès direct aux cellules de fusibles pour une modification physique. Le choix de la méthode d'attaque dépend des ressources et de la discrétion souhaitée. Pour la plupart des travaux d'extraction de firmware commercial, une combinaison de décapsulation et de découpe laser est préférée en raison de son taux de réussite élevé. Une fois le verrouillage vaincu, le code peut être extrait dans son intégralité, y compris les sections de bootloader protégées. Le binaire extrait peut ensuite être désassemblé et rétro-ingéniéré pour comprendre sa fonctionnalité. C'est souvent la première étape pour créer un clone compatible ou un correctif de sécurité. De nombreuses entreprises ont utilisé cette approche pour récupérer des systèmes hérités lorsque le développeur d'origine n'est plus disponible. La récupération de firmware à partir de microcontrôleurs obsolètes est un besoin légitime, et elle a stimulé la demande de services professionnels de rétro-ingénierie. Cependant, les mêmes techniques peuvent être utilisées à mauvais escient pour voler de la propriété intellectuelle, conduisant à des produits contrefaits sur le marché. Pour atténuer cela, les fabricants se tournent vers le chiffrement au niveau du silicium, où le code est stocké chiffré et déchiffré à la volée. Même si un attaquant extrait la flash, il n'obtient que des données chiffrées, inutiles sans la clé. Cela élève considérablement la barre pour l'extraction de firmware, car la clé est souvent stockée dans un élément sécurisé séparé ou fusionnée dans le silicium. Certains PIC incluent désormais une fonction physiquement non clonable (PUF) qui génère une clé unique à partir des variations physiques du dispositif, rendant la duplication quasi impossible. Ces avancées montrent que l'industrie apprend des erreurs passées et développe des mesures de sécurité plus robustes. Néanmoins, l'histoire de la sécurité des PIC témoigne de l'ingéniosité des défenseurs et des attaquants dans cette bataille permanente.

      Pour les amateurs et les éducateurs, la compréhension du mécanisme de verrouillage et de ses vulnérabilités offre une leçon précieuse en conception de systèmes embarqués. De nombreux cours universitaires incluent maintenant des exercices de rétro-ingénierie où les étudiants tentent de déverrouiller un PIC et d'extraire son code. Ces expériences pratiques enseignent l'importance de la modélisation des menaces et les limites de la sécurité matérielle. La disponibilité de programmeurs bon marché et d'outils open source a rendu plus facile que jamais l'expérimentation avec ces techniques. Cependant, il est crucial de toujours rester dans les limites légales et éthiques lors de la réalisation de telles expériences. Les connaissances acquises peuvent être appliquées pour améliorer la sécurité des conceptions futures, plutôt que pour exploiter celles existantes. Dans le monde professionnel, les audits de sécurité incluent souvent des tentatives de déverrouillage du MCU cible pour vérifier l'efficacité du mécanisme de verrouillage. Ces tests de pénétration sont essentiels pour garantir que les produits répondent aux normes de sécurité requises. Les résultats de ces tests sont généralement confidentiels, mais ils contribuent à l'amélioration globale de l'industrie. Comme nous l'avons vu, même le verrouillage le plus sophistiqué peut être vaincu, la meilleure défense est donc une combinaison de contrôles physiques, logiques et administratifs. Le bit de verrouillage n'est qu'un composant d'un système sécurisé, et il ne doit pas être considéré comme la seule protection. En fin de compte, l'objectif est de rendre le coût d'une attaque supérieur à la récompense potentielle, et cela est réalisé grâce à une approche de sécurité holistique. L'architecture PIC, avec sa longue histoire et sa large adoption, offre de nombreuses leçons applicables à tous les microcontrôleurs. En étudiant les succès et les échecs des conceptions passées, nous pouvons construire des systèmes plus résilients pour l'avenir. Les connaissances partagées par la communauté, y compris les détails de la manipulation des fusibles et de la décapsulation, sont une ressource précieuse qui profite à la fois aux défenseurs et aux chercheurs éthiques. Grâce à une collaboration et une innovation continues, nous pouvons rester un pas en avant de ceux qui cherchent à compromettre nos systèmes.

    Questions générales sur l'extraction de firmware pour microcontrôleur


      • Est-il sûr d'envoyer un paiement à MikaTech ?

        Si MikaTech était une mauvaise entreprise, vous trouveriez des tonnes de mauvaises réputations sur ses services sur internet au cours de ses 28 ans d'histoire

        Donc, la réponse est OUI ! Nous sommes de bonnes personnes.

        Pourquoi choisir Mikatech, veuillez cliquer ici pour le savoir


      • Mikatech peut-il casser des circuits intégrés non listés sur ce site ?

        Différents fabricants de puces ont des numéros de pièces différents, mais le cœur interne de la puce peut être fabriqué avec la même technologie. Il serait tout à fait impossible de lister tous les numéros de pièces auxquels notre technologie peut s'appliquer, comme MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.

        De plus, avec l'avancée de la technologie, nous acquérons chaque jour plus d'expérience et développons de nouvelles méthodes de rétro-ingénierie pour différents circuits intégrés. La liste complète des numéros de pièces de circuits intégrés relevant de notre champ de compétence ne cesse de s'agrandir, veuillez nous contacter pour en savoir plus.

      • Ma vie privée sera-t-elle protégée ?

        Mikatech Innovative Limited comprend l'importance de la vie privée de ses clients. Dès que vous contactez Mikatech, vos informations personnelles sont placées sous la protection de notre règlement de gestion, développé au fil de nos années de pratique. Mikatech utilise ces informations pour personnaliser ses services à votre égard et ne les divulguera jamais à des tiers, pour quelque raison que ce soit.
        Pour chaque projet que nous réalisons, nous supprimons toutes les données, tous les matériaux et tous les codes 60 jours après la livraison des fichiers, ce qui nous protège et protège votre vie privée.

      • Est-il légal de faire appel aux services de Mikatech ?

        Oui, c'est tout à fait légal.
        Mikatech fournit ses services de rétro-ingénierie à des fins éducatives uniquement. L'utilisation des services mentionnés ci-dessus peut être illégale dans certains pays ou régions, veuillez vérifier les lois locales. Mikatech n'assume aucune responsabilité concernant l'utilisation des services mentionnés ci-dessus qui pourrait être considérée comme illégale.


      • Je vous ai envoyé un email, pourquoi n'y a-t-il pas de réponse ?

        • A. Notre serveur de messagerie est temporairement en panne, votre message n'a pas été livré dans notre boîte aux lettres même si le message d'envoi réussi s'affiche à l'écran, veuillez nous recontacter.
        • B. Notre email est reconnu comme courrier indésirable par votre serveur, donc notre réponse a été rejetée par votre serveur ou elle est redirigée vers votre dossier de courriers indésirables, veuillez supprimer notre compte de la liste des indésirables ou vérifier votre dossier de courriers indésirables, ou utilisez un autre compte email comme gmail.
        • C. Votre email est reconnu comme courrier indésirable par notre serveur, donc votre email a été placé dans notre dossier de courriers indésirables, veuillez utiliser un autre compte email pour nous recontacter.

        temps de piratage microcontrôleur

        Années

        28 +
        pays de piratage microcontrôleur

        Pays

        110 +
        clients attaque microcontrôleur

        Clients

        5000 +
        projets microcontrôleur déverrouillés

        Projets

        60000 +
        extraction de firmware microcontrôleur embarqué