SpresenseをLPC-Link2とOpenOCDでデバッグしたいのにlocalhost:3333: Operation timed out.

SpresenseでOpenOCDを接続したいのにGDB server接続できない。

【理由】メインボードと拡張ボードが浮いていた!?
   (上から押しつけたらカチっと嫌な音。その後、無事にlocalhost:3333が立ち上がった)

【確認方法】
  拡張基板側をUSB接続してみて、青ランプが点灯していれば問題ない。
  筆者は結構押し込んで安定させないと、都度消えていることが多かった。

【確認したこと】

  ■LPC-Link2のファームウェア
  

f:id:ThreeStones:20200606023509p:plain
tool

   ■SWDコネクタの接続
   はんだ付けに自信がなかったので、導通チェックを何度も確認

  ■ Ubuntu環境なので
   60-openocd.rulesのコピー

【調査】

spresense - Eclipse IDE(LPC-Link2) デバッグの実行でエラーになる - スタック・オーバーフロー
とか、Facebookのグループにも同様に悩んでる人が多かった。

 *** Spresenseの問題ではなさそう?
  spresenseenv/usr/bin以下で下記のとおり、openocdをデバッグ出力(-d3をつける)

~/spresenseenv/usr/bin$ sudo ./openocd 
-f interface/cmsis-dap.cfg -f target/cxd5602.cfg -d3 -c "transport 
select swd"
Open On-Chip Debugger 0.10.0+dev-00948-g7542ae67 (2019-11-25-05:46)
Licensed under GNU GPL v2
For bug reports, read
     http://openocd.org/doc/doxygen/bugs.html
User : 13 1 options.c:60 configuration_output_handler(): debug_level: 3
User : 14 1 options.c:60 configuration_output_handler():
Debug: 15 1 options.c:184 add_default_dirs(): bindir=/tmp/dist/bin
Debug: 16 1 options.c:185 add_default_dirs(): 
pkgdatadir=/tmp/dist/share/openocd
Debug: 17 1 options.c:186 add_default_dirs(): 

 ・・・

Info : 177 64 cmsis_dap_usb.c:874 cmsis_dap_get_caps_info(): CMSIS-DAP: 
SWD  Supported
Info : 178 64 cmsis_dap_usb.c:876 cmsis_dap_get_caps_info(): CMSIS-DAP: 
JTAG Supported
Info : 179 64 cmsis_dap_usb.c:854 cmsis_dap_get_version_info(): 
CMSIS-DAP: FW Version = 1.0
Info : 180 65 cmsis_dap_usb.c:967 cmsis_dap_swd_open(): CMSIS-DAP: 
Interface Initialised (SWD)
Debug: 181 66 cmsis_dap_usb.c:1039 cmsis_dap_init(): CMSIS-DAP: Packet 
Size = 64
Debug: 182 66 cmsis_dap_usb.c:1052 cmsis_dap_init(): CMSIS-DAP: Packet 
Count = 64
Debug: 183 66 cmsis_dap_usb.c:1055 cmsis_dap_init(): Allocating FIFO for 
3 pending HID requests
Info : 184 67 cmsis_dap_usb.c:895 cmsis_dap_get_status(): SWCLK/TCK = 1 
SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : 185 69 cmsis_dap_usb.c:1108 cmsis_dap_init(): CMSIS-DAP: 
Interface ready
Debug: 186 69 core.c:1668 adapter_khz_to_speed(): convert khz to 
interface specific speed value
Debug: 187 69 core.c:1672 adapter_khz_to_speed(): have interface set up
Debug: 188 69 core.c:1668 adapter_khz_to_speed(): convert khz to 
interface specific speed value
Debug: 189 70 core.c:1672 adapter_khz_to_speed(): have interface set up
Info : 190 70 core.c:1450 adapter_init(): clock speed 1000 kHz
Debug: 191 70 openocd.c:141 handle_init_command(): Debug Adapter init 
complete
Debug: 192 70 command.c:143 script_debug(): command - transport 
transport init
Debug: 194 70 transport.c:239 handle_transport_init(): handle_transport_init
Debug: 195 70 command.c:143 script_debug(): command - dap dap init
Debug: 197 70 arm_dap.c:106 dap_init_all(): Initializing all DAPs ...
Debug: 198 71 cmsis_dap_usb.c:929 cmsis_dap_swd_switch_seq(): JTAG-to-SWD
Debug: 199 72 cmsis_dap_usb.c:733 cmsis_dap_swd_read_process(): SWD ack 
not OK @ 0 JUNK
Debug: 200 72 command.c:630 run_command(): Command 'dap init' failed 
with error code -4
User : 201 73 command.c:695 command_run_line():
Debug: 202 73 command.c:630 run_command(): Command 'init' failed with 
error code -4
User : 203 73 command.c:695 command_run_line():
Debug: 204 73 target.c:1959 target_free_all_working_areas_restore(): 
freeing all working areas
Debug: 205 74 cmsis_dap_usb.c:934 cmsis_dap_swd_switch_seq(): SWD-to-JTAG

「run_command(): Command 'dap init' failed with error code -4」って何だ!!
 ⇒ググる
  ⇒接続間違えてんじゃね? しか出てこない。。。
   ⇒いやいやいや、ちゃんとKEYのとこもペンチで抜いたしSWD接続あってんぜ・・・
    ⇒(それから1週間後)
     ⇒ メインボード + 拡張ボード+圧力 = カチッ!!

第29回高専プロコンに参加した話

全国高等専門学校プログラミングコンテストに参加しに徳島まで行ってきました。

概要

今年の高専プロコンは「競技アイデア部門」という競技部門の新しい競技コンペがありました。
その参加枠は現役高専生だけでなく、OB、教員、協賛企業でも参加可能。
参加しないわけに行きません、、、っとうことで参加してきました。

競技アイデア部門結果

自分が出展したアイデア名は「作る、選ぶ、解く プロコンかるた」でした。
結果は下記の通り、
第29回阿南大会(2018) 本選結果
やりました。 表彰されたのは初めてかもしれませんね。。。正直とても嬉しかったです。

競技アイデア内容

詳細は記載しませんが、新しいアプローチとして
 ・問題は競技参加者が作る
 ・常にスクリーン上に問題毎の順位を表示させて、参加者はFB可、見ている人も最後まで
  楽しい
っという点を推してみました。
とにかく楽しいプロコンにしたく、昔から社内プロコンとかやりたいとアイデアを温めてきたので、
この日に日の目を見ることが出来て、とても良かったです。

あとメモとして
 ・外部計算機はクラスタの数を指定して、運営側で提供
 ・生成問題の順位付けのステップ制限、ペナルティをステップ数から不一致割合とかに
と、後から色々考えました。

最後に、競技プロコン、どういうアプローチを撮ったのかインタビューしてほしいですね。
コードレビューなど、裏番組としてやったらおもしろそう。

競技ルールの難しさ

高専プロコン 競技部門は少し特殊で
  (1)ルール発表から本番までの期間が長い(4月発表〜10月本番)
 (2)スクリーン上に競技進行が表示され観客もそこそこいる
 (3)予選▶一回戦▶敗者復活▶準決勝▶決勝というように難易度を調整しながら競技が進行
 (4)参加チームが多い(ほとんどの高専が参加)
などの他のプロコンに無い要素があります

その中で、
 (1)があるため、必勝法のアルゴリズムが見つからないような問題
 (2)により、地元のお客さんでもわかりやすくスクリーンに表示したい
 (3)、(4)より複数の問題を生成可能かつ難易度の調整ができる必要がある
とルール設計には気をつけなければいけないです。

とくに必勝アルゴリズムが発見されてしまうと、当日の競技としての面白さが一気にかけてしまうため、
人間のファクターや他チームの影響を少なからず入れるべきと思っています。
(これが高専プロコンらしいさであり、面白さだと!)
またその方が、見ている観客も楽しいはず。

今後もアイディアを気軽に投稿できるようになったら楽しいと思います。
(Twtterのリプライ程度の形でいいと)

(蛇足)

徳島まで高速バスでいきました。
3列シートのバスで行きました。寝ていたのか起きていたのかわからなかったですが、
普通のバスよりは格別に良かったです。

徳島到着後は温泉に入りまくり、ご飯はひたすら様々な徳島ラーメンを食べ続けました。
阿波おどりも見れたり、いろいろな方とお話できたりととても楽しい時間でした。

最後に

阿南高専の学生さん、教員の皆さん、スムーズな会の進行ありがとうございました。
イデア部門もスペースの準備と後片付けをやっていただりとおせわになりました。
プロコン委員の皆さんも、OBが参加できる機会をいただきありがとうございました。
また次回もぜひとも参加しにいきたいです。