Skyduino:~#
Articles
Autre, Corrigé, programmation, projet

[DIY] Dév-board pour CPU Propeller de Parallax

Bonjour tout le monde !

Il y a de cela quelques temps j’ai acheté pour quelque chose comme 8€ un micro-contrôleur "Propeller" de Parallax : le P8X32A.

P1060235

Le P8X32A est un micro-contrôleur 32 bits multi-cœurs (8 cœurs au total !) pouvant tourner à un maximum de 80MHz.
Comme il est vendu en version CMS et DIP (utilisable sur une breadboard comme sur la photo) je me suis permis une petite folie et j’en ai pris un au détour d’une commande de composants.

Les informations détaillées sur le micro-contrôleur sont disponible ici :
http://www.parallax.com/tabid/768/ProductID/334/Default.aspx

Les cartes de démo et autre "starter kit" pour le P8X32A coutent entre 25€ et 75€ … c’est bien cher pour un morceau de pcb, un P8X32A et une EEPROM I2C !
J’ai donc décidé de faire ma propre "mini dév board" DIY histoire de tester un peu les possibilités du CPU propeller.

Le schéma :

propollerDIY_schematic

J’ai bêtement suivi la documentation du fabricant.

Le schéma se résume à 5 grandes parties :
- une alimentation 3v3 régulée
- un bouton de reset
- un quartz
- une EEPROM I2C
- un P8X32A et des connecteurs

Remarque : la broche 3v3 du connecteur J2 est volontairement laissé non-câblé.
Je me suis rendu compte après coup que cela poserait des problèmes d’avoir une broche d’alim juste à coté d’une sortie …

Voici le typon avec les différentes pistes :

propollerDIY_typon

Remarque : j’étais parti pour monter un régulateur 3v3 avec le même brochage qu’un LM7805, pas de bol le régulateur que j’avais n’avait pas tout à fait le même brochage.
Du coup j’ai dû faire un peu de bricolage pour inverser deux broches de celui ci.

Le résultat final :

P1060227

Sur la droite la partie alimentation, sur la gauche la partie mémoire + port série, au centre le P8X32A en boitier DIP.

P1060233

J’ai caché en dessous du micro-contrôleur les résistances de tirage du bus I2C de l’EEPROM et le quartz.

A noter que le quartz est remplaçable !
J’ai préféré faire cela car je n’ai pas de quartz de 5MHz (valeur "idéal" pour pouvoir tirer profit des 80MHz maximum du CPU) et je n’avais pas envie de souder / dessouder le quartz "temporaire" de 4MHz (qui ne me permet que d’aller à un maximum de 64MHz).

P1060230

Comme vous pouvez le voir il y a un joli fil vert pour réparer mon erreur de brochage du régulateur et plein de coups de cutter entre les pistes pour éviter les court-circuits.
Je n’ai pas eu de chance sur ce pcb, j’ai eu plein de petit morceaux de cuivre qui sont restés entre les pistes …

Le logiciel :

Parallax fourni un éditeur graphique pour son langage de programmation nommé "spin".
On peut coder avec deux langages sur le micro-contrôleur : en "spin" (une sorte de mix entre BASIC et indentation "à la Python") et en assembleur.
Note: depuis peu il existe aussi un portage de GCC pour le P8X32A mais je n’ai pas essayé pour le moment.

Pour la syntaxe du langage "Spin" (qui est un langage semi-compilé) wikipedia donne les grandes lignes :
http://en.wikipedia.org/wiki/Spin_(programming_language)#Built_in_SPIN_byte_code_interpreter

spintool

Avec un peu de mal (ce n’est pas très intuitif comme syntaxe) et beaucoup de recherche sur le net j’ai pu faire un exemple "blink" fonctionnel :

CON
  ledpin = 0

PUB main
dira[ledpin] := 1
repeat
  outa[ledpin] := 1
  waitcnt(clkfreq + cnt)
  outa[ledpin] := 0
  waitcnt(clkfreq + cnt)

(ne me demandez pas d’expliquer comment marche la fonction d’attente j’ai moi même pas vraiment compris …)

Le truc vachement sympa avec le micro-contrôleur Propeller c’est qu’il exécute tout depuis la RAM et uniquement depuis la RAM.
Du coup on peut envoyer son code "pour test" dans la RAM et s’il marche on peut ensuite l’écrire en dure dans l’EEPROM.

load

Mais cela a un gros, très gros désavantage !
Lors du boot le CPU lit l’EEPROM (s’il y en a une) et copie son contenu en RAM.
Du coup TOUT les programmes quels qu’ils soit ont une limite de taille : 32 Ko, la taille de la RAM dédiée à l’exécution du programme.

C’est pour moi un peu bête d’avoir un cpu surpuissant capable de mettre à genoux n’importe quel ARM mono-cœur et d’avoir une limite aussi contraignante …

Pire on se retrouve à devoir faire un choix dés plus surprenant !
Le code spin compilé est bien plus compact que le code assembleur compilé, se pose donc le dilemme suivant :
- coder en spin en sachant que c’est une langage semi-compilé (donc lent) mais en sachant qu’on disposera de plus de place pour le programme
- coder en pure assembleur qui tourne à la vitesse du CPU mais qui prend plus de place …

A tester absolument :

Si j’ai pris un P8X32A (j’aurai pu prendre autre chose, voire même rien du tout) c’est parce que j’avais une idée derrière la tête ;)

Je vous présente le projet "SIDcog", un émulateur (quasi) complet de chipset SID comme celui du Commodore 64 !
http://forums.parallax.com/showthread.php/118285-SIDcog-The-sound-of-the-Commodore-64-!-(Now-in-the-OBEX)

P1060238

Pour le moment je n’ai testé que la démo "minimaliste" mais dés que j’aurai un lecteur de carte SD je testerai le lecteur de chiptune complet :)

Bon WE et bon bidouillage à tous !

EDIT: commentaires désactivés pour cause de spam massif sur cet article, désolé.

About these ads

Discussion

5 réflexions sur “[DIY] Dév-board pour CPU Propeller de Parallax

  1. Bonsoir
    Un article super inintéressant, malheureusement le spin et l’assembleur (quoi que) je trouve ça vraiment dommage enfin nous verrons bien avec la version gcc.
    Sinon dans l’article je trouve que, bien qu’il soit complet il manque une partie "programmation". Je parle de savoir si naturellement il procède un booloader comme cela semble être le cas ou si il faut un programmateur spécial.

    Par contre le support du NTSC/VGA donne vraiment envie.

    Publié par mike | 10 mars 2013, 21 h 17 min
    • >> Un article super inintéressant, malheureusement le spin et l’assembleur (quoi que) je trouve ça vraiment dommage enfin nous verrons bien avec la version gcc.

      J’ai lu quelques articles sur le portage de GCC pour les cpu Propeller ("propgcc"), pour le moment ça me semble pas une solution idéale.
      Il faudrait regarder avec un code "complet" voir ce que ça donne pour être fixé.

      >> Sinon dans l’article je trouve que, bien qu’il soit complet il manque une partie « programmation ». Je parle de savoir si naturellement il possède un booloader comme cela semble être le cas ou si il faut un programmateur spécial.

      J’ai volontairement fait l’impasse sur la partie logicielle, je suis encore trop peu expérimenté pour pouvoir donner mon avis.

      Je sait pour le moment uniquement faire une boucle et modifier l’état d’une broche mais rien de plus …
      Je n’ai même pas encore regardé les instructions assembleur.

      Sinon concernant le bootloader, oui il y en a un, il travaille en deux modes : série et I2C.
      Voir le lien wikipedia pour les détails, pas besoin de programmateur spécial ou autr ;)

      >> Par contre le support du NTSC/VGA donne vraiment envie.

      J’ai pas compris comme ça marché en interne, mais ça a l’air effectivement très intéressant.

      Publié par skywodd | 10 mars 2013, 21 h 26 min
  2. Bonsoir,
    je te suit depuis à peu prés un an, et pour l’instant j’ai toujours trouvé tes articles super ! (même si des fois sa me dépasse un peu, tu explique vraiment bien ;) ).
    Bref, bien que ça n’ai pas beaucoup de rapport avec ton article, j’aimerais savoir où tu prend tes composant ?
    Merci, et bonne continuation !

    Publié par telec16 | 11 mars 2013, 18 h 04 min
    • Farnell de plus en plus souvent (les fdp sont un peu chère donc je compense par des commandes moins fréquente mais plus grosse) et watterott / lextronic pour tout le reste (arduino, shield, breakout, …).

      Publié par skywodd | 11 mars 2013, 19 h 58 min

Archives

Wow. Dogecoin. Amaze.

Laissez un tip en Dogecoin

DMMNFk6WBVTpx2Wu1Z35GL61QXSd6r6WQx

Suivre

Recevez les nouvelles publications par mail.

Joignez-vous à 678 followers