以前にプログラマブルデバイスGreenPAKを紹介させて頂きましたが、今回はUSBシリアルI2C変換基板V2[スイッチサイエンス、Elecrow]を使って何度も書き換え可能なMTPタイプのGreenPAKに書き込みを行うツール、GreenPAK Writerを開発しましたので、紹介したいと思います。MTPタイプのデバイス、SLG46824 /SLG46826 /SLG47004にプログラムを書き込む方法として、下記の方法があります。
1. 専用のデバッガ書込ツールSLG4DVKGSD
2. ArduinoUno書込
3. マイコン等からの書込
開発環境Go Configure Software Hubからデバッグや書込が可能な1.のSLG4DVKGSDが王道ですが、流通量が少ないようで、在庫なしのタイミングが多々あるのが難点です。その次に多いのは2.のArduinoからの書込ですが、コード上にプログラムを埋め込んでいるため、プログラムを変更する度にArduino側も書き換えが必要なため、手間が非常にかかります。既に確定したプログラムを大量に書込する場合は2.や3.が便利ですが、試行錯誤しながら使用する場合で、1.を使用しない場合は非常に不便でした。そこでUSBシリアルI2C変換基板V2を使ってEdgeやChrome等のブラウザから簡単に書込可能なGreenPAK Writerを開発しました。
Web Serial APIを活用して、ブラウザから直接、COMポートを介してI2CデバイスのGreenPAKを制御しています。そのため、スクリプトはすべてブラウザ内で完結しているため、クラウド等を介さずに書込や読込等の操作をすることが可能です。
使用方法は下記の手順で行います。
@事前に上図のようにUSBシリアルI2C変換基板V2のRST端子とIO0をケーブルでジャンパさせます。
AUSBシリアルI2C変換基板V2とGreenPAKをI2Cで接続してPC等のUSBポートにUSBシリアルI2C変換基板V2を接続します。
BGreenPAK Writerにアクセスして、接続後、ControlCode(I2C Address)をPing機能で確認します。多くのデバイスの初期状態は0x01(0x08)です。
CNVM消去を行います。
DGo Configure Software HubのExportからhexファイル形式を選択してエクスポートして、そのファイルをGreenPAK Writerに読み込ませて、NVM書込を実行します。
EGreenPAKの電源を一旦切ってから再度、投入すると書き込んだプログラムが実行されます。
なお、@でRST端子とIO0をジャンパさせる理由はSLG46824/SLG46826でNVM消去時にACKを返さないというエラッタがあるためです。エラッタによってI2Cに準拠しない挙動をします。そのため、消去時にI2C通信エラーが毎回発生して以降のI2C通信ができません。対策としてページ消去ごとにUSBシリアルI2C変換基板V2内のSC18IM704をリセットさせて、I2C通信エラーを強制的にクリアさせています。SLG47004ではこのようなエラッタはないため、ジャンパは不要ですが、SLG46824/SLG46826に合わせてジャンパさせてあっても問題ありません。
また、GreenPAKの設定メモリの書き込みや削除は1ページ16byte単位となっており、1ページ毎に書き換える必要があります。USBシリアルI2C変換基板V1ではSC18IM700を搭載しており、バッファサイズが16byteです。コマンドやアドレスを含めると20byte以上になり、バッファサイズ16byteを超えるため、書込ができません(分割して書込できない)。そのため、バッファサイズが256byteに拡張されたSC18IM704を搭載するUSBシリアルI2C変換基板V2のみ対応しています。なお、現在販売[スイッチサイエンス、Elecrow]しているUSBシリアルI2C変換基板はすべてSC18IM704を搭載したV2です。
MTPタイプのデバイスはSLG46824/SLG46826/SLG47004の他に先日発表されたSLG46827もありますが、まだ入手できていないため、使用可能か現時点では不明です。個人的にはSLG46824/SLG46826よりも、エラッタがなく、アナログ機能が強化されたSLG47004が好みです。SLG47004を活用したデバイスを今後、紹介したいと思います。