{"id":1528,"date":"2021-02-04T16:26:04","date_gmt":"2021-02-04T14:26:04","guid":{"rendered":"http:\/\/www.fabienm.eu\/wordpress\/?p=1528"},"modified":"2021-06-05T07:56:49","modified_gmt":"2021-06-05T05:56:49","slug":"longan-nano-avec-le-jtag-et-openocd","status":"publish","type":"post","link":"https:\/\/www.fabienm.eu\/wordpress\/2021\/02\/04\/longan-nano-avec-le-jtag-et-openocd\/","title":{"rendered":"Longan Nano avec le JTAG et openocd"},"content":{"rendered":"\n<p>Dans <a rel=\"noreferrer noopener\" href=\"http:\/\/www.fabienm.eu\/wordpress\/?p=1336\" target=\"_blank\">l&rsquo;article pr\u00e9c\u00e9dent<\/a> sur le sujet j&rsquo;utilisai exclusivement le connecteur USB-C de la longan nano pour tout faire : alimenter la carte, communiquer et t\u00e9l\u00e9charger le firmware via le <a href=\"http:\/\/dfu-util.sourceforge.net\/\">dfu<\/a>.<\/p>\n\n\n\n<p>\u00c7a permet de faire beaucoup de choses, mais il serait int\u00e9ressant de pouvoir poser des points d&rsquo;arr\u00eat dans son code pendant le d\u00e9veloppement au moyen d&rsquo;une sonde JTAG par exemple. Or la carte poss\u00e8de un header avec les signaux JTAG. C&rsquo;est le moment de rentabiliser <a href=\"https:\/\/fr.aliexpress.com\/item\/4000252520918.html?spm=a2g0o.productlist.0.0.383a4007euMlgl&amp;algo_pvid=a0670162-4334-4d09-9068-55d05e393fc5&amp;algo_expid=a0670162-4334-4d09-9068-55d05e393fc5-1&amp;btsid=2100bb4716106553956271427ea02b&amp;ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_\">la sonde Sipeed USB-JTag <\/a>command\u00e9e en m\u00eame temps que la longan.<\/p>\n\n\n\n<p>Le branchement de la sonde sur la longannano est tr\u00e8s simple il suffit de brancher les signaux du m\u00eame nom entre eux avec des <a href=\"https:\/\/fr.banggood.com\/200pcs-20cm-Female-to-Female-Jumper-Cable-Dupont-Wire-For-p-1033589.html?gmcCountry=FR&amp;currency=EUR&amp;cur_warehouse=CN&amp;createTmp=1&amp;utm_source=bing_pa&amp;utm_medium=cpc_bgcs&amp;utm_content=haosen&amp;utm_campaign=haosen-pa-frg-all-pc-0903&amp;ad_id=&amp;msclkid=6ab2cb3482dd1dedef11ab3538f5d455\">c\u00e2bles dupont femelle<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"525\" src=\"http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2021\/01\/sipeed_jtag_longan_nano-1.jpg\" alt=\"\" class=\"wp-image-1541\" srcset=\"https:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2021\/01\/sipeed_jtag_longan_nano-1.jpg 600w, https:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2021\/01\/sipeed_jtag_longan_nano-1-300x263.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><figcaption>L&rsquo;adaptateur jtag de sipeed sipeed-rv-debugger branch\u00e9 sur la longan nano<\/figcaption><\/figure>\n\n\n\n<p>Tout d&rsquo;abord, installons et compilons openocd pour le riscv :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ git <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/bukinr\/riscv-openocd<\/span>\n$ cd riscv-openocd\n$ .\/bootstrap\n$ .\/configure\n$ make<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Pour la suite de mes tests je me suis inspir\u00e9 du projet riscv-rust, m\u00eame si l&rsquo;objectif premier n&rsquo;est pas de faire du rust (c&rsquo;est juste l&rsquo;objectif second), le projet donne toutes les configurations utiles pour openocd.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php \">$ cd ..\n$ git <span class=\"hljs-keyword\">clone<\/span> https:<span class=\"hljs-comment\">\/\/github.com\/riscv-rust\/longan-nano<\/span>\n$ cd longan-nano\n$ ..\/riscv-openocd\/src\/openocd -f sipeed-jtag.cfg -f openocd.cfg &amp;\nOpen On-Chip Debugger <span class=\"hljs-number\">0.10<\/span><span class=\"hljs-number\">.0<\/span>+dev<span class=\"hljs-number\">-00924<\/span>-g03cde8a0b (<span class=\"hljs-number\">2021<\/span><span class=\"hljs-number\">-01<\/span><span class=\"hljs-number\">-14<\/span><span class=\"hljs-number\">-21<\/span>:<span class=\"hljs-number\">26<\/span>)\nLicensed under GNU GPL v2\n<span class=\"hljs-keyword\">For<\/span> bug reports, read\n\thttp:<span class=\"hljs-comment\">\/\/openocd.org\/doc\/doxygen\/bugs.html<\/span>\nadapter speed: <span class=\"hljs-number\">8000<\/span> kHz\n\nInfo : clock speed <span class=\"hljs-number\">8000<\/span> kHz\nError: Can<span class=\"hljs-string\">'t run cJTAG reset escape sequences: TCK signal is not defined\nError: Can'<\/span>t run cJTAG reset escape sequences: TCK signal is not defined\nError: Can<span class=\"hljs-string\">'t run cJTAG reset escape sequences: TCK signal is not defined\nInfo : JTAG tap: riscv.cpu tap\/device found: 0x1e200a6d (mfg: 0x536 (Nuclei System Technology Co.,Ltd.), part: 0xe200, ver: 0x1)\nInfo : JTAG tap: auto0.tap tap\/device found: 0x790007a3 (mfg: 0x3d1 (GigaDevice Semiconductor (Beijing)), part: 0x9000, ver: 0x7)\nWarn : AUTO auto0.tap - use \"jtag newtap auto0 tap -irlen 5 -expected-id 0x790007a3\"\nInfo : datacount=4 progbufsize=2\nInfo : Examined RISC-V core; found 1 harts\nInfo :  hart 0: XLEN=32, misa=0x40901105\nInfo : Listening on port 3333 for gdb connections\nInfo : Listening on port 6666 for tcl connections\nInfo : Listening on port 4444 for telnet connections\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Une fois le serveur openocd lanc\u00e9 on peu s&rsquo;y connecter avec telnet par exemple :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript \">$ telnet localhost <span class=\"hljs-number\">4444<\/span>\n<span class=\"hljs-attr\">Trying<\/span> ::<span class=\"hljs-number\">1.<\/span>..\nTrying <span class=\"hljs-number\">127.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.1<\/span>...\nConnected to localhost.\nEscape character is <span class=\"hljs-string\">'^]'<\/span>.\nInfo : accepting <span class=\"hljs-string\">'telnet'<\/span> connection on tcp\/<span class=\"hljs-number\">4444<\/span>\nOpen On-Chip Debugger\n&gt; riscv.cpu curstate\nhalted\n&gt; scan_chain\n   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask\n-- ------------------- -------- ---------- ---------- ----- ----- ------\n <span class=\"hljs-number\">0<\/span> riscv.cpu              Y     <span class=\"hljs-number\">0x1e200a6d<\/span> <span class=\"hljs-number\">0x1e200a6d<\/span>     <span class=\"hljs-number\">5<\/span> <span class=\"hljs-number\">0x01<\/span>  <span class=\"hljs-number\">0x03<\/span>\n <span class=\"hljs-number\">1<\/span> auto0.tap              Y     <span class=\"hljs-number\">0x790007a3<\/span> <span class=\"hljs-number\">0x00000000<\/span>     <span class=\"hljs-number\">5<\/span> <span class=\"hljs-number\">0x01<\/span>  <span class=\"hljs-number\">0x03<\/span>\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Voila \u00e7a semble marcher sur l&rsquo;ordinateur. Mais pour aller plus loin j&rsquo;ai pr\u00e9f\u00e9r\u00e9 faire avec <a href=\"https:\/\/longan.sipeed.com\/en\/get_started\/blink.html\">vscode<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pour l&rsquo;utiliser avec VScode il y a quelques tricks \u00e0 savoir.<\/h3>\n\n\n\n<p>Tout d&rsquo;abord les d\u00e9pendances :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs \">sudo apt install libhidapi-dev<\/code><\/span><\/pre>\n\n\n<p>Puis le probl\u00e8me de la librairies manquante :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml \"> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>cd \/usr\/lib\/x86_64-linux-gnu; sudo ln -s libmpfr.so libmpfr.so.6<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Et voila, vous devriez pouvoir faire de l&rsquo;ex\u00e9cution pas \u00e0 pas de votre programme sur la Longan Nano d\u00e9sormais.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;article pr\u00e9c\u00e9dent sur le sujet j&rsquo;utilisai exclusivement le connecteur USB-C de la longan nano pour tout faire : alimenter la carte, communiquer et t\u00e9l\u00e9charger le firmware via le dfu. \u00c7a permet de faire beaucoup de choses, mais il serait &hellip; <a href=\"https:\/\/www.fabienm.eu\/wordpress\/2021\/02\/04\/longan-nano-avec-le-jtag-et-openocd\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[192,106,10,1],"tags":[235,219,237,218,238],"class_list":["post-1528","post","type-post","status-publish","format-standard","hentry","category-electronique","category-embarque","category-informatique","category-non-classe","tag-debug","tag-longan_nano","tag-openocd","tag-riscv","tag-vscode"],"_links":{"self":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=1528"}],"version-history":[{"count":14,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1528\/revisions"}],"predecessor-version":[{"id":1634,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/1528\/revisions\/1634"}],"wp:attachment":[{"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=1528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=1528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=1528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}