macOSでst-linkを利用してSTMなマイコンにhexファイルを書き込みたい

#st-linkのインストールしてhexファイルを書き込みできるようにする

- 準備
- cmakeのインストール
- libusbのインストール
- st-linkのインストール
- hexファイルを用意する（Bwhoopでチェック）
    - armコンパイラの準備
    - hexファイル作成
- 書き込んでみる。


## 準備

Developer Toolsが必要なので、Xcodeをインストールしておく。Command line tools等必要に応じてソフトウェアアップデートをしておく。gitコマンドはこの時点で使えるようになっているはず？

```bash:作業ディレクトの設定
$ sudo mkdir /usr/local/src
$ sudo chown -R 自分:グループ /usr/local/src
```


## cmakeのインストール

https://cmake.org/download/
より必要なtarボールをダウンロード

```bash:cmakeのmake&install
$ tar zxvf cmake-x.x.x.tar.gz
$ cd ./cmake-x.x.x
$ ./configure
$ make all
$ sudo make install
```

## libusbのインストール

http://libusb.info/
より最新のtarボールをダウンロード

```bash:libusbのmake&install
$ tar zxvf libusb-x.x.x.tar.bz2
$ cd ./libusb-x.x.x
$ ./configure
$ make all
$ sudo make install
```

## st-linkのインストール

```bash:st-linkのmake&install
$ git clone https://github.com/texane/stlink.git
$ cd stlink
$ make
$ cd build/Release
$ sudo make install
```

## hexファイルを用意する

### armコンパイラの準備

https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
解凍したバイナリを適当な場所に置いて（ここでは内臓ストレージ直下のDeveloperフォルダ）
.bashrcの中で

```bash:.bashrc
export PATH=$PATH:/Developer/gcc-arm-none-eabi/bin
```

の様にbinフォルダにPATHを通す

### hexファイル作成

```bash
$ git clone https://github.com/silver13/BoldClash-BWHOOP-B-03.git
$ cd BoldClash-BWHOOP-B-03/
$ cd gcc/
$ make bwhoop.hex
```
のようにサクッと作成できます。


## 書き込んでみる

```
st-flash --format ihex write /dev/tty.hogehge bwhoop.hex 0x8000000
```
こんな感じでいけるのかな。検証は後日。

## ST-LINK V2を入手した

### とりあえずST-LINK V2を繋がず実行

```bash
$ st-util 
st-util 1.4.0-11-ga2a707e
2017-11-**T**:**:** WARN src/usb.c: Couldn't find any ST-Link/V2 devices
```

### ST-LINK V2を繋いで再度実行

```bash
$ st-util 
st-util 1.4.0-11-ga2a707e
2017-11-**T**:**:** INFO src/usb.c: -- exit_dfu_mode
2017-11-**T**:**:** INFO src/common.c: Loading device parameters....
2017-11-**T**:**:** WARN src/common.c: Invalid flash type, please check device declaration
2017-11-**T**:**:** INFO src/gdbserver/gdb-server.c: Chip ID is 00000000, Core ID is  00000000.
2017-11-**T**:**:** INFO src/gdbserver/gdb-server.c: Listening at *:4242...
```

どうやら正しく認識してるみたい。ということはst-flashコマンドもシリアルポートの指定は必要ないのかもしれない。マイコンボードが届いたら書き込み検証してみる。

## 書き込んでみた

```bash
$ st-util
st-util 1.4.0-11-ga2a707e
2017-11-**T**:**:** INFO src/usb.c: -- exit_dfu_mode
2017-11-**T**:**:** INFO src/common.c: Loading device parameters....
2017-11-**T**:**:** INFO src/common.c: Device connected is: F0 small device, id 0x10006444
2017-11-**T**:**:** INFO src/common.c: SRAM size: 0x1000 bytes (4 KiB), Flash: 0x4000 bytes (16 KiB) in pages of 1024 bytes
2017-11-**T**:**:** INFO src/gdbserver/gdb-server.c: Chip ID is 00000444, Core ID is  0bb11477.
2017-11-**T**:**:** INFO src/gdbserver/gdb-server.c: Listening at *:4242...
^C
```

繋がった！！STM32F0とのこと、ちゃんとIDも拾っている。
デバッグモードに入りポート番号4242でgdbの接続を待ち受けているらしい。とりあえず動いた。

```bash
$ st-flash --format ihex write ./bwhoop.hex 
st-flash 1.4.0-11-ga2a707e
2017-11-**T**:**:** INFO src/common.c: Loading device parameters....
2017-11-**T**:**:** INFO src/common.c: Device connected is: F0 small device, id 0x10006444
2017-11-**T**:**:** INFO src/common.c: SRAM size: 0x1000 bytes (4 KiB), Flash: 0x4000 bytes (16 KiB) in pages of 1024 bytes
2017-11-**T**:**:** INFO src/common.c: Attempting to write 15504 (0x3c90) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003c00 erased
2017-11-**T**:**:** INFO src/common.c: Finished erasing 16 pages of 1024 (0x400) bytes
2017-11-**T**:**:** INFO src/common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2017-11-**T**:**:** INFO src/flash_loader.c: Successfully loaded flash loader in sram
2017-11-**T**:**:** ERROR src/flash_loader.c: flash loader run error
2017-11-**T**:**:** ERROR src/common.c: stlink_flash_loader_run(0x8000000) failed! == -1
stlink_fwrite_flash() == -1
```

ぐぬぬぅ〜〜