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 移植済みの基板リスト

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-M3STM32(STMicro)STM8S-DiscoveryのSTM32側64kB20kB
CQ-STARM DesignWave 2008-05付録128kB20kB
STBEE ストロベリーリナックス512kB64kB
STBEE Mini128kB20kB
LPC1343(NXP)LPCXpresso NXPセミコンダクターズ32kB8kB
TRZ1010N トラ技増刊「ARMマイコン パーフェクト学習基板」32kB8kB
ARM7TDMILPC2388(NXP)CQ-FRK-NXP-ARM512kB64kB

各種ARM基板

  • 設計会社であるARMはチップを1個も製造していないので、NXP(オランダ・元フィリップス)とかST-Micro(元SGS-Thomson)とかAtmelなどが製造するチップを使用することになります。

STM32勢ぞろい

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/ARM/stbee.jpg

左から、

  • クロックは全部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ブートローダー兼モニターです。

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/cq-frk-nxp.jpg

  • LPC2388はNXP製。周辺機能、メモリーてんこ盛りの32bit ARMチップです。






⇒DesignWave 2008-05付録基板で遊ぶ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/ARM/STM32F103VBT6.jpg

  • STM32F103VBT6はST-Micro製のCortex-M3アーキテクチャー。
  • Cortex-Mシリーズは命令コード16bitのthumb2限定です。





⇒STM8S-Discovery基板のST-Link側で遊ぶ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/ARM/ST_Discovery.jpg

なんとびっくり価格。秋月などで750円です。

FAQ:どうして安いのですか?


⇒STM32ブートローダー

  • STM8S-Discovery付属のSTM32F103C8T6 CPU用のHIDクラス・ブートローダー 兼 簡易モニターです。
  • STBEE , STBEE Mini , CQ-STARM でも動きます。
  • DFUより使いやすく、コードサイズも小さくなっています。(8kB)
  • ほぼ同じ機能のコードをアプリケーション側としてコンパイルして使用出来るので、自己拡張したり、HIDデバイスによる簡単なアプリ作成に使えます。(user関数からprintfなども使用できるようになっています)





⇒LPCXpressoで遊ぶ

LPCXpresso(LPC3154+LPC1343)

ARMマイコン パーフェクト学習基板(TRZ1010N)

  • https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/ARM/1343a.jpg





⇒LPCXpresso/1768で遊ぶ






⇒Fujitsu-FM3で遊ぶ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/FM3img.jpg






市販の格安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#の統合環境がそのまま使用できるらしい。