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
$ make

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 logan-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

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

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 :

 cd /usr/lib/x86_64-linux-gnu; sudo ln -s libmpfr.so libmpfr.so.6

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

Ce contenu a été publié dans électronique, embarqué, informatique, Non classé, avec comme mot(s)-clé(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *