トラブルシューティング

OpenOCDの問題

OpenOCDに接続できません - "Error: open failed"

症状

デバイスと新しい接続を確立しようとするときに、次のようなエラーが発生します。

$ openocd -f (..)
(..)
Error: open failed
in procedure 'init'
in procedure 'ocd_bouncer'

原因と解決策

  • 全員:デバイスが(正しく)接続されていません。lsusbかデバイスマネージャでUSB接続を確認して下さい。
  • Linux:デバイスを開くためのパーミッションがないかもしれません。sudoをつけてもう1度試して下さい。 もしこれがうまくいくようであれば、OpenOCDをroot権限なしで実行するために、これらの手順が使えます。
  • Windows:ST-LINK USBドライバがない可能性があります。インストール手順はこちらです。

OpenOCDに接続できません - "Polling again in X00ms"

症状

デバイスと新しい接続を確立しようとするときに、次のようなエラーが発生します。

$ openocd -f (..)
(..)
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 300ms
Info : Previous state query failed, trying to reconnect

原因

マイクロコントローラは、短い無限ループに陥っているか、継続的に例外が発生している可能性があります。 例えば、例外ハンドラが例外を発生させています。

解決策

  • もし実行中であれば、OpenOCDを終了します
  • (黒い)リセットボタンを押したままにします
  • OpenOCDコマンドを実行します
  • ここで、リセットボタンを離します

OpenOCD接続切れ - "Polling again in X00ms"

症状

実行中のOpenOCDセッションが、急にエラーになります。

# openocd -f (..)
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 300ms
Info : Previous state query failed, trying to reconnect

原因

USB接続が切断されました。

解決方法

  • OpenOCDを終了します
  • USBケーブルを抜き、再度接続します
  • OpenOCDを再起動します

デバイスのFlashに書き込めません - "Ignoring packet error, continuing..."

症状

デバイスのFlashに書き込んでいる間に、次のエラーが発生します。

$ arm-none-eabi-gdb $file
Start address 0x8000194, load size 31588
Transfer rate: 22 KB/sec, 5264 bytes/write.
Ignoring packet error, continuing...
Ignoring packet error, continuing...

原因

ITMに「表示する」プログラムが実行している間にitmdumpを終了したことです。 現在のGDBセッションは、ITM出力なしに、通常通り動きますが、次のGDBセッションは先程お見せしたメッセージと共にエラーになります。

もしくは、monitor tpiuが発行された後にitmdumpを実行したことです。 そのため、itmdumpはOpenOCDが書き込んでいたファイル / 名前付きのパイプを削除します。

解決策

  • GDB、OpenOCD、itmdumpを終了/killします。
  • itmdumpが使っていたファイル / 名前付きのパイプ(例えば、itm.txt)を削除します。
  • OpenOCDを起動します。
  • 次に、itmdumpを起動します。
  • 次に、monitor tpiuコマンドを実行するGDBセッションを起動します。

Cargoの問題

"can't find crate for core"

症状

   Compiling volatile-register v0.1.2
   Compiling rlibc v1.0.0
   Compiling r0 v0.1.0
error[E0463]: can't find crate for `core`

error: aborting due to previous error

error[E0463]: can't find crate for `core`

error: aborting due to previous error

error[E0463]: can't find crate for `core`

error: aborting due to previous error

Build failed, waiting for other jobs to finish...
Build failed, waiting for other jobs to finish...
error: Could not compile `r0`.

To learn more, run the command again with --verbose.

原因

nightly-2018-04-08より古いツールチェインを使っており、rustup target add thumbv7em-none-eabihfの実行を忘れています。

解決策

nightlyを更新し、thumbv7em-none-eabihfターゲットをインストールします。

$ rustup update nightly

$ rustup target add thumbv7em-none-eabihf