Un peu de «stop-motion» à la pâte à modeler

Les films en «stop-motion» en pâte à modeler sont des trucs rigolos à faire pour occuper des enfants quand il pleut. L’avantage de cette activité c’est qu’elle est (presque) sans écran. En effet, hormis l’appareil photo, pas besoin d’ordinateur pour toute la partie pâte à modeler. Et il est possible de visualiser le «film» en appuyant rapidement sur le bouton «suivant» de lecture des photos (tous les appareils photos numériques font ça).

Le matériel est finalement minimaliste, il suffit d’avoir:

  • Un appareil photo numérique, mais un téléphone avec une caméra fait également l’affaire.
  • avec de préférence un pied. On trouve des tri-pieds d’appareil photo sur le net à des prix tout à fait raisonnable.
  • de la pâte à modeler.
  • Un PC pour faire la «post-prod» (mais ça c’est sans les enfants après).

Dans un premier temps, je n’avais que de la vieille pâte à modeler grisâtre et à moitié sèche pour faire une limace. Il suffit donc de rouler un simple boudin de pâte à modeler, fixer l’appareil photo et ne plus le bouger, prendre une photo, bouger légèrement la limace, puis reprendre une photo, etc.

Quelques conseils, vous faite un film, pas besoin d’avoir une résolution de malade, préférez le réglage minimum pour la résolution. Parce que sinon ça donne des «vidéos» gigantesque.

De même, il est préférable d’enlever le flash. De toute manière, l’appareil photo est fixe donc vous pouvez faire des poses longue.

Pendant la prise de vue, on peut visualiser le «film» simplement en faisant défiler les photos. Suivant la puissance de l’appareil, on comprend l’intérêt d’avoir réglé la résolution au minimum : on évite les temps de chargement à la visualisation images par images.

Faire un GIF animé avec ImageMagick.

Les photos que vous aurez prises seront rangées avec un numéro d’incrément dans le répertoire de votre carte mémoire, ce qui va faciliter les manipulations avec ImageMagick.

Dans le cas de mon appareil photo, la résolution minimal est déjà énorme : 1600×1200. J’ai donc commencé par réduire en masse leurs tailles avec la commande (attention, la commande va modifier directement les photos, ne pas oublier de faire des copies de sauvegarde avant):

$ ls
DSCN1132.JPG  DSCN1138.JPG  DSCN1144.JPG  DSCN1150.JPG  DSCN1156.JPG  DSCN1162.JPG  DSCN1168.JPG  DSCN1174.JPG  DSCN1180.JPG  DSCN1186.JPG  DSCN1192.JPG  DSCN1198.JPG  DSCN1204.JPG  DSCN1210.JPG
DSCN1133.JPG  DSCN1139.JPG  DSCN1145.JPG  DSCN1151.JPG  DSCN1157.JPG  DSCN1163.JPG  DSCN1169.JPG  DSCN1175.JPG  DSCN1181.JPG  DSCN1187.JPG  DSCN1193.JPG  DSCN1199.JPG  DSCN1205.JPG  DSCN1211.JPG
DSCN1134.JPG  DSCN1140.JPG  DSCN1146.JPG  DSCN1152.JPG  DSCN1158.JPG  DSCN1164.JPG  DSCN1170.JPG  DSCN1176.JPG  DSCN1182.JPG  DSCN1188.JPG  DSCN1194.JPG  DSCN1200.JPG  DSCN1206.JPG
DSCN1135.JPG  DSCN1141.JPG  DSCN1147.JPG  DSCN1153.JPG  DSCN1159.JPG  DSCN1165.JPG  DSCN1171.JPG  DSCN1177.JPG  DSCN1183.JPG  DSCN1189.JPG  DSCN1195.JPG  DSCN1201.JPG  DSCN1207.JPG
DSCN1136.JPG  DSCN1142.JPG  DSCN1148.JPG  DSCN1154.JPG  DSCN1160.JPG  DSCN1166.JPG  DSCN1172.JPG  DSCN1178.JPG  DSCN1184.JPG  DSCN1190.JPG  DSCN1196.JPG  DSCN1202.JPG  DSCN1208.JPG
DSCN1137.JPG  DSCN1143.JPG  DSCN1149.JPG  DSCN1155.JPG  DSCN1161.JPG  DSCN1167.JPG  DSCN1173.JPG  DSCN1179.JPG  DSCN1185.JPG  DSCN1191.JPG  DSCN1197.JPG  DSCN1203.JPG  DSCN1209.JPG
$ mogrify -resize 320x240 *.JPG
$

Évidemment, il faudra avoir préalablement trié les photos pour qu’il ne reste que celle de la séquence voulue.

On peut ensuite faire un gif avec convert :

$ convert -loop 0 *.JPG pam_chenille.gif
Bientôt en sélection au festival du court métrage

Le résultat ci-dessus est tout de même obèse puisqu’on se retrouve avec un gif de 4Mo, mais il passe bien en pièce jointe de mail ou sur la messagerie signal 😉

Et pourquoi pas une vidéo avec ffmpeg et peertube ?

Le gif c’est sympa mais ça devient vite énorme, on ne peut pas faire pause et ça passe mal avec certain visualiseurs d’images. Pour la séquence suivante j’ai voulu tester la vidéo avec ffmpeg. C’est un petit peu plus compliqué de trouver la bonne combinaison d’options pour que ça marche avec les lecteurs de vidéo de messagerie mobile comme Signal (D’où cette note de blog pour me souvenir !).

Le premier épisode ayant été un succès international, j’ai eu le budget pour acheter de la pâte à modelée neuve avec plusieurs couleurs en plus !

Le scénario s’est en plus enrichi d’autres personnages en pâte à modeler pour plus d’aventures palpitantes. La limace a acquit une carapace d’escargot la bourgeoise !

Donc de la même manière que pour le Gif on se retrouve avec une liste de fichiers d’images JPG qu’il faut réduire :

$ convert -resize 50% *.JPG

Listes d’images que l’on peut convertir directement en vidéo mp4 grâce à la formule magique suivante :

$ ffmpeg -framerate 10 -i images/%2d.JPG -vcodec libx264 -crf 18 -pix_fmt yuv420p pam_escargot_serpent.mp4

Le fichier de sortie au format vidéo à l’avantage de pouvoir être stoppé, relancé, avancé, accéléré, etc. Grâce à son lecteur vidéo préféré.

L’intérêt d’une vidéo c’était l’occasion de tester le service de vidéo peertube, histoire de ne pas toujours tout publier sur youtube. Mais la publication avec wordpress directement fonctionne également

Aventure palpitante de l’escargot bicolore

Si le lecteur embarqué de peertube ne fonctionne pas, le fichier mp4 peut être visualisé sur le lecteur embarqué de wordpress tout simplement :

Les vidéos s’affichent très bien dans wordpress.

Et bien sûr, le fichier mp4 généré, qui ne fait que 4.5Mo, est parfaitement diffusable sur Signal ou par mail.

Voila, si vous souhaitez faire des vidéos en pâte à modeler, vous avez les commandes à utiliser.

Je parlerais peut être une autre fois de la version dessin :

[Edit] On en discute sur LinuxFR.

Publié dans dessin | Marqué avec , , , , | Laisser un commentaire

Starteupeuuur

Magnifique

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

La biodynamie: ensemble de pratiques agricoles conformes aux rites de l’église Anthroposophique.

Trouvé sur ce silo social :

Et aussi ici

Publié dans Non classé | Marqué avec , , , , , , | Laisser un commentaire

Livre sur le Scala

Pour apprendre un nouveau langage de programmation, j’utilise toujours la même méthode : Lire un livre (papier) de référence et commencer un projet en parallèle.

Cette méthode à fait ses preuves et fonctionne, à condition de choisir le bon livre.

Pour Scala, j’avais acquis le livre «Programming Scala» aux édition O’Reilly qui s’est avéré assez décevant. Le Scala est un langage qui mélange le paradigme fonctionnel avec le paradigme objet, il est nécessaire de «recommencer au début» pour se l’approprier. Ce livre suppose que l’on maîtrise déjà assez bien les deux paradigmes, ce qui est somme toute assez rare.

Plutôt que de s’adresser à ses adeptes il vaut mieux s’adresser au créateur directement : le suisse Martin Odersky avec le livre «Programming in Scala, Fourth edition» des éditions Artima. En partant de la base, ce livre donne de bien meilleurs base pour bien saisir le Scala et comprendre les différents codes que l’on peu avoir à lire.

Le livre de référence pour se mettre au Scala

Le livre est plus cher que celui de chez O’REILLY, mais il s’avérera un bien meilleurs investissement pour comprendre toutes les bases du langage.

Par contre je me rend compte que cette édition va bientôt être obsolète puisque la cinquième parait dans 6 jours. Édition qui portera sur la version 3.0 de Scala.

La version quatre reste cependant un bon investissement à mon avis.

Publié dans Non classé | Laisser un commentaire

Zephyr sur Hifive1 en 5 minutes

Zephyr est un système d’exploitation temps réel conçu pour les microcontrôleurs. L’OS a déjà été introduit dans une précédente note de ce blog.

La carte HiFive1 au format compatible arduino

La carte de développement Hifive1 contient le premier microcontrôleur à base de RISC-V sortie en «silicium» : le E310. La Hifive1 officiellement supportée par Zephyr depuis un petit bout de temps, son utilisation devrait donc passer comme une lettre à la poste contrairement au GD32VF103 de la Longan Nano.

Tout d’abord initialisons un projet zephyr :

$ west init ~/zephyrhifive
$ cd ~/zephyrhifive
$ west update

Compilation du projet hello world:

$ cd ~/zephyrhifive/zephyr
$ west build -b hifive1 samples/hello_world


Langage du code : JavaScript (javascript)

Pour flasher il suffit ensuite de lancer la commande west flash:

$ west flash
 -- west flash: rebuilding
 ninja: no work to do.
 -- west flash: using runner hifive1
 Open On-Chip Debugger 0.10.0+dev-01508-gf79c90268-dirty (2021-03-26-16:13)
 Licensed under GNU GPL v2
 For bug reports, read
     http://openocd.org/doc/doxygen/bugs.html
 Info : auto-selecting first available session transport "jtag". To override use 'transport select '.
 Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
 Info : clock speed 10000 kHz
 Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
 Info : Examined RISCV core; XLEN=32, misa=0x40001105
 Info : starting gdb server for riscv.cpu on 3333
 Info : Listening on port 3333 for gdb connections
 Info : [0] Found 2 triggers
 halted at 0x2040019c due to debug interrupt
 Info : Found flash device 'issi is25lp128d' (ID 0x0018609d)
 Info : Listening on port 6666 for tcl connections
 Info : Listening on port 4444 for telnet connections
 Info : accepting 'gdb' connection on tcp/3333
 Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
 halted at 0x2040019c due to debug interrupt
 force hard breakpoints
 0x2040019c in skip_callee_saved_reg () at /home/fabien/zephyrhifive/zephyr/arch/riscv/core/isr.S:886
 886        LOAD_CALLER_SAVED(t1)
 Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
 halted at 0x2040019c due to debug interrupt
 Loading section vector, size 0x10 lma 0x20400000
 Loading section exceptions, size 0x2b8 lma 0x20400010
 Loading section text, size 0x3fdc lma 0x204002c8
 Loading section initlevel, size 0x50 lma 0x204042a4
 Loading section sw_isr_table, size 0x200 lma 0x204042f4
 Loading section device_handles, size 0x36 lma 0x204044f4
 Loading section rodata, size 0x338 lma 0x2040452c
 Loading section datas, size 0xc0 lma 0x20404864
 Loading section devices, size 0x90 lma 0x20404924
 Info : Padding image section 0 at 0x2040452a with 2 bytes
 Info : Retrying memory read starting from 0x80000000 with more delays
 Info : Retrying memory read starting from 0x800010d8 with more delays
 halted at 0x80000004 due to software breakpoint
 halted at 0x80000004 due to software breakpoint
 halted at 0x80000004 due to software breakpoint
 Info : JTAG tap: riscv.cpu tap/device found: 0x10e31913 (mfg: 0x489 (SiFive, Inc.), part: 0x0e31, ver: 0x1)
 halted at 0x80000004 due to software breakpoint
 Start address 0x20400000, load size 18866
 Transfer rate: 42 KB/sec, 1886 bytes/write.
 A debugging session is active.
 <code>Inferior 1 [Remote target] will be detached.</code>
 Quit anyway? (y or n) [answered Y; input not from terminal]
 [Inferior 1 (Remote target) detached]
 shutdown command invoked
 Info : dropped 'gdb' connectionLangage du code : PHP (php)

On peut vérifier le bon fonctionnement en se connectant à l’uart ttyUSB1:

$ screen /dev/ttyUSB1 115200
Hello World! hifive1

Attention

Une fois flashé, c’est une application Zephyr qui tourne sur la carte. Or zephyr part en veille s’il n’a plus rien à faire. Ce qui est le cas ici.

Et quand la hifive1 est en veille on ne peut plus la flasher, l’erreur du type suivant survient :

<code>Error: Timed out waiting for debug int to clear.Increase timeout with riscv set_command_timeout_sec. Error: Debug interrupt didn't clear.</code>Langage du code : HTML, XML (xml)

Pour résoudre ce problème on peut appuyer sur le bouton reset puis le bouton wake et enfin lancer la commande de flashage.

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

Symboles OPOS6UL et OPOS6UL_NANO dans Kicad

[Article sponsorisé]

Armadeus Systems utilise un logiciel de routage relativement onéreux et complètement fermé pour concevoir ses modules SoM. Ce logiciel est indispensable en interne pour concevoir des cartes électroniques aussi complexe que des modules processeurs.

L’APF6, ce genre de module qui nécessite presque une dizaine de couche de cuivre pour être routé proprement.

Logiciel que tout le monde ne peut pas forcément se permettre d’acheter, surtout si c’est pour faire une petite carte d’accueil.

Conscient de ce problème, la société a entamé une migration de la conception de ses cartes d’accueil avec le logiciel Kicad. La technologie des cartes d’accueil de ses SoM étant beaucoup plus simple, il était possible de les migrer sur un logiciel libre.

Kicad est un logiciel libre de conception électronique qui permet de faire le schéma électronique ainsi que le routage. Kicad génère les fichiers de fabrication au format ouvert GERBER. Format qui est parfaitement reconnu par la plupart des sous-traitants électronique (EMS).

Pour qu’un utilisateur de Kicad puisse faire un design avec nos SOM, il est donc indispensable qu’il puisse disposer des symboles et footprint. C’est donc ce qui a été ajouté officiellement dans kicad pour les cartes OPOS6UL et OPOS6UL_NANO.

Ces deux cartes ont déjà été évoquées sur ce blog, elles ont l’avantage d’être de taille extrêmement réduite pour un système Linux embarqué complet.

L’OPOS6UL à gauche, et deux OPOS6UL_NANO à droite.

OPOS6UL

L’OPOS6UL est une petite carte SOM à bas coût mais au grande performances.

L’OPOS6UL est un SOM à base de processeur i.MX6UL. Le connecteur utilise le form-factor d’un connecteur de barrette de RAM SODIMM 204 pins. Comme le connecteur est standard, il suffit de l’associer au footprint déjà présent dans la librairie Kicad.

Le symbole de l’OPOS6UL vient donc d’être intégré à la librairie officiel de Kicad via le commit de K.Joly.

OPOS6UL_NANO

L’OPOS6UL_NANO: la petite sœur.

l’OPOS6UL_NANO est la petite sœur de l’OPOS6UL. Petite par la taille, mais grande par la performance. Le connecteur utilisé est également un standard: le connecteur NGFF (M.2) 67pts. plus souvent appelé par son diminutif «M2».

Le symbole de l’OPOS6UL_NANO. Le SOM contient nettement moins de connexions, mais il est également nettement plus petit (3x plus petit que sa grande sœur).

Le symbole vient également d’être accepté dans la librairie officiel de Kicad avec le commit suivant.

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

Une raspberrypi version RISCV pour moins de 100$ ?

On attendait la sortie du module processeur à 12.50$ muni d’un proc Allwinner XuanTie C906.

Le module promis à 12.5$

Hé bien pour le moment nous n’avons pas de nouvelles.

Par contre la carte Allwinner D1 nommée Nezha est belle et bien de sortie sur indiegogo. Elle est juste «un peu» plus cher que prévue puisque le prix du kit débute à 99$.

La carte «raspberrypi like» nommée Nezhra

Ça reste tout de même nettement moins cher que la carte BeagleV et son processeur StarFive dual U74 (Nettement moins puissant également).

La carte BeagleV qui est la plus puissante des carte RISCV à tarif abordable pour faire tourner linux 😉

Mais, si on exclu l’ovni MaixPy qui ne fonctionne pas très bien avec Linux, on peut affirmer que c’est la moins cher des cartes RISCV à pouvoir faire tourner une distribution Linux «de bureau».

Publié dans électronique, embarqué, informatique, Non classé | Marqué avec | Laisser un commentaire

Zephyr sur Longan Nano

Zephyr est un système d’exploitation temps réel pour microcontrôleur. Parler d’OS peut parfois faire réagir puisqu’il n’y a pas vraiment de noyau (kernel) et que tout est compilé en un seul firmware que l’on télécharge dans la mémoire du micro.

Ce n’est pas le seul RTOS existant pour microcontrôleur. Il a le gros avantage cependant d’être soutenu par la fondation Linux. Les deux grandes forces de ce système sont sa documentation et le support de nombreux protocoles réseaux (avec ou sans fils).

C’est le parfait OS à tester sur le GD32VF de gigadevice. Cependant, le portage n’est pas terminé. Le processeur n’apparaît donc pas dans la documentation officielle. Le seul tutoriel (en japonais) que j’ai trouvé se trouve là. J’en ai fait une traduction semi-automatique ici.

La version de Zephyr patché correspondante se trouve ici.

Essayons ici d’appliquer ce tutoriel.

On vérifiera sur le site officiel que nous avons bien installé toutes les dépendances sur notre machine.

Zephyr a besoin d’un outils python nommé west, c’est un projet à part mais qui reste dans le giron de Zephyr.

$ python -m pip install west
$ west init ~/zephyrproject 
$ cd ~/zephyrproject west update
$ python -m pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt

On supprime le git officiel de zephyr téléchargé avec west Puis puis on clone le fork Zephyr de Soburi:

$ rm -rf zephyr
$ git clone https://github.com/soburi/zephyr.git
$ cd zephyr
$ git checkout longan_nano_2_5_0Langage du code : PHP (php)

Notez la branche remotes/origin/longan_nano_2_5_0 qui contient le travail de portage sur la longan_nano.

On installe le SDK (attention ~1Go)

$ cd ~/zephyrproject
$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.12.4/zephyr-sdk-0.12.4-x86_64-linux-setup.run
$ chmod +x zephyr-sdk-0.12.4-x86_64-linux-setup.run
$ ./zephyr-sdk-0.12.4-x86_64-linux-setup.run -- -d ~/zephyr-sdk-0.12.4
$ export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.12.4/Langage du code : PHP (php)

Manque plus qu’à mettre à jour avec le nouveau zephyr (de soburi) patché :

$ cd ~/zephyrproject
$ west update

Puis nous pouvons compiler le hello world :

$ cd ~/zephyrproject/zephyr/
$ west build -p auto -b sipeed_longan_nano samples/basic/blinky
Langage du code : JavaScript (javascript)

Flashage sur la longan nano

Avec le jtag

Si tout s’est bien passé on doit pouvoir maintenant flasher le binaire sur la carte. J’utilise pour cela l’adaptateur jtag de sipeed.

$ pip3 install pyelftools

Pour le moment j’ai pas encore réussi. Mais ça doit pouvoir se faire puisque ça marche avec openocd.

Avec l’usb par dfu-util

Pour avoir un fonctionnement correct il faut utiliser une version à jour du git du projet :

$ cd ~/zephyrproject
$ git clone git://git.code.sf.net/p/dfu-util/dfu-util
$ cd dfu-util
$ ./autogen.sh 
$ ./configure
$ make
$ sudo make installLangage du code : PHP (php)

J’ai suivi les conseils d’un lecteur.

$ git clone https://github.com/riscv-mcu/gd32-dfu-utils.git
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ dfu-util -V
 dfu-util 0.10-dev
 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
 Copyright 2010-2021 Tormod Volden and Stefan Schmidt
 This program is Free Software and has ABSOLUTELY NO WARRANTY
 Please report bugs to http://sourceforge.net/p/dfu-util/tickets/Langage du code : PHP (php)

Puis, pour télécharger le binaire, taper la commande :

$ dfu-util -d,28e9:0189 -s 0x8000000:leave -a 0 -D build/zephyr/zephyr.bin
dfu-util 0.10-dev
 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
 Copyright 2010-2021 Tormod Volden and Stefan Schmidt
 This program is Free Software and has ABSOLUTELY NO WARRANTY
 Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
 dfu-util: Warning: Invalid DFU suffix signature
 dfu-util: A valid DFU suffix will be required in a future dfu-util release
 Opening DFU capable USB device…
 Device ID 28e9:0189
 Device DFU version 011a
 Claiming USB DFU Interface…
 Setting Alternate Interface #0 …
 Determining device status…
 DFU state(2) = dfuIDLE, status(0) = No error condition is present
 DFU mode device DFU version 011a
 Device returned transfer size 2048
 DfuSe interface name: "Internal Flash  "
 Found GD32VF103, which reports a bad page size and count for its internal memory.
 Fixed layout based on part number: page size 1024, count 128.
 Downloading element to address = 0x08000000, size = 19308
 Erase       [=========================] 100%        19308 bytes
 Erase    done.
 Download    [=========================] 100%        19308 bytes
 Download done.
 File downloaded successfully

Qui télécharge bien le binaire visiblement, et fait clignoter la led.

Pour s’assurer que c’est bien notre programme qui clignote, on peut changer la couleur de clignotement en modifiant la ligne suivante dans le fichier samples/basic/blinky/src/main.c:

# Ligne 16:
- define LED0_NODE DT_ALIAS(led0)
+ define LED0_NODE DT_ALIAS(led1)Langage du code : PHP (php)

Et relancer la compilation avec west:

$ west build -p auto -b longan_nano samples/basic/blinky
[3/9] Linking C executable zephyr/zephyr_prebuilt.elf
 [9/9] Linking C executable zephyr/zephyr.elf
 Memory region         Used Size  Region Size  %age Used
              ROM:       19308 B       128 KB     14.73%
              RAM:        4740 B        32 KB     14.47%
         IDT_LIST:          0 GB         2 KB      0.00%

Puis retélécharger pour voir la led verte clignoter.

Utilisation de la toolchain Platformio

La toolchain se trouve ici.

Le sdk nuclei se trouve ici et peut être téléchargé .

export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile
export CROSS_COMPILE=/home/fabien/zephyrproject/nuclei/gcc/bin/riscv-nuclei-elf-Langage du code : JavaScript (javascript)

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

La Raspberry Pi pico et ses 10 cores !

J’imagine que vous connaissez déjà le microcontrôleur à 4$ de la fondation RaspberryPi. En effet, un microcontrôleur dual cores cadencé à 133Mhz ça ne passe pas inaperçu.

Dual cores ? Vous êtes sûr ? Regardez bien la datasheet. Le processeur principal est bien constitué de 2 cœurs ARM Cortex-M0 ça c’est certain. Mais en lisant dans le détail on découvre un curieux périphérique nommé PIO state machine (chapitre 3) :

Qui permet d’exécuter des instructions assembleurs stockée dans une mémoire d’instructions spécifique.

2×4 véritables petits cœurs de processeurs qui accèdent directement aux GPIO du micro.

Voila des petits cœurs très intéressant dans le domaine de l’embarqué, surtout pour des application temps réel «dur».

La pico Pi n’est donc pas Dual-core mais 10-cores !

Publié dans Non classé | Marqué avec , , , | Laisser un commentaire

Longan Nano avec le JTAG et openocd

Dans l’article précédent sur le sujet j’utilisai exclusivement le connecteur USB-C de la longan nano pour tout faire : alimenter la carte, communiquer et télécharger le firmware via le dfu.

Ça permet de faire beaucoup de choses, mais il serait intéressant de pouvoir poser des points d’arrêt dans son code pendant le développement au moyen d’une sonde JTAG par exemple. Or la carte possède un header avec les signaux JTAG. C’est le moment de rentabiliser la sonde Sipeed USB-JTag commandée en même temps que la longan.

Le branchement de la sonde sur la longannano est très simple il suffit de brancher les signaux du même nom entre eux avec des câbles dupont femelle:

L’adaptateur jtag de sipeed sipeed-rv-debugger branché sur la longan nano

Tout d’abord, installons et compilons openocd pour le riscv :

$ git clone https://github.com/bukinr/riscv-openocd
$ cd riscv-openocd
$ ./bootstrap
$ ./configure
$ makeLangage du code : PHP (php)

Pour la suite de mes tests je me suis inspiré du projet riscv-rust, même si l’objectif premier n’est pas de faire du rust (c’est juste l’objectif second), le projet donne toutes les configurations utiles pour openocd.

$ cd ..
$ git clone https://github.com/riscv-rust/longan-nano
$ cd longan-nano
$ ../riscv-openocd/src/openocd -f sipeed-jtag.cfg -f openocd.cfg &
Open On-Chip Debugger 0.10.0+dev-00924-g03cde8a0b (2021-01-14-21:26)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
adapter speed: 8000 kHz

Info : clock speed 8000 kHz
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Error: Can't run cJTAG reset escape sequences: TCK signal is not defined
Info : JTAG tap: riscv.cpu tap/device found: 0x1e200a6d (mfg: 0x536 (Nuclei System Technology Co.,Ltd.), part: 0xe200, ver: 0x1)
Info : JTAG tap: auto0.tap tap/device found: 0x790007a3 (mfg: 0x3d1 (GigaDevice Semiconductor (Beijing)), part: 0x9000, ver: 0x7)
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 5 -expected-id 0x790007a3"
Info : datacount=4 progbufsize=2
Info : Examined RISC-V core; found 1 harts
Info :  hart 0: XLEN=32, misa=0x40901105
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Langage du code : PHP (php)

Une fois le serveur openocd lancé on peu s’y connecter avec telnet par exemple :

$ telnet localhost 4444
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Info : accepting 'telnet' connection on tcp/4444
Open On-Chip Debugger
> riscv.cpu curstate
halted
> scan_chain
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
 0 riscv.cpu              Y     0x1e200a6d 0x1e200a6d     5 0x01  0x03
 1 auto0.tap              Y     0x790007a3 0x00000000     5 0x01  0x03

Langage du code : JavaScript (javascript)

Voila ça semble marcher sur l’ordinateur. Mais pour aller plus loin j’ai préféré faire avec vscode.

Pour l’utiliser avec VScode il y a quelques tricks à savoir.

Tout d’abord les dépendances :

sudo apt install libhidapi-dev

Puis le problème de la librairies manquante :

 <em>cd /usr/lib/x86_64-linux-gnu; sudo ln -s libmpfr.so libmpfr.so.6</em>Langage du code : HTML, XML (xml)

Et voila, vous devriez pouvoir faire de l’exécution pas à pas de votre programme sur la Longan Nano désormais.

Publié dans électronique, embarqué, informatique, Non classé | Marqué avec , , , , | Laisser un commentaire