SW4STM32 Mac版でterget firmwareがERROR__UNZIP_ISSUEでダウンロードできない.

なんで?

 

STM32の開発環境を構築する(わりと楽に) - yuqlidの日記

 

に従って環境構築をしていた.

f:id:masa_flyu:20170625153615p:plain

Project Firmware Configurationで,Download target firmwareを押すと,(おそらく)正常にダウンロードがなされた後で,以下のエラーダイアログが出る.

 

f:id:masa_flyu:20170625153624p:plain

 

原因不明

軽く検証してみたところ...

STM32F4ではなくF0ならOK,Cube HALではなくStdPeriphではOK,mac版ではなくWindows版ならOK

F4かつCube HALかつmacのときだけ出現する謎エラー...

 

原因不明のまんまだが,ちょっと強引な方法だけど解決できた.(たぶんもっとマシな方法がいくらでもある)

 

解決方法

1.Project Firmware Configuration のDownload...ボタンのすぐ下にある'Firmware installation'を選択

f:id:masa_flyu:20170625160532p:plain

 

2.画像の中腹にあるFirmware installation repositoryのディレクトリを覚える(初期設定なら/Users/ユーザー名/.ac6/SW4STM32/firmwares)

f:id:masa_flyu:20170625160314p:plain

 

3.Finderで開く

※画像ではfirmwaresの中に,ダウンロードに成功したfirmwareが入っているが,これは全て完了後の画像のため.何も入ってなくてもOK.

f:id:masa_flyu:20170625161046p:plain

4.Project Firmware Configurationに戻り,Download terget firmwareボタンを押す

 

ダウンロードが進行すると,先ほどFinderで開いたフォルダの中に「.tmp_STM32Firmwareinstall_xxxxxxxxxx」といった名前のフォルダが生成される.

 

そしてその中にstm32cube_fw_f4_v1150.zipが生成されていく.これが今ダウンロードしている必要なzipファイル.

 

このフォルダはダウンロードが終了し,zipの展開が終わると直ちに削除される.今回のエラーはダウンロードは成功したが,zipファイルの展開でつまづいてるだけなので,zipファイルを手動で展開すればうまくいく.

 

そのためにzipファイルのダウンロードが完了した瞬間(Project Firmware configurationの下部の進捗バーが100%になったら),zipファイルをcmd+cでコピー,

一つ上のディレクトリにペーストする.

 

(別にコピーしないでも移動させるだけでもいいかも?)

 

f:id:masa_flyu:20170625162414p:plain

 

5.zipを展開する(展開場所はFirmware installation repositoryのディレクトリ)

 

これで/ Firmware installation repositoryのディレクトリ /STM32F4-Discovery_FW_V1.1.0

フォルダが作られた

 

6.Project Firmware configurationに戻り,一度上部の選択肢を変更し戻す(Hardware Abstruction LayerからNo firmwareに.再びNo firmwareからHardware Abstruction Layerに.)

 

Download target firmwareボタンが消え,「Firmware 'STM32Cube_FW_F4_V1.15.0' has been found.」という記述が増えている.これで解決...

SIP解除:「csrutil disable」しても「Command not found」となる場合(macOS Sierra or OS X El Capitan )

結論を先に.

Command + R では無く, Option(Alt) + Command + R

 

 

愛用しているMacBook Pro Late 2013 (13インチ).

新しもの好きな僕としては,最新OSはPublic Betaの段階からインストールしてしまう.OS X El CapitanのときもSIP (System Integrity Protection)の問題など,何も考えずに真っ先にインストールした.

しかし広く公開されているSIP無効化手順

①Command + RでOS Xユーティリティ起動

②メニューバーよりターミナル起動

③「csrutil disable」を打つ

をしたところ

「Success」などの単語は無く「Command not found」という冷たい文字が出てくるのみ.2015年当時は何度調べても,何度やり直しても同じことを繰り返すのみ.

Late 2013は古すぎてコマンド自体が存在しないのかな??という曖昧な結論を得て,結局そのまま放置して1年半経ってしまった.

 

最近職場のiMac Late 2009のSIPを解除する必要が出た.7年も前のMac,一筋縄ではいかないだろうと思ったが,いたって普通に解除できた.

そこから疑問に思い,軽く調べたところとてつもなく簡単に解除できた.

 

原因:Command + Rでは,古いバージョンの「ユーティリティ」が起動する場合がある

さらなる原因:Bootcampなどでパーティションが分かれているときに,ユーティリティのある領域が古いまま保たれてしまう??(よくわかってない)

 

解決策:Option(Alt) + Command + Rで最新版の「macOS ユーティリティ」をインターネット経由でダウンロード,あとは通常通りターミナルで「csrutil disable」する.

 

こんな簡単なことだったとは...