Skyduino:~#
Articles
test

[Test] Chipkit Max32

Salut à tous !

Aujourd’hui je vais vous parler de la carte « Chipkit Max32 »

La carte « Chipkit Max32 » est une plateforme de développement au « form factor » arduino mega.

Basé sur un PIC32, le PIC32MX795F512 fabriqué par Microchip, cette carte fonctionne sur une architecture 32bit à une vitesse de 80Mhz (un quartz de 8MHz plus une PLL x10 interne).


D’un prix moyen d’environ 45€ c’est une carte relativement bon marché.

Le packaging, c’est un point important dans le mesure ou c’est la premier chose que l’ont voit en recevant le produit !
Dans le cas de la « Chipkit Max32 » le packaging reprend celui des carte arduino avec une boite en carton plié au couleur de digilent, blanc et rouge.

On remarquera le soin tout particulier qui a été pris pour éviter les problèmes de transport et les ESD (décharge électrostatiques) avec le morceau de mousse anti-ESD expansé placé au fond de la boite, un petit détail intéressant qu’on ne retrouve pas dans le packaging arduino classique.

Comme pour l’arduino classique, les cartes chipkit sont sous licence creative common, les schémas ainsi que le logiciel étant disponible au téléchargement sur le site de digilent.

La carte « Chipkit Max32 » comme beaucoup de carte du commerce est réalisé à partir de composant CMS, si ce n’est les diverses connecteurs et jumpeurs, aucun composants traversant n’as était utilisé pour sa fabrication, exit donc la possibilité d’une réparation maison en cas de probléme.

Le pcb est on ne peut plus classique (enfin presque), réalisé en quatre couches avec une protection en vernis rouge contrastant avec le skill-screen blanc.
Le angles droit des pistes ont pour la plupart été cassé à 45° pour éviter tout probléme de fabrication, on remarquera cependant l’absence de blindage sur l’arrière de la carte pouvant laissé supposé de possible probléme d’interférences.

La zone d’alimentation a été routé de manière relativement soigné avec des pistes larges, pour permettre au régulateur 1A de faire son bouleau.

Les connecteurs sont tous au format SIL (single in line) cependant la carte reprend l’espacement non standard des cartes arduino classique.
De part sa forme « mega » une double rangé de connecteurs au formats standard ne sont pas prévue par manque de place.

Passons maintenant au chose plus intéressante caractéristiques techniques !

Comme je l’ai dit précédemment la « Chipkit Max32 » est basé sur un PIC32 de microchip et de ce fait propose les spécifications suivante :
MCU Core

80MHz, 1.56 DMIPS/MHz, 32-bit MIPS M4K® Core
USB 2.0 On-The-Go Peripheral with integrated PHY
10/100 Ethernet MAC with MII/RMII Interfaces
2 x CAN2.0b modules with 1024 buffers
8 Dedicated DMA Channels for USB OTG, Ethernet, and CAN
5 Stage pipeline, Harvard architecture
MIPS16e mode for up to 40% smaller code size
Single cycle multiply and hardware divide unit
32 x 32-bit Core Registers
32 x 32-bit Shadow Registers
Fast context switch and interrupt response

MCU System Features

512K Flash (plus 12K boot Flash)
128K RAM (can execute from RAM)
8 Channel General Hardware DMA Controller
Flash prefetch module with 256 Byte cache
Lock instructions or data in cache for fast access
Programmable vector interrupt controller

Analog Features

Fast and Accurate 16 channel 10-bit ADC,
Max 1 Mega sample per second at +/- 1LSB, conversion available during SLEEP & IDLE

Power Management Modes

RUN, IDLE, and SLEEP modes
Multiple switchable clock modes for each power mode, enables optimum power settings

Other MCU Features

Fail-Safe Clock Monitor - allows safe shutdown if clock fails
2 Internal oscillators (8MHz & 31KHz)
Hardware RTCC (Real-Time Clock and Calendar with Alarms)
Watchdog Timer with separate RC oscillator
Pin compatible with 16-bit PIC® MCUs
Serial Communication Modules allow flexible UART/SPI/I2C™ configuration

Impressionnant n’est ce pas ?
Peut être un peut trop !

La carte « Chipkit Max32 » n’utilise pas sont port usb hardware pour l’upload des programmes mais une puce FTDI FT232 classique comme sur les anciennes carte arduino. Pourquoi ? Je ne sais pas !
Un avantage cependant les drivers sont windows sont automatique reconnu, sous linux il sont même intégré de base au kernel.

Parmi la liste totalement hallucinante de périphérique que comporte le PIC32 seulement quelque un sont réellement utilisable avec la « Chipkit Max32 ».

Ainsi l’usb « in the go », l’usb host/device et l’ethernet ne sont possible quand n’utilisant une shield spécial de digilent disponible ici.
Cette même shield permet d’utiliser l’horloge RTC du PIC32, sans elle pas de RTC possible !
Elle permet aussi d’avoir accée à une petit mémoire EEprom I2C, car de base le PIC32 ne possède aucune mémoire EEprom !

Le convertisseur analogique/numérique du PIC32 et 10x plus rapide que celui d’une carte arduino classique mais d’une précision identique, comme à pu le remarquer le site HackADay celui ci à été bridé par les développeurs du software à la même vitesse qu’un arduino classique !
Pourquoi une telle hérésie ? On ne sait pas ! (plus d’info ce « bug » a été modifié depuis heureusement).

Les broches digital de la « Chipkit Max32 » sont 5v tolérant, cependant les broches analogique ne le sont pas, pour eviter tout probleme digilent à placer une zener 3v3 sur chacune de ces broches.
En théorie tout shield 5v devrait fonctionner sous « Chipkit Max32 » si elle n’utilise pas de port analogique, de même les shields native 3v3 devrait marcher sans soucis.
Seulement après quelques expérimentations il s’avère que la théorie ne rejoint pas vraiment la pratique.
Quand une shield marche physiquement avec la « Chipkit Max32 » c’est coté logiciel que les choses ne suivent plus et inversement quand coté logiciel cela marche c’est coté hardware qu’il y a probléme …
j’en ai donc conclu que les shields native 3v3 (sparkfun essentiellement), si vous éte capable de refaire le software c’est ok, pour le reste c’est trés aléatoire !

Qu’est ce qui reste pour l’utilisateur ?
Et bien oui avec tant de chose sur une si petite carte, qu’est ce que l’utilisateur peut utilisé en plus des spécifications hardware du PIC32 ?
Et bien comme sur une carte arduino classique pas grand chose, la carte posséde un bouton reset, un jumpeur pour choisir 5v régulé ou 3v3 directe, un connecteur SPI pour les shield comme la ethernet shield et une led pin 13. Pas de bouton ou de quelconque extra de led juste le strict minimum.

On remarquera aussi la présence d’un jumpeur pour choisir le mode du port SPI, soit maitre, soit esclave, chose qu’on ne trouve pas sur une carte arduino classique ou cette sélection ce fais via le software.

Parlons un peu du bootloader, le bootloader de la carte « Chipkit Max32 » utilise un protocole compatible STK500-V2, par conséquent il est possible d’utilisé avrdude pour uploader le programme sur la carte, un bon point !
Autre bon point c’est qu’il est disponible au téléchargement sur le site de digilent en cas de probléme.

Comme sur une carte arduino classique ou l’ont retrouve un port ISP pour connecter un debuggeur ou un programmateur, ici l’ont retrouve un port ICSP pour venir câbler un debuggeur compatible avec MPlab par exemple.

Il reste cependant un point fort dérangeant avec cette carte, en plus de devoir acheter une shield pour utiliser l’usb et l’ethernet comme je l’ai déjà dis le PIC32 ne possède pas de mémoire EEprom pour venir stocker des paramètres ou d’autres données, à la place une parti de la mémoire flash est utilisé pour émuler un mémoire EEprom, la mémoire flash possède un nombre de cycle d’écriture inférieur à une mémoire EEprom, ce qui pour moi me semble un probléme à long terme.

J’en ai terminer avec tout ce qui touche au matériel, passons au logiciel.
Comme pour d’autre portage « arduino » c’est une version modifié de l’IDE arduino classique qui est utilisé,
comme l’original la version modifié est compatible windows, linux et mac.
Mais il y a un point qui me semble le gros defaut de la carte « Chipkit Max32 », bien quel posséde un potentielle et une puissance idéniable c’est coté logiciel que tout par à la dérive.
Ainsi en regardant le nombre de librairie porté pour la « Chipkit Max32 » on se rend compte que les choses ne vont pas !
Une grand parti des librairies arduino classique doivent être refaite pour fonctionner sur la plateforme chipkit et les librairies de base arduino telle que wire, ethernet, serial, SPI, etc, soit ne compile pas, soit ne sont pas finit, soit pour certaine ne sont juste pas prévue !
http://www.chipkit.cc/wiki/index.php?title=Library_Status
http://www.chipkit.cc/wiki/index.php?title=Programming_Hints
http://www.chipkit.cc/wiki/index.php?title=Using_Arduino_Shields
Si ce n’est les librairies « simple » n’utilisant que des fonctions d’autres librairie, toute les autres librairies utilisant progmem, avr/io et j’en passe doivent être revue pour la chipkit, chose impensable pour un développeur arduino qui devrait alors géré plusieurs portage d’une même libraire !

Pour ce qui est de la communauté chipkit, à l’inverse de la communauté arduino, qui il faut l’avoué est en grande parti la source du succées de l’arduino, est ici bien maigre et pas vraiment active.
Pour s’en convaincre il suffit d’allez voir le forum chipkit ou le wiki.

Conclusion :
C’est une plateforme de dévellopement assez sympa, d’une puissance de calcul formidable et avec une multitude de chose autour.
Malheureusement la chipkit souffre de sont manque de software et d’une communauté pas assez fourni pour pouvoir répondre au question des utilisateurs. Elle souffre aussi de son intégration assez étrange aussi bien en hardware avec « l’oubli » d’une mémoire EEprom externe et de l’utilisation d’une puce FTDI au lieu de l’usb hardware, mais aussi en software avec la limitation du analogRead (modifié depuis heureusement).
J’ai bien peur que le passage de l’IDE arduino en v1 risque de creusé encore une peu plus le fossé qui sépare les deux plateformes et coupe net la soit disant compatibilité à 100% hardware et software qui il faut être réaliste n’est qu’un argument marketing !

Mais bon faut pas non plus être négatif sur tout, à chaque mise à jour de l’IDE tout les bug précédant sont fixé, l’équipes de développeurs est trés réactive ! La communauté extérieur l’ai moins, mais avec le temps les choses ne peuvent que s’améliorer, cependant la shield ethernet/usb/rtc/eeprom aurait vraiment du être intégré de base à la max32, car 60$ en plus c’est relativement chère !

Ps: j’avais prévu un benchmark avec des calculs de float pour tester le PIC32 VS un ATmega classique, mais le code n’était pas assez bourin pour montrer la différence de temps de calcul … donc pas de benchmark pour le moment je verrai de faire un benchark comparatif plus tard.

Discussion

13 réflexions sur “[Test] Chipkit Max32

  1. Belle présentation du produit. Dommage qu’il y ait en moyenne au moins une grosse faute d’orthographe par ligne …

    Publié par ctve | 18 octobre 2011, 21 h 40 min
  2. C’est une petite bombe le PIC32MX !!! encore pas mal de bugs dans la couche d’abstraction mais suffit de l’attaquer en bas niveau:)

    Publié par Pascal | 22 octobre 2011, 16 h 01 min
  3. Salut,

    Il existe maintenant un nouveau shield pour le Chipkit MAX32 qui donne accès aux ports Ethernet, USB et CAN,
    Le chipkit Network shield : http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&Cat=18

    ;=)

    Publié par OHAYO | 20 novembre 2011, 21 h 54 min
  4. merci pour cette présentation … et pour les autres qui je lis avec beaucoup d’intérêt.

    Personnellement je viens d’acheter la uno32 que j’utilise sous MPIDE et étant habitué aux « bêtes » pic18 je reste un peu sur ma faim ….

    – le 3,3v et les quelques pins 5v tolérant. On est pas a l’abri de faire une connerie un jour ou l’autre.
    – pas d’eeprom et quand a son émulation en flash je dirais « bof » a cause de la duree de vie du flash si on joue avec ca
    – pas de possibilité de changer le pic
    – pas programmable avec mon bon vieux ICD2. Je dois racheter un programmeur si je veux l’utiliser sous MPLAB
    – le MPIDE a toujours un metro de retard sur le vrai ide arduino donc difficile de jongler avec les 2,
    – pas mal ed librairies non compatibles par rapport aux arduino donc il faut toujours bidouiller pour les faire tourner ce qui est un peu lourd à la fin
    – j’ai pas réussi à programmer via MPIDE des variables persistantes c.à.d gardant leur valeur suite à un reset ou au déclenchement du watchdog. A l’init tout est remis à 0. Ce qui est gênant dans mon appli qui comprend un système d’alarme qui se retrouve OFF à chaque reset ou watchdog. Sur les pic18 aucun problèmes, une variable non initialisée garde sa valeur sur un reset.
    – j’ai le même problème pour le RTCC. Pas réussi à ce qu’il garde sa valeur sur un reset ou watchdog. Pas cool pour une horloge. J’ai tout essayé alors soit j’ai pas compris, soit il y a quelque part un bug dans le MPIDE.

    Bref j’ai essaye la bete pour faire joujou mais je pense que je vais rester avec mes bons vieux pic18 car leurs puissances me suffit et il y a beaucoup moins de contraintes.

    J’attends cependant la sortie de l’arduino DUE pour me refaire un avis sur l’interet des 32 bits.

    philippe

    Publié par philippe | 19 juin 2012, 18 h 41 min
  5. >> Personnellement je viens d’acheter la uno32 que j’utilise sous MPIDE et étant habitué aux “bêtes” pic18 je reste un peu sur ma faim ….

    J’ai eu la même sensation au début. Étant habitué aux ARM-Cortex de ST je n’arrive pas souvent à mes fins avec les PIC32 …
    Mais ce sont des petites bête pleine de puissance ! Une fois bien en mains on peut faire des choses de dingue.

    >> – le 3,3v et les quelques pins 5v tolérant. On est pas a l’abri de faire une connerie un jour ou l’autre.
    Ça c’est universelle, tout les micro-contrôleurs ARM ou dérivé sont en 3v3, il faut s’y faire 😉

    >> – pas d’eeprom et quand a son émulation en flash je dirais “bof” a cause de la duree de vie du flash si on joue avec ca
    Oui l’émulation de l’eeprom en utilisant la flash est à éviter à tout prix !
    C’est un peu dommage de ne pas avoir ajouter une EEPROM I2C ou autre mais bon le hardware est assez « spécial ».

    >> – pas de possibilité de changer le pic
    C’est partout pareil, le format DIP est voué à disparaitre il faut vivre avec son temps !

    >> – pas programmable avec mon bon vieux ICD2. Je dois racheter un programmeur si je veux l’utiliser sous MPLAB
    PICKIT3 minimum, j’ai aussi était dégouté de voir mon ICD2 incapable de bootloader un PIC32MX220 …
    50€ la bête tout de même, ça laisse réfléchir … et les clones chinois sont à éviter à tous prix !!

    >> – le MPIDE a toujours un metro de retard sur le vrai ide arduino donc difficile de jongler avec les 2,
    Même chose avec Maple-IDE (leaflab, STM32), Energia-IDE (msp430), … tous dérivé de la version 0022 (voir 0018).
    Mais il faut dire que la teams arduino n’as pas vraiment avertit des changements de la version 1.0 ce qui pose aujourd’hui d’énorme probléme de compatibilité au niveau des librairies.

    >> – pas mal de librairies non compatibles par rapport aux arduino donc il faut toujours bidouiller pour les faire tourner ce qui est un peu lourd à la fin
    Quasi 95% des librairies arduino pour ATmega sont incompatible. Il faudrait les ré-écrire.
    C’est pour cela que je programme désormais en bas niveau avec la doc du PIC32.

    >> J’attends cependant la sortie de l’arduino DUE pour me refaire un avis sur l’interet des 32 bits.
    Tu sera déçu par la DUE (comme beaucoup de personne, dont moi) à mon avis.
    Pour le moment, et d’aprés ce que j’ai pu voir la DUE est très mal parti …
    Puissance très limité, hardware poussif, équipe de développement qui nous promet la DUE depuis maintenant plus de 6 mois …
    Le résultat sera à l’instar de l’arduino leonardo, le jour de la sortie personne n’en voudra …

    Publié par skywodd | 19 juin 2012, 19 h 05 min
    • merci de ta reponse.

      Donc si j’ai bien compris j’attends pour rien la DUE ….

      C’est vrai que la V1 arduino est vraiment pas mal. Dommage que les cartes actuelles manquent de puissances et pour mon cas d’un bus CAN integre.

      je connais pas du tout les ARM-Cortex. Peut etre devrais je regarder ca de plus pres.

      Mon appli domotique est basé sur plusieurs cartes pic18 relié via un bus CAN.

      Je dois gerer pas mal de capteurs : 20 entrees numeriques, 4 sorties, decoder des commandes radio (thermometres oregon, x10 et commande alarme), emettre et receivoir des commandes x10 (via la gestion d’un tw523), gerer du vocal (module liaison serie), relever les donnees du compteur EDF tempo, des logs + du parametrage en cartes SD, un LCD + clavier. L’appli comprend aussi une interface web http et socket tcp. Le tout est en C18 sous MPLAB.

      Aujourd’hui toutes ces fonctions sont « eparpillees » sur mon bus CAN. Mon objectif serait de tout faire sur une seule carte plus puissante.

      D’apres tes connaissances et experiences, quelle carte ARM-Cortex me conseilles tu ? Y a t-il un environnement de developpement gratuit comme pour les pics ?

      Publié par philippe | 19 juin 2012, 20 h 05 min
      • >> Donc si j’ai bien compris j’attends pour rien la DUE ….
        Je ne pense vraiment pas que la DUE va révolutionner le monde de l’arduino …

        >> C’est vrai que la V1 arduino est vraiment pas mal.
        Humm la 1.0.1 avec une traduction (forcé) en français du 18eme siècle je trouve ça TRÈS moyen !

        >> Dommage que les cartes actuelles manquent de puissances et pour mon cas d’un bus CAN integre.
        Le but des cartes arduino n’est pas la puissance mais la facilité d’utilisation.
        Avoir un cpu 32 bits et un bus CAN ne changerai pas grand chose pour beaucoup d’Arduinistes débutant 😉
        Les Arduinistes « confirmé » ce tournent vite vers le développement non arduino 😉

        >> je connais pas du tout les ARM-Cortex. Peut etre devrais je regarder ca de plus pres.
        Au vu de ce que tu veut faire je pense effectivement que tu devrais y jeter un coup d’œil 😉

        >> Mon appli domotique est basé sur plusieurs cartes pic18 relié via un bus CAN.
        Regarde aussi du côté de « olimexino-stm32 », c’est une carte arduino maple (leaflabs) mais conçu par olimex -> bus can intégré, cpu 32bits STM32 (cortex-m3), par contre un peu léger en ram (8ko).
        https://skyduino.wordpress.com/2011/08/31/test-olimex-stm32-maple-arduino/

        >> Aujourd’hui toutes ces fonctions sont “eparpillees” sur mon bus CAN. Mon objectif serait de tout faire sur une seule carte plus puissante.
        Ça fait beaucoup de chose !
        A mon avis tu devrais regarder du côté des cartes LPC1769 (chipset ethernet intégré, bus can, meilleur perf de tout les ARM cortex-M3 (168MHz)) ou les cartes « chinoise » à base de LPC1768.
        https://skyduino.wordpress.com/2011/09/10/test-lpc1769-board/
        https://skyduino.wordpress.com/2012/01/29/carte-de-developpement-landtiger-sont-trop-fort-ces-chinois/

        >> D’apres tes connaissances et experiences, quelle carte ARM-Cortex me conseilles tu ?
        STM32F1xx si tu veut garder une architecture ou LPC176x.
        https://skyduino.wordpress.com/2011/09/23/test-stm32-discovery/
        https://skyduino.wordpress.com/2012/03/03/test-stm32l-discovery/

        Ou STM32F4 si tu veut vraiment aller loin … trés loin (Cortex-M4 nouvelle génération, ça dépote !).
        https://skyduino.wordpress.com/2012/03/08/test-stm32f4-la-nouvelle-generation-darm-cortex-m4-est-dans-la-place/

        >> Y a t-il un environnement de développement gratuit comme pour les pics ?
        Oui et non, la toolchain arm-none-eabi-gcc est open source (compilateur C et C++, ça fait tu bien de pouvoir faire des classes C++ ;))
        Par contre les ide sont propriétaire exemple : LPCXpresso pour les LPCx.

        Pour les STM32 par contre tu peut utiliser l’excellent ide : CoIDE de Coocox qui est gratuit et permet le débug sans limite de taille.

        Publié par skywodd | 19 juin 2012, 20 h 34 min
  6. merci pour toutes ces infos.

    je pense que je vais tenter l’experience d’une carte NXP LPC. L’IDE semble fourni avec pas mal de docs, de librairies et d’exemples de code.
    Par contre pour le choix de la carte, pas facile !
    Il y a pas mal de versions de puce sur le site NXP (http://ics.nxp.com/microcontrollers/) et on trouve un paquet de cartes differentes toutes aussi delirantes les une que les autres en puissance et fonctions annexes donc je sais pas trop quoi choisir. J’hesite entre une a base de LPC1769 chez lextronic ou ed chez olimex qui semble plus complete mais a base de LPC22xx ou LPC24xx.

    Publié par philippe | 20 juin 2012, 7 h 17 min
    • >> J’hesite entre une a base de LPC1769 chez lextronic ou de chez olimex qui semble plus complete mais a base de LPC22xx ou LPC24xx.
      Les LPC22xx et LPC24xx sont des ARM7 pure et dure, par contre il me semble que les cartes olimex ne sont pas fourni avec un débuggeur intégré !
      Pas de débuggeur = pas de programmation / debuggage de la carte 😉

      Ensuite niveau prix, entre une LPC1769 à ~20€ et une carte LPC2xxx à 40/70€, je prendrai la LPC1769 personnellement 😉

      Publié par skywodd | 20 juin 2012, 10 h 27 min
  7. Bonjour, es tu certain que la carte est en double couche, le schéma eagle est donné et il me semble qu’il est en quatre couches ?
    Franck

    Publié par Lecat | 15 décembre 2012, 12 h 31 min
    • J’ai pas vu grand chose par transparence, mais c’est fort possible.
      Si le routage eagle le dit c’est que ça doit être vrai 🙂

      Publié par skywodd | 15 décembre 2012, 12 h 43 min

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.