ARM
- 主に、廉価なARM Cortex-M3系基板で遊んでみます。
- 遊び方は、メーカー系押し付け環境(GUI)を使わないこと。
- GNU Cコンパイラ(CodeSourcery G++ Lite版(無償))とGNU Makeでビルドします。
- コンパイル環境はDOS(Win32) コマンドラインもしくはLinuxコンソールです。
- Flash書き込みソフトもメーカー系押し付け環境(DFUなど)を使わずにHID Bootloaderを使用します。
- HID Bootloaderには、ターゲット側メモリーの読み書き機能が付いているので、メモリー内容やI/O Portの確認、書き換え、逆アセンブル、あらかじめFlashに書き込んだブログラムの起動、などを行なうことができます。
- HID Bootloaderのターゲット側メモリーの読み書き機能を対話的に行なうツール(armon/armboot)を使用することで簡易USB-I/Oとして使用できます。
- バッチスクリプトの実行が出来るのでLED点滅のようなことならスクリプトだけで行なうことが可能です。
- I/O Portの確認、書き換え機能を使うと、プログラムを組まなくてもI/O Portの動作確認や配線チェックが可能です。(低速ですがグラフィカルな信号表示機能もあります。)
- HID Bootloaderのユーザーモード(ユーザーアドレス側で実行するモード)プログラムはブートローダーの機能+アルファ(AVR/PIC/ARMライター機能付き)になっていて、自由にコマンド追加が可能です。
- HID BootloaderはSTM32、LPC1343、LPC2388に移植済みです。
- HID BootloaderはPIC18F2550/18F14K50用のものとプロトコル、操作方法に関して類似性があります。
ARM 目次
- armon/armboot 移植済みの基板リスト
- STM32勢ぞろい
- ⇒interface 2009-05付録基板で遊ぶ
- ⇒interface 2009-05付録基板で遊ぶPartII
- ⇒interface 2009-05付録基板で遊ぶPartIII
- ⇒DesignWave 2008-05付録基板で遊ぶ
- ⇒STM8S-Discovery基板のST-Link側で遊ぶ
- ⇒STM32ブートローダー
- ⇒LPCXpressoで遊ぶ
- ⇒LPCXpresso/1768で遊ぶ
- ⇒Fujitsu-FM3で遊ぶ
- 市販の格安ARMマイコン基板にはどんなものがあるか?
- STM32系(ST-Micro製)とLPC1xxx系(NXP製)の違い。
- ARMでArduinoしたい。
armon/armboot 移植済みの基板リスト
armon/armbootは各種ARM基板用のHIDブートローダー兼、簡易モニターです。
特徴
- HIDデバイスなのでWindowsなどのドライバー組み込みが要らず、USBを差し込んだだけで即使えます。
- bootloaderの常駐量は8kBです。
- 任意のアプリケーション(hexファイル)をUSB経由でFlashに書き込んで起動することが出来ます。
- dfuと異なり、hexファイルを直接書き込みするコマンドラインツール(Win32/Linux)を用意しています。
- メモリー内容やポート状態の読み出しや書き換えが可能です。
- 自分自身(bootloader)のアドレスをずらしたものをアプリケーションとして書き込むことで、好きなようにコマンドを増やしたり機能拡張出来ます。
- bootloader部分とアプリケーション部分の行き来(互いにbootさせること)や、互いに書き換えを行う(update)ことも可能です。
- ユーザー定義可能なコマンド(user)があらかじめ用意されていて、そのuser関数内でprintf埋め込みによる簡易デバッグが出来ます。
- ほぼどれのCPUでも同じように動くようになりました。
- LPC2388用はSTM32からバックポートしました。
アーキテクチャー | CPU(ベンダー) | 基板名 | FLASH容量 | SRAM容量 |
Cortex-M3 | STM32(STMicro) | STM8S-DiscoveryのSTM32側 | 64kB | 20kB |
CQ-STARM DesignWave 2008-05付録 | 128kB | 20kB | ||
STBEE ストロベリーリナックス | 512kB | 64kB | ||
STBEE Mini | 128kB | 20kB | ||
LPC1343(NXP) | LPCXpresso NXPセミコンダクターズ | 32kB | 8kB | |
TRZ1010N トラ技増刊「ARMマイコン パーフェクト学習基板」 | 32kB | 8kB | ||
ARM7TDMI | LPC2388(NXP) | CQ-FRK-NXP-ARM | 512kB | 64kB |
各種ARM基板
- 設計会社であるARMはチップを1個も製造していないので、NXP(オランダ・元フィリップス)とかST-Micro(元SGS-Thomson)とかAtmelなどが製造するチップを使用することになります。
STM32勢ぞろい
左から、
- STBee MINI
- STBee
- STM8S-DiscoveryのST-Link側のみ
- DesignWave2008-05 付録 CQ-STARM
- クロックは全部72MHz Cortex-M3
- Flash+SRAM容量は左から、(128K+20K),(512K+64K),(64K+20K),(128K+20K)
⇒interface 2009-05付録基板で遊ぶ
- まずはLチカから始めます。
⇒interface 2009-05付録基板で遊ぶPartII
- LPC-USBを動かしてみます。
⇒interface 2009-05付録基板で遊ぶPartIII
- HIDブートローダー兼モニターです。
- LPC2388はNXP製。周辺機能、メモリーてんこ盛りの32bit ARMチップです。
⇒DesignWave 2008-05付録基板で遊ぶ
- STM32F103VBT6はST-Micro製のCortex-M3アーキテクチャー。
- Cortex-Mシリーズは命令コード16bitのthumb2限定です。
⇒STM8S-Discovery基板のST-Link側で遊ぶ
なんとびっくり価格。秋月などで750円です。
FAQ:どうして安いのですか?
⇒STM32ブートローダー
- STM8S-Discovery付属のSTM32F103C8T6 CPU用のHIDクラス・ブートローダー 兼 簡易モニターです。
- STBEE , STBEE Mini , CQ-STARM でも動きます。
- DFUより使いやすく、コードサイズも小さくなっています。(8kB)
- ほぼ同じ機能のコードをアプリケーション側としてコンパイルして使用出来るので、自己拡張したり、HIDデバイスによる簡単なアプリ作成に使えます。(user関数からprintfなども使用できるようになっています)
⇒LPCXpressoで遊ぶ
LPCXpresso(LPC3154+LPC1343)
ARMマイコン パーフェクト学習基板(TRZ1010N)
⇒LPCXpresso/1768で遊ぶ
⇒Fujitsu-FM3で遊ぶ
市販の格安ARMマイコン基板にはどんなものがあるか?
CQ出版の雑誌付録基板(雑誌込みで3000円前後)
- 基板はコストダウンのためか総じて電源周りが弱い。
- LDOレギュレータがUSBケーブルの挿抜で死んだりとか。
- 旬が過ぎたら追加発注は難しい。(追加発注するほどのものでもないけれど)
秋月扱いのARM関連 開発ボード(2800円程度)
苺:STBee(3000円程度)
『STBee Mini』(72MHz, 128K+20K)
ARM7TDMI/LPC2103モジュール(1600円:USB機能は無い)
STM32系(ST-Micro製)とLPC1xxx系(NXP製)の違い。
どちらもCortex-M3アーキテクチャー(Thumb2命令セットのみ実装されている)
- メモリーマップは異なる。(STM32のFlashは0800_0000〜、LPC1343は0番地〜。RAM空間も異なる。)
- GPIOなどI/Oポートのアドレスや関連レジスタは互いに互換性がない。
Flashの自己書き換えを行うユーザー関数がLPC1343には無い。(というかApplication内からのFlash書き換え方法がドキュメントされていない模様)- STM32ではFlashの自己書き換えを行う関数が用意されている。
- LPC1343は、関数が用意されないかわりに、16kBのBOOT-ROM内のサービスルーチンが用意されている。
- USB関連のレジスタやサポート関数は互いに互換性がない。
- LPC1343はJTAGによるデバッグ、Flash書き込みのサポートが無い。(かわりにSWDを使う)
CMSISがあれば共通なソースが書けると思ったら大間違い。Lチカだけなら不可能ではない、というレベル。
- ペリフェラルの性能(例えばADCの分解能とか)も異なるし、そもそも無いもの(温度センサーとか)は無い場合があるので、共通化は無理!!
- LPC1343にはUSB/シリアルブートをサポートしたBOOT-ROM(16k)が内蔵されている。WindowsからはUSBマスストレージに 見えるので、Flashの書き換えはそれほど手間が要らない。
- ROMの内蔵ルーチンを呼び出す形のUSBデバイスサンプルが用意されているが、カスタマイズ上の制限が多く、実はあまり使い物にならない。
- LPC1343のC言語ライブラリ(libc)のスタートアップ(crt0.S相当)はアセンブラ記述ではなくC言語記述で提供されている。
- このため、(需要があるかどうかはともかく)比較的容易にスタートアップを変更できる。ただし初期化部分には一部インラインアセンブラが使われている。
- LPC1343はUSBクロックPLLとCPUクロックPLLが独立に設定できる。(オーバークロック可能???)
- STM32はUSBクロックの設定が{CPUクロック÷1か、÷1.5}の2択しか選べないので、(で、USB用のクロックは48MHz以外はありえないので)必然的にCPUクロックは48MHzか72MHzに固定される
- もちろんUSBを使用しないのであれば内蔵RCだろうが、何GHzのXtalだろうが(動きさえすれば)突っ込んでいいけど。
- どんなにオーバークロックしたくとも、内蔵のFlashROMの動作周波数の制約を受ける(そもそもこのクラスのマイコンは命令キャッシュを積んでいない)ので、そんなに速くは出来ない。
ARMでArduinoしたい。
一番近いのがこれ:
maple
- http://leaflabs.com/devices/maple/
- ArduinoのIDEをそのまんまパクって、AVR-gccをCodeSourceryG++に差し替え、avrdudeをdfu-utilに置き換えたもの。
- 今のところSTM32限定。
- 用意されている基板はArduinoとシールドのピン配置が良く似ている。
- USBはFT232RLのようなUSB-シリアル変換チップを使用する代わりに、STM32の内蔵USBを使用している。
mbed
- http://mbed.org/
- こちらは、NXPのLPC1768が使用されている。
- USB-シリアル変換チップはFT232RLでなく、NXPのARM系のUSB内蔵MCUがやっているような感じ。mbedは実際には2CPU構成だ。価格も6000円近い。
- mbedはWebBrowser経由で開発環境(ARM純正のC++コンパイラー)を動かす。
- ローカルのPC上に開発環境をセットアップする必要がない。(仮にセットアップしたくても純正コンパイラは高価)
Audinさんの記事が詳しい
netduino
- http://www.netduino.com/
- これもArduinoと基板サイズやらシールドピンの位置を合わせている。
- 開発言語はC/C++のかわりにMicrosoft .net (C#とか)の組み込みエディションを使う。
- なので、開発環境はWindows用のMicrosoftのC#の統合環境がそのまま使用できるらしい。