元高専生のロボット作り

元高専生のロボット作り

主にプログラミング, 電子系について書きます。たまに機械系もやります。メモ代わりの記事ばっか書きます

ODriveにファームウェア書き込めないとき

以下はほとんど以下のpgrading firmware with a different DFU toolの翻訳ですが、
Zadigで操作を行ったPCとは別のPCに接続するとうまくいったという忘備録です。
https://docs.odriverobotics.com/odrivetool

まず、ODriveをDFUモードにします。

ODriveの電源を切ってから、ODriveのDIPスイッチをRUNからDFUに切り替え、GPIOの6番ピンをGNDに接続します。
そのあとDriveの電源を入れてください。

以下のURLからファームウェアの.hexファイルをダウンロードできます。
Releases · madcowswe/ODrive · GitHub

ODrive24Vのv3.6だったら以下を選びます

  • ODriveFirmware_v3.6-24V.hex


次に、以下のURLから、Dfu file managerとDfuSeDemoというソフトをインストールします。
ダウンロードしたzipを解凍し、中のexeファイルを実行するとインストールされます。
ダウンロードにはアカウントの作成が必要です。
https://www.st.com/en/development-tools/stsw-stm32080.html


インストールしたら、まずDfu file managerを起動します。
“I want to GENERATE a DFU file from S19, HEX or BIN files”を選択し、
次に"S19 or Hex…"を選択、先ほどダウンロードした.hexファイルを選択します。
他の設定はそのまま、“Generate…”をクリックすると.dfuファイルを生成できます。
名前は適当でいいです。ODriveFirmware.dfuとしておきましょう。

次に、ODriveをUSB接続して、DfuSeDemoを起動します。
「STM Device in DFU Mode」が表示されているはずです。

表示されていないことがあるかもしれませんが、そのときはZadigでドライバがlibusbに設定されているためかもしれません。
元のドライバに戻す必要があります。以下の手順に従ってください。
FAQ · pbatard/libwdi Wiki · GitHub
上記の手順を行った後も、デバイスマネージャでODriveがlibusbデバイスとしてインストールされている場合は、C:WIndows\System32\drivers\libusb0.sysというファイルを削除してください。(Zadigを使ってインストールし直すことができるので、大丈夫です)。

バイスマネージャのユニバーサルシリアルバスコントローラーでSTM Device in DFU Modeと表示されていれば大丈夫です。
バイスマネージャ最上部でlibusb-win32 devicesと表示されていたらダメです。

それでもダメな場合はあきらめて、Zadigで操作を行ったPCとは別のPCに接続するとうまくいくかもしれません。

右下の“Upgrade or Verify Action”という項目で、“Choose…”.ボタンをクリックします。
先ほど作ったODriveFirmware.dfuを選択します。
“Upgrade”ボタンをクリック、正しいデバイスタイプかの警告が表示されたら、yesをクリックして続行します。
これでODriveにフームウェアが書き込まれます。
ODriveの電源を切り、DIPスイッチをRUNモードに戻してodrivetoolを起動すれば認識されるはずです。