Computer & RF Technology

LabToolのソフトウェアをMac OSXでビルドする

前回からちょっと間が空いてしまいましたが、LabToolネタの続きです。改めましてLabToolについてですが、NXP/Embedded Artistsによって発売されている、ロジックアナライザやオシロ、シグナルジェネレータ機能を持つモジュールです。LPC-Link2というデバッガボードにアドオンすることで、これらの機能を実装しています。LPC-Link2とは、本来はJTAG等を使うためのデバッガインターフェースですが、汎用ボードとして使えるようにいくつものコネクタで、信号が外部に引き出されています。これに搭載されているMCUは、Cortex-M4/M0/M0というマルチコアARMのLPC4370というチップです。80MspsのADCを持っていたり、サブコアとしてCortex-M0を2つ搭載しているなどちょっと変わった機能を持っています。このMCUの機能を活用した例がLabToolということのようです。

LabToolを動作させるためには、ホスト側のPC等にソフトウェアが必要です。前回書いたように、ソースコードはオープンソースとして公開されており、Windows用とRaspberry Pi用については、すぐ使えるバイナリが提供されています。Raspberry Piを標準プラットフォームとして選択したということのようです。ところが、普通のPC向けLinuxやMac OSXには残念ながらバイナリは用意されていません。ソースコードをざっと眺めてみたところ、Mac OSXについても動作させることができそうでしたので、チャレンジしてみました。おおむね問題なく動作させることができているようですので、その手順を示したいと思います。

ソフトウェアはGUIツールキットとしてQtを使用しています。そのため、Qtの開発環境を準備する必要があります。開発環境をセットアップする方法はいくつかありますが、qt-project.orgからダウンロードするのがもっとも簡単だと思います。他にnokiaからもSDKが提供されていますし、brewで環境をセットアップする方法もあります。

今回はqt-project.orgからダウンロードしたQt-5.2を使用してみます。サイトのダウンロードページから、”Qt Online Installer for Mac (9 MB)“をダウンロードします。

image

qt-mac-opensource-1.5.0-x64-online.dmgを開き、インストーラをダブルクリックしてインストールを進めます。

image

ウィザードに従ってQtのインストール作業を進めますが、ダウンロード(400MByte弱)しながらインストールするので、完了するまでにはそれなりに時間がかかります。

image

他に必要なモジュールとして、USBアクセスのためのlibusbを用意する必要があります。今回はlibusbxを使用してみました。libusbxはbrewでインストールします。brewを使う場合にはbrew updateしてから作業したほうが良いようです。libusbがすでにインストールされている場合はコンフリクトしますので、事前にunlinkしておきます。

$ brew update  
$ brew unlink libusb  
$ brew install libusbx

その他、labtoolの動作にdfu-utilが必要になりますので、これもbrewでインストールしておきます。

$ brew install dfu-util

さて、ツールやライブラリの用意ができたら、ソースを準備してビルドします。ソースはgithubから取得します。

$ git clone https://github.com/embeddedartists/labtool

コマンドラインからビルドする方法もありますが、今回はQt Creatorでビルドしてみます。/Applications/QtフォルダにインストールされたQt Creatorを起動します。

image

Qt Creatorを起動するとこのような画面が表示されます。

image

ここで’Open Project…‘ボタンを押して、ダウンロードしたソースコードにあるlabtool/app/LabTool.proを開きます。

image

プロジェクトを開くとこのような表示になります。

image

libusbxのパスを設定するためにプロジェクトファイルを一部修正します。LibTool.proをダブルクリックして開き、INCLUDEPATHの設定にMac OSX用の設定を追加します。

INCLUDEPATH += .
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libusbx/MinGW32/dll/ -lusb-1.0
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libusbx/MinGW32/dll/ -lusb-1.0
else:mac: LIBS += -L/usr/local/Cellar/libusbx/1.0.17/lib -lusb-1.0 -lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation
else:unix:!symbian: LIBS += -L$$PWD/libusbx/Linux/ -lusb-1.0 -ludev

書き換える内容は、pkg-configで確認することができます。

$ pkg-config --libs --static libusb-1.0  
\-L/usr/local/Cellar/libusbx/1.0.17/lib -lusb-1.0 -lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation

準備ができたらビルドですが、念のため左下の設定ボタンを押して、Qtバージョン(4.8.1)とターゲット(Debug)を確認します。

ビルドボタンを押してビルドします。

image

ワーニングは出ますが、最後にステータスがグリーンになることを確認します。

image

ビルドが成功すると、LabTool-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debugというフォルダができ、その中にアプリがLabToolという名前で完成しているはずです。

image

さっそく起動してみたいところですが、LabToolと接続して動作させるためには、ファームウェアを用意し、書き込みのためにdfu-utilが使えるようにしておく必要があります。そのため、ファームウェアとdfu-utilを所定の場所にコピーしておく必要があります。

ファームウェアは、サイトからlabtool_binaries_2013-10-30.zip (84Kb) をダウンロードして展開し、firmware.binをlabtoolフォルダにコピーしておきます。

image

一方dfu-utilは、toolsフォルダ内のdfu-util-0.7-binaries/linux-i386フォルダ内に、brewでインストールしておいたdfu-utilのバイナリをコピーしておきます。

$ cp /usr/local/bin/dfu-util tools/dfu-util-0.7-binaries/linux-i386

起動前にLabToolをUSBで接続しておきます。

image

ファームウェア書き込みの関係で、最初はカレントディレクトリをlabtoolとしてコマンドラインから起動する必要があります。

$ cd labtool  
$ LabTool-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debug/LabTool.app/Contents/MacOS/LabTool 
Using libusbx v1.0.17.10830
Initializing library...
Failed to open device 1FC9:0018
Opened device 1FC9:0018
\[Probe\] bus: 253, port path from HCD: 1
->2
\[Probe\] speed: 480 Mbit/s (USB HighSpeed)

\[Probe\] Reading device descriptor:
\[Probe\]             length: 18
\[Probe\]       device class: 0
\[Probe\]                S/N: 0
\[Probe\]            VID:PID: 1FC9:0018
\[Probe\]          bcdDevice: 0100
\[Probe\]    iMan:iProd:iSer: 1:2:0
\[Probe\]           nb confs: 1

\[Probe\] Reading configuration descriptors:
\[Probe\]              nb interfaces: 1
\[Probe\]               interface\[0\]: id = 0
\[Probe\] interface\[0\].altsetting\[0\]: num endpoints = 2
\[Probe\]    Class.SubClass.Protocol: FF.FF.FF
\[Probe\]        endpoint\[0\].address: 85
\[Probe\]            max packet size: 0200
\[Probe\]           polling interval: 01
\[Probe\]        endpoint\[1\].address: 02
\[Probe\]            max packet size: 0200
\[Probe\]           polling interval: 01

\[Probe\] Reading string descriptors:
\[Probe\]    String (0x01): "Embedded Artists"
\[Probe\]    String (0x02): "LabTool"
\[Probe\] MCU PLL is running at 200 MHz
Calibration data:
 V/div     A0  A      A0  B       A1  A      A1  B   
-------  ---------- ----------  ---------- ----------
   20mV   0.0994865 -0.0000555   0.0943872 -0.0000512
   50mV   0.2614163 -0.0001324   0.2559450 -0.0001310
  100mV   0.5064960 -0.0002560   0.5089394 -0.0002563
  200mV   0.9960396 -0.0004950   0.9962217 -0.0004955
  500mV   2.7654913 -0.0013694   2.8068729 -0.0013746
 1000mV   5.4500269 -0.0026867   5.5113330 -0.0026983
 2000mV  10.2890467 -0.0050710  10.3855975 -0.0051073
 5000mV  22.3351648 -0.0109890  22.4448124 -0.0110375
Device connected

最初に、Failed to open device 1FC9:0018と出ていますが、ここでdfu-utilによってファームウェアがダウンロードされます。そして再試行によってオープンに成功し最後にDevice Connectedと表示されています。

ファームウェアはSRAMに書き込まれますので、USB接続を外して電源が切れてしまうと、再度書き込む必要があります。電源が供給されている間は書き込みが必要無いので、ダブルクリックでLabToolを起動しても大丈夫です。

起動に成功するとこのようなウインドウが表示されます。動作させる場合には、DevicesメニューからLabTool Deviceを選択しておきます。もしLabToolとの接続失敗している場合は、選択できなかったり、左上のLabTool Deviceの表示が赤字になります。

image

以上でLabToolのビルドは完了です。使い方については、前回のメモを参照してください。

参考までにコマンドラインからビルドするには下記のように行います。qmakeコマンドでMakefileを作成し、makeします。この場合はカレントディレクトリにアプリがビルドされます。他の手順は上記と同様です。

$ cd labtool/app
$ mkdir build  
$ cd build
$ /Applications/Qt/5.2.0/clang_64/bin/qmake ..
$ make

成功したらbuildディレクトリ内にLabTool.appが作られているはずです。

ファームウェア書き込みの関係で、特定のディレクトリから起動しなければならないのが面倒です。少し修正が必要になりそうですが、対策を検討してみたいと思います。

また、ファームウェアについては、ビルド済のバイナリを使用しました。ファームウェアのソースコードも提供されているのですが、これのビルドには、開発環境としてKeil uVisionが必要なようです。フリーで利用可能なサイズを超えてしまうので残念ながら構築することができていません。ソースコードを眺めてみると、SCTモジュールを使った周波数カウンタなども含まれているようですので、試してみたいところなのですが。。こちらも何か方法がないか検討してみたいと思います。

comments powered by Disqus