トラ技2014年3月号の、ARM基板を購入したが、使い方がいろいろわからなかったので、調べた結果をメモする。せっかく調べた結果がどなたかのお役に立てば幸いである。
確認が不十分だったり、説明や図が不足している部分は、追って書き足したい。
- Cortex-M0にUSBを搭載した。USB物理層+内蔵ROMにMSC(Mass Storage Class)/HID(Human Interface Device)/CDC(Comunication Device Class)/DFU(Device Firmware Upgrade)クラスドライバ搭載。ROM内には、ブートローダ、32ビット整数除算ルーチン、フラッシュ書き込みルーチンなども内蔵。
- ブートプロセスは、User's Manual の Section 20.10 にフローチャートが記載されている。
リセット時にISPモード(PIO0_1がL)なら(POI0_3はUSB_VBUSにプルアップされているので)USB
- リセットボタンとISPボタンを同時に押して、リセットボタンを先に離し、ISPボタンを後に離す。
- つまり、リセット時にISPモード(PIO0_1がL)なら(POI0_3はUSB_VBUSにプルアップされているので)マスストレージデバイスをエミュレートして、USB ISPモードで起動する。
- そうでなければ、User Code が起動される。
- 起動時に、ISPボタンを操作してドライブに firmware.bin が存在するのは前者で、通常にリセットして mbed.htmlが存在するのは後者である。前者は、どんなファームウエアを書いてもハードコーディングで起動する。「地蔵」にはならずに、なにかしら書き込むことができる状態にすることができる。
とりあえずはこちらにまとまっている。LPC の話だが、LPCXpresso 以外は Cortex-M 汎用と考えてもそう違いない。
自分なりにまとめるとこんな感じだろうか。
- LPCXpresso 自体は、ボードも含めたスターターキットのようなものを指しているようだ。
- IDEは本家からダウンロードする。
- Ubuntu 14.04 64bit の場合には、INSTALL.txt にしたがって、次をインストールする。
sudo apt-get install libgtk2.0-0:i386 libxtst6:i386 libpangox-1.0-0:i386 \
libpangoxft-1.0-0:i386 libidn11:i386 libglu1-mesa:i386 \
libncurses5:i386 libudev1:i386 libusb-1.0:i386 libusb-0.1:i386 \
gtk2-engines-murrine:i386 libnss3-1d:i386
- アーカイブを展開して出てくる、Installer_LPCXpresso_7.3.0_186_Linux-x86 を実行すると GUI インストーラが起動するのでインストールする。/usr/local/lpcxpresso_7.3.0_186 以下にインストールされる。
- 次のコマンドで起動すると eclipse っぽいIDEが起動する。
#!/bin/bash
export UBUNTU_MENUPROXY=0
/usr/local//lpcxpresso/lpcxpresso
- Help→Activate→Create serial number and register(Free Edition) でシリアルナンバーを生成し、クリップボードにコピーしておく。
- IDE内のウェブブラウザで登録ページに行くので、アカウントを作成する。
- メールでユーザ名(自分で指定する)とパスワードが送られてくるので、ログインする。
- 戻って、シリアルナンバーを登録すると、Activation keyが表示される。
- Help→Activate→Activate(Free Edition) に、キーを貼り付ける。
- 評価用 4k から Free 256k に拡張される。
- 商用コンパイラ。
- ARM公認。
- 30日評価版(オブジェクトサイズ無制限)、Kickstarter(期間無制限、オブジェクトサイズ??KB制限)は無料。
- 商用コンパイラ。
- いろいろなアーキテクチャのコンパイルを同じ使用感のIDEで使える。
- 30日評価版(オブジェクトサイズ無制限)、Kickstarter(期間無制限、オブジェクトサイズ??KB制限)は無料。
- フリーコンパイラ。
- CodeSoucery がコンパイル済をバイナリ配布している。
- Ubuntu の場合、gcc-arm-none-eabi でベアメタル用のコンパイラがインストールされる。
- 自分でコンパイルしてクロス用のGCC を作るのは、ツールや関連ライブラリのコンパイルもしなければならないので、結構大変。
私の拙い理解で説明すると、mbed とは、だいたい次のようなものをひっくるめたものだ。
- ブラウザから使えるオンラインコンパイラ(http://mbed.org/)
- オンラインコンパイラに付属するコミュニティ。
- オンラインコンパイラのバックグラウンドで動作する、ARM純正の制限無しの最適化コンパイラ。
- これらをサポートするファームウエア。ファームウエアの機能として、USB接続したら mass storage, CDC(シリアルコンソール)、HIDが、マルチエンドポイントとして動作する。
- オンラインコンパイラの出力を USB マスストレージにコピーする、ドラッグ&ドロップ書き込み。
- 高度に抽象化された C++ ライブラリ。
- C++ライブラリではボード定義がサポートされていると LED1 などの抽象名でピンを呼べる。
- このC++ライブラリはエクスポートして、Keil などサードパーティのコンパイラでコンパイルできる。
- C++ ライブラリには printf が含まれており、printf デバッグができる。printf の出力先はHIDを通じてホストのシリアルコンソール。
- ここかここを起点にたどるとわかりやすいと思う。
個人的には、ラピッドプロトタイピングだけでなく、量産にも適用できそうなポテンシャルがあるところが一番の特徴だと思う。
- mbed とは関係なくなるが、CMSIS-DAPを OpenOCD から制御することができる。
- OpenOCD はデバッガのインターフェイスで、ホスト側で動作する。
- 統合環境のデバッガコマンド(gdb互換)や、シリアルコンソールの通信文字列を送受信する daemon として動作し、それをJTAGコマンドとしてハードウエアとやりとりする。
- JTAGコマンドは USB上に伝送されることが多い。
- こちらの図がわかりやすい。
- Keil のデバッグアダプタ。
- ARM汎用。
- ターゲットとの接続は、JTAG または SWD。
- ULINK, ULINK-MK がある。
- ST のデバッグアダプタ。
- STM32専用。
- ターゲットとの接続は、JTAG または SWD。
- 通常のアダプタは、STLink/V2。単体で売れられていて安い。ホストとはUSBのHID接続。マスストレージは、自身のファームウエア書き換えに使われる。ファームアップデートで STLink/V2-1同等になる??UART結線は???
- STLink/V2-1 は、Nuclreo などの mbed 対応ボードに組み込まれている。仮想COMポート機能なども増えている。
- こちらを参照。
USB-ISP を使ってファームウエアを書く方法。
- 特集ページから USB-CDC ファームウエアをダウンロードする。
- USB-UARTファームウエアを書き込む。
- sudo modprobe cdc-acm でCDC ACMドライバをインストール。
- いったん、USBを抜く(リセットではダメ)。
- /dev/ttyACM* が見えている。9600/8/N/1 で通信する。
- cu などで通信する。GUI が好きなら cutecom などもOK。
- CMSIS-DAPファームウエアを書き込む。
- リセットする。
注意として、このボード自身が mbed のターゲットになるわけではない。以下のファームウエアを焼き込むと LPC1114 をターゲットとした mbed インターフェイスとして使える、ということ。
- 特設ページからビルド済バイナリをダウンロード。
- mbed ファームウエアを書き込む。
- リセットする。
- USBドライブが見えている。ドライブの中に、firmware.bin が見えていれば USB-ISPが動作しているので失敗。mbed.htm が見えていれば、mbed が動作しているので成功。
- mbed でコンパイルしたファームウエアをドライバにコピーする。
- リセットする。
- ユーザプログラムが動作する。
この方法では、mbed オンラインコンパイラを使って開発できるが、書き込みは USB-ISP になる。書き込みも mbed インターフェイスで行いたい場合は、TG-LPC11U35ボードを2枚用いて一枚をインターフェイス、もう一枚をターゲットとする必要がある。相互には、SWDフラットケーブルで接続する。
- 本誌発売より遅れたが、正式サポートのアナウンスがあった。
- mbed.org でアカウントを作成する。ハンドル名、メールアドレス、パスワードが必要。
- 右上の[Compiler]ボタンを押すと IDE が起動する。
- メニューの New → New Program で、Platform に TG-LPC11U35-501を、Template に Blinky などを選択する。
- テンプレートが生成されるので、コンパイルする。
- 結果がダウンロードされるので、それを USB-ISP で書き込む。
- LED1(基板中央部の赤)がチカチカすれば成功。
近藤靖浩
Last modified: Sun Apr 20 17:13:20 JST 2014