そのボード、僕が積んでおきます。

たくさんの電子工作基板が積みっぱなしになってるので、頑張って工作しようとしていますが、どんどん溜まっていっております。

aitendoの「USBコントローラ基板」をロジアナとして使う

 ちょっとUART(かなぁ)と思われる通信の中身を見たくなって、ロジックアナライザ(以下、ロジアナ)が欲しくなったので、なんとか格安のものはないかと調べ、aitendoの2,000円くらいの基板をロジアナにした話です。

f:id:hine:20170107225236j:plain

格安のロジアナを求めて

 手軽なロジアナがないか検索していて、最初にたどり着いたのが、SeeedStudioさんの「LOGIC PIRATE」です。これは中々おもしろいもので、実はオープンソース・ハードウェアとオープンソース・ソフトウェアの組み合わせでロジアナとして動かしています。

 

詳細は以下のページ。

http://dangerousprototypes.com/docs/Logic_Pirate

 

 オープンソース・ハードウェアなので、回路図や部品リストも提供されています。PIC32MX250を使っていて、頑張ればその他の部品も集められなくもなさそうです。

Logic pirate schematic.png

 これはこれとして非常に興味深いのですが、製品として日本で売っているところが見つからず、また海外通販だと時間と送料がかかりそうなのでもう少し調べてみることにします。

 

 そして、次にたどり着いたのが、オープンソース・ソフトウェアの「Sigrok」。このソフトウェアの対応ハードウェアが非常に豊富。

f:id:hine:20170108114907p:plain

 秋月なんかでも売ってるLAP-C等のロジアナにも対応しているのですが、この部品一覧を眺めていて気になった(僕の「安そう」センサーが反応した)のがこちら。

https://sigrok.org/wimg/thumb/e/ec/Lcsoft-miniboard-front.png/180px-Lcsoft-miniboard-front.png

Lcsoft Mini Board - sigrok

 

で、調べてみると、Amazonで売っています。

1,000円以下でも手に入り、Prime対応のものでも1,200円代です。

 このボードをロジアナに使おうとしている人の話を見ると、「EEPROMを容量の大きいものに変えたい」「入力バッファICを外付けしたい」と言った話がよく出ています。 

 (※ただ、このタイプのボード、どうやらとあるメーカーさんのベンダーコードが書き込まれたものも出回っているようで、それを問題視する声もあるようです。)

 

 もう少し調べてみると、かつてはaitendoでも売っていたようです。現在は部品の搭載されていないボードのみが販売されています。

 aitendoではCY7C68013の単体販売もあるので、これを組み立てるという手もありそうです。僕は知らなかったのですが、このCypressのEZ-USB FX2シリーズのマイコンはかなり前からロジアナに使われているようです。

 

 そして、さらにこのマイコンをaitendoで検索すると、この商品にたどり着きました。

 このボード、EEPROMは小さめですが、バッファICとして74HC244Dも搭載されていて2,000円弱で買えます。これもSigrokで使えそうな気がします。何と言っても、aitendoなので、ちょっと足を伸ばせばすぐに買いにいけるところが嬉しい。

 

USBコントローラ基板の入手

 ということで、いざaitendoへ!と思ったのですが、aitendoはまだ年始休みの最中。とりあえず、購入はaitendoが開店する1月6日まで待って、店頭で買うつもりでいました。

 

 そして、初売りの1月6日。13時開店とたかをくくっていたら、初売りということで11時に開店していた模様。そしてなぜか前日までは在庫が豊富にあるかに思えたこのUSBコントローラ基板、昼過ぎに気がついたときには、ウェブの通販サイトでは「在庫なし」の表示に。

(※1月8日時点でまだ再入荷されていません。)

 

 ウェブで在庫切れでも店頭在庫はあることがあるので、念のためと思って店頭に向かい、店員さんに在庫の確認をしたところ、「すいません、売り切れてしまったんです。」との返答。なんだってぇぇぇぇ!

 

 がっかりと店内で別の商品を見ていたところ、先程の店員さんが駆け寄ってきて「さっき探してた商品はこちらですか?1個だけ見つけました。」とのこと。やっほい!ということで、ラスワンをゲットしたので、このエントリーを読んで興味を持っても、再入荷するまでは手に入れることができません。ごめんなさい。

 

このとき合わせて、プローブとして使うために、以下のものも購入しました。

  

USBコントローラ基板の設定 

 どうやらこの、CypressのEZ-USB FX2をSigrokで使う場合、2つの方法があるようです。

 

 一つは、EEPROMに「fx2lafw」というオープンソースファームウェアを書き込み、そのファームウェアから起動する方法。ただ、この基板のEEPROMはとても小さく、ベンダーIDの保存くらいにしか使えないので、EEPROMを換装するか、外付けしないといけません。前述のLcsoft Mini Boardとその互換ボードでEEPROMの増量を検討している人が多いのは、EEPROMにファームウェアを書き込むためでしょう。

 

 もう一つの方法は、Sigrokとの接続時に、SigrokからファームウェアをRAMに流し込んでもらいそれで起動する方法です。このファームウェアはEEPROMに書き込むファームウェアと基本的には同じものです。この場合、SigrokはボードのVID/PIDを見て流し込むファームウェアを決めますので、流し込みたいファームウェアに対応するVID/PIDをボードに書いておくことになります。

 

 EEPROMの容量が少ないこともあり、後者の方法で行くことにしました。これから行う作業の手順はこちらのページを参考にしています。

EZ-USBロジックアナライザー - neko Java Home Page

 

 このボードは8ch分のピンがでていますので、「fx2lafw-sigrok-fx2-8ch.fw」を使うこととします。このVID/PIDは、sigrok-firmware-fx2lafwのバージョン0.1.3から使えるようになったVID/PIDのようです。

sigrok-firmware-fx2lafw 0.1.3 released! | The ever-expanding world of sigrok

 

 今回、MacWindowsで動作を試みましたが、Macではうまく動作せせる事ができませんでした。Macでの動作検証は引き続き行うとして、今回はWindowsでの動作環境の構築について触れたいと思います。

 

必要なファイルのダウンロードとインストール

  • Windows10対応のFX2LPドライバ

Drivers for EZ-USB® FX1™, FX2LP™ , and FX3 - KBA94413 | Cypress Semiconductor

ダウンロードしたDriver.zipを展開しておいてください。

 

  • CY3684 EZ-USB FX2LP DVK Setup(開発キット)

CY3684 EZ-USB FX2LP Development Kit | Cypress Semiconductor

※リンク先のページからCY3684 EZ-USB FX2LP DVK Setupをクリック

ダウンロードしたCY36845Setup.exeをダブルクリックしてインストールしておいてください。設定等はそのままいじらずにデフォルトのままで構いません。

 

  • Sigrok PulseViewのWindows用Nightly build

Downloads - sigrok

※リンク先のページからNightly installer binariesのPulseViewをクリック

ダウンロードしたファイルをダブルクリックしてインストールしておいてください。こちらもデフォルトのままで構いません。

 

標準状態でのUSBコントローラ基板の認識

 まずは、USBコントローラ基板の設定を行うために、標準状態で認識させます。

 

  1. USBコントローラ基板上のジャンパピンをL側に挿す(このジャンパピンをL側に挿している状態では、このマイコンの本来持っているVID/PIDで起動します)
  2. ボードとWindowsをつなぐ
  3. Windowsのデバイスマネージャを確認すると「不明なデバイス」になっているので、ドライバの更新を行い、先程ダウンロードしたドライバの適切なOSを選択する
  4. バイスが「Cypress FX2LP NO EEPROM Device」と認識されればOK

 

EEPROMの消去

 念のために、EEPROMを消去し、EEPROMに記録されているVID/PIDをクリアします。このページを参考にしてください。

 

  1. 先程インストールしたCypressの開発キットからCyControlを起動する(スタートメニューにはないので、C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Windows Applications\Application Source files\c_sharp\controlcenter\bin\Release\CyControl.exeをダブルクリックして実行)
  2. CyControlの画面に「Cypress FX2LP NO EEPROM Device」が表示されているはずなので、それを選択する
  3. ベンダ書き換えプログラムをロードする(Cypressのメニューから、Program→FX2→RAMを選択し、ファイル選択ダイアログでC:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Firmware\Vend_ax\Vend_Ax.hexを選択、CyControlの画面の下部のステータス領域でProgramming Succeededと表示されるのを待つ)
  4. CyControlの画面の左側から、Cypress FX2LP NO EEPROM Device→Configuration1→Control endpoint(0x00)を選択する
  5. CyControlの右側の画面で、Data to send(hex)に「FF」を入力、Byte to transferに1が表示されていることを確認、DirectionがOutであることを確認した上で、Req typeにVendorを選択、Req codeには0xA2を入力、wValueとwIndexxはともに0x0000のままで、「Transfer Data」ボタンをクリックし、CONTROL OUT transfer completedと表示されるのを確認する(※参考にしたサイトではReq codeはA9となっていますが、EEPROMが小さい場合はA2となります)

f:id:hine:20170109093605p:plain

 

VID/PIDの書き換え

 次に、このデバイスに「fx2lafw-sigrok-fx2-8ch.fw」用のVID/PIDを設定します。

 

  1. CyControlで、先程の作業のまま、Data to sendを「C0 50 1D 8C 60 00 00 00」に書き換え、「Transfer Data」ボタンをクリック、CONTROL OUT transfer completedと表示されるのを確認する

f:id:hine:20170109094245p:plain

 

fx2lafw-sigrok-fx2-8chとしてUSBコントローラ基板を認識させる

 次に、書き換えたVID/PIDのデバイスとしてUSBコントローラ基板を認識させます。
  1. USBコントローラ基板をPCから取り外します(そのままUSBを抜いてください)
  2. USBコントローラ基板のジャンパピンをS側に挿し替える(このジャンパピンをS側に挿している状態では、EEPROMに保存されているVID/PIDで起動します
  3. ボードとWindowsをつなぐ
  4. Windowsのデバイスマネージャを確認すると「不明なデバイス」になっていることを確認する
  5. Zadigの立ち上げ(スタートメニューから、Sigrok→Zadig)
  6. バイス選択のプルダウンに「Unknown Device #1」が表示されているか確認する(表示されない場合は、メニューからOption→List All Devicesを選択してみる)
  7. USB IDが、先程設定した1D50/608Cになっていることを確認する
  8. Driverが「(None)」になっていることを確認する(スクリーンショットでは、すでにDriverインストール後なので、(None)ではなくなっています)
  9. バイス名の右のEditラジオボックスにチェックして、適当な名前をつける(僕は「Sigrok8ch」という名前を付けました)
  10. 「Install Driver」ボタンをクリックする
  11. インストールがうまくいっていると、下記スクリーンショットのように、Driver部分がWinUSBとなるので、確認する
  12. Windowsのデバイスマネージャで、ユニバーサルシリアルデバイスの中に、先程自分でつけたデバイス名として認識されていることを確認する

f:id:hine:20170109100827p:plain

 
 以上で、USBコントローラ基板をロジアナとして使うための設定は完了しました。キーとなるのは、基板上のジャンパピンの挿し替えです。今後、ロジアナとして使う場合は常に「S」側に挿したまま利用します。
 

SigrokからUSBコントロール基板を利用する

 スタートメニューからSigrokを立ち上げます。初回立ち上げ状態だと、Demo Deviceが接続された状態となっており、そのままの状態で左上の「Run」をクリックすると、下記のようなデモが確認できます。

f:id:hine:20170109103050p:plain

 
 上部のアイコンが並ぶ場所からDemo Deviceと表示されている部分が、デバイスの選択するプルダウンとなっています。右側の▼部分をクリックし、「sigrok FX2 LA (8ch)」を選択すると、以下のような画面となります。

f:id:hine:20170109103352p:plain

 
 見ての通り、このUSBコントローラ基板はデジタル8chのロジアナとして利用できるデバイスとなります。基板上の1〜8のピンが、画面上のD0〜D7に対応しています。
 
 このSigrokのPulseViewは、ログを取り始めるトリガーの設定もできますし、幾つかのピンを組み合わせてI2CやSPI、UARTなどのプロトコルを解析させる事もできます。解析できるプロトコルは、以下のプロトコルデコーダの一覧で確認できます。

Protocol decoders - sigrok

 

ロジアナとして使ってみる

 とりあえずGR-KURUMIで1msecごとにHIGH/LOWを切り替えるプログラムを組み、どの程度の精度で取れるか見てみることにします。GR-KURUMIの方の1msec精度も完全ではありませんので、あくまでも参考値となります。

f:id:hine:20170109112726p:plain

 これを見ると、1008usecで切り替わっていると読み取れます。少なくともmsec単位での読み取りとかでは全く問題がなさそうです。
 
 次に、UARTを読んでみます。プロトコルデコーダでUARTを選択し、UARTのRX/TXに接続したピンD6/D7を選択し、実行してみます。

f:id:hine:20170109113751p:plain

 このように、UARTの送受信のデータが取得できます。これで通信がうまく行われているかの確認などを行うことができます。Arduinoなどでシリアルを使うプログラムを作る場合、シリアルモニタでのデバッグが難しいことがありますが、ロジアナがあれば通信の確認を行えます。

 

 ということで、非常に安価にロジアナを手に入れることができました。今後のものづくりが非常に捗りそうです。今年のものづくり初めとしてはなかなかいいものができました。

  

【おまけ】USBコントローラ基板のケースを作る

 せっかくロジアナとして利用できるようにUSBコントローラ基板を設定し、プローブ用のケーブルも買ってきたので、アクリルで簡単なケースを作ることにしました。

 サイズを計測してInkspaceで 形を起こして、TechShop Tokyoのレーザーカッターでアクリルをカットしてケースを作成しました。

f:id:hine:20170109110929p:plain

 
レーザーカッター用に最適化したファイルではありませんが、Inkspaceで作成したファイルを置いておきます。(Adobe Illustratorで開くことができます)