Microbridgeを作ってみた

オレンジピコさんの製品にPIC32のプログラマで[The Microbridge](https://geoffg.net/microbridge.html)を使ったものがあり、PIC16F1455のストックがあったので、作ってみました。

![写真（2022-08-12 17.22）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/5903f790-8985-6324-567b-fdcfd4e661f5.jpeg)

![写真（2022-08-12 17.22） #3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/d867dd82-6792-e26c-d942-34728e582507.jpeg)

基板はaitendoのもので、ミニUSBは5本ピンが出ているのですが、4本分しかパターンがないので、無理やり合わせています。

最初は秋月電子のCタイプ・ユニバーサル基板で作ろうかと考えたのですが、せっかくマイクロブリッジなので小さな基板で作ることにしました。

3.3Vのレギュレータは何かから外したHT7133です。

上の写真の時は付いてませんがLEDを付けました。ボタンSWを押すと点灯してISPモードになります。

ボタンSWはエポキシボンドで接着しました。

USBシリアルなモジュールはたくさんあるので、シリアルのピンは付けません。

このモジュールは通常はシリアルインターフェースとして機能しますが、ボタンSWを押すとプログラマになります。

CDCなデバイスで雪豹でもCDCのサポートはありchipKit DP32のbootは認識しますが、PIC16F1455やMCP2221AのCDCとは相性が悪いようで、Macは10.7以降になるようです。

PIC16F1455のfirmwareはオープンソースではなくhexでの提供で、ページには高電圧(VPP)を使った自力でのダウンロード方法がありましたが、PICKIT3があるのでWin7のMPLAB X IPE v5.45で書き込みました。このツールは重いのであまり使いたくはないですが、しかたありません。

pic32progのasciiプロトコルはArudinoを使った実装が初めにあって、それをPIC16F1455で使えるようにしたもののようです。

ボタンSWを押した後にpic32progを起動すると処理が行われます。

El Capitanのpic32prog(2.0.218)で試したら、認識はできるのですが、書き込みでエラーがでます。

Winのバイナリだと大丈夫でした。デバッグしてみたところserial.cをちょっといじったら、上手くいきました。

```
$ ./pic32prog -d ascii:/dev/tty.usbmodem264241 main32.hex 
Programmer for Microchip PIC32 microcontrollers, Version 2.0.258
    Copyright: (C) 2011-2015 Serge Vakulenko
       (ascii ICSP coded by Robert Rozee)

      Adapter: .......... OK1 OK2 - ascii ICSP v1N
    Processor: MX220F032B
 Flash memory: 32 kbytes
  Boot memory: 3 kbytes
         Data: 2404 bytes
        Erase: (100mS) done
   Loading PE: 1 2 3 4 (LDR) 5 6 7a (PE) 7b 8 v0301
Program flash: ######################## done
 Program boot: ## done      
target_program_devcfg: devcfg0-3 = 7fffffef ff60ce5b fff979d9 cfffffff
 Verify flash: ####################### done
  Verify boot: ## done       
 Program rate: 3138 bytes per second

total TDI/TMS pairs sent = 88048 pairs
total TDO bits received  = 17664 bits
total ascii codes sent   = 28546
total ascii codes recv   = 6099
maximum continuous write = 452 chars
O/S serial writes        = 2792
O/S serial reads (data)  = 561
O/S serial reads (sync)  = 10
XferFastData count       = 1330
10mS delays (E/X/R)      = 10/0/0
elapsed programming time = 0m 01s
```

パッチはpullreq出しました。

書き込み早くていいと思います。

pic32mx_usb_i2sを焼いてみましたが、問題ないです。

![FaGgXJXakAE_iQG.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/bfe0f8e0-e9b1-de12-cb07-ba2aa368f818.jpeg)

PIC16Fに書き込みする方法が無い場合は、すなおにオレンジピコさんの製品を購入するのが良いです。

オリジナルのRobert Rozeeさんが作ったArduinoを使ったバージョンはpic32progにArduinoのfirmwareのバイナリが入っていて、それをダウンロードしてから、処理を行うようです。

Arudinoのfirmwareは-b3オプションでAruduinoをリセットすると書き込まれるようです。

PICライターの電源は以下の三つのパターンがあります。

* ライターとターゲットで別々に電源を持っている
* ライターがターゲットに電源を供給
* ライターがターゲットから参照電源を貰っている

Microbridgeは一つ目のタイプで、Arduinoを使ったものは二つ目のタイプのようです。

MicrobridgeのサイトにあるWin用のEXEでは焼けないHEXがあるようです。

```
Programmer for Microchip PIC32 microcontrollers, Version 2.0.220
    Copyright: (C) 2011-2015 Serge Vakulenko
       (ascii ICSP coded by Robert Rozee)

      Adapter: . OK1 OK2 - ascii ICSP v1N
    Processor: MX220F032B
 Flash memory: 32 kbytes
  Boot memory: 3 kbytes
         Data: 11396 bytes
DEVCFG values are missing -- check your HEX file!
```