ARMCortexM3

ARM

http://psp.dip.jp/web/jpg/ARM/STM32F103VBT6.jpg

諸元

CPUARM Cortex-M3(Thumb2命令セットのみ。ARM32は実行できない)
CPU CLOCK72MHz
Flash ROM128kB
SRAM20kB
Peripheral12bitA/D,USB,CAN,PWM,SPI,I2C,USART

ジャンパー設定

J6ジャンパー起動番地備考
open0800_3000アプリケーション起動
close0800_0000DFU(USBブートローダー)起動

ブートモード

BOOT1BOOT0ブートモード備考
0ユーザーFlash0800_0000ユーザーFlashからのブート(この基板ではこのモードになっている(両方PullDown))
01システムメモリー1fff_f000からのブート(シリアルブート?uart1から?)
11内蔵SRAM内蔵SRAMからのブート(内蔵SRAM?誰が書き込むんだろう?JTAGかな)

メモリーマップ

0800_0000〜0801_ffff128kBFlash領域
上記のうち、0800_0000〜0800_2fff12kBDFU(ブートローダー)が使用
1fff_f000〜1fff_f7ff2kBシステムメモリー(Flashダウンローダー)
2000_0000〜2000_4fff20kB内蔵SRAM

その他

困った点:

  • 開発環境はIARかKeil、いずれも有償。
  • gccの開発環境は提供されていない(ように見受けられる)-->DWM6月号にgccの記事があるらしい。

で、もう2年も前の廃刊雑誌なので、開発環境をどうしようか思案中。

  • たぶんWinARMが一番良いかな?
  • USBフレームワークはどこにあるのだろう・・・。

アプリケーションノートはこのへん

DFUのプロトコルはこのへん

USBライブラリはこのへん

DFUのソースがないんだけど・・・

  • --> 雑誌付属CDROMのsoft/ST/USB関連サンプル・マニュアル/STM32F10xUSBLib/USBLib/demos/Device_Firmware_Upgrade/project/ にあるらしい。

DFU馬鹿じゃね?

  • HEXかmotorora-Sを *.dfuファイルに変換。
  • DFuSe ツールから *.dfuをデバイスに転送。
  • なんで普通にHEXを読まないのか意味不明。




実はDFUはUSB.orgで定義されている。*.dfuファイルのフォーマットもドキュメントされていた。

ここの STM32F10xxx USB-FS-Device development kit (UM0424)に最新版のDFUソースが含まれているらしい。


STM32F103の遊び方

  • USB-FS-Device development kitというのが、まるでモスバーガー屋のUSB Application Library と同じような作りなのでびっくり。

遊び方としては、

  • (1)Custom_HIDクラスを流用して、そのまんまPICmonを実装する。
  • (2)Device_Firmware_Upgrade クラスをGeneric USBに書き換えて、高速版を実装する。
  • (3)Virtual_COM_Port に見せかけたPICmonを実装する。

どれでもよいかも。

  • しかし、Makefileが全く用意されていないところといい、コンパイラが複数ベンダーから供給されていて互換性がないところといい、安全玩具屋はモスバーガー屋そっくりだな。

http://psp.dip.jp/web/jpg/PIC/burger.png


CMSIS

Cortex Microcontroller Software Interface Standard (CMSIS)

  • http://www.onarm.com/download/download395.asp
  • チップメーカー毎にペリフェラル操作方法が異なるのはどうよってことで統一規格を作っているらしい。(旗振りはARM)
  • しかし、Cortex-M0,M3限定だった。LPC2388用なんて無い
  • USB関係がSTM32とLPC1xxxで共通化出来るのかと思って見に行ったら全然そんな風ではなかった---期待外れ。


とりあえず遊び方(1)からやってみる。

  • これまた全然ビルドが通る気配がない。
  • ヘッダーファイルが散らばりすぎ。




これはかなりの難物。手強さで言うとPICを遥かに超える。

  • ARMって、もっと素直じゃなかったのか?
  • 一応ビルドできた。
  • さて、hexファイルはどこかな?
    D:>dir main.*
    ドライブ O のボリューム ラベルは です
    ボリューム シリアル番号は 049D-0411 です
2010/04/13  23:13            25,503 main.elf
2010/04/13  23:13            36,811 main.map
2010/04/13  23:13             2,015 main.sym
2010/04/13  23:13                34 main.hex
  • さすがはARMだ。仮想COMポートのファームウェアのHEXがたったの34バイトだなんて凄すぎ
  • いやーThumb2命令は縮むなぁ・・・
  • 念のため、HEXの中身をチェックだ。
D:>type main.hex
:0400000508002000CF
:00000001FF
  ______
(・V・) ??
     ______
??(・V・)
  • だめだこりゃ。




原因判明。

  • リンカーオプションのgc-sections(不要関数のガベコレ有効オプション)で全部削り取られていた。
  • gc-sectionsを外してリンクすると、うじゃうじゃ未解決参照が出てくる。
  • まず、スタートアップファイルを探して入れてみたが・・・うまくいかない <----今ここ

    先は長そうだ。


  • 思うに、これ(つまりgcc用の環境をわざと外してある)ってIARかKeilの有償コンパイラを売りたいがための嫌がらせにしか見えない。
  • そんなことしなくったって、コンパイラの性能で競うべきなんじゃないのだろうか?
  • PICコンパイラの世界にもいろいろあったけど、ARMのほうが酷いのか。

ダウンロード


ステータス:とりあえずビルドだけ通ります。

  • hidとvcomはデバイス認識OKになりました。
  • ただし、STmicroサンプルのままなので、ファームの内容はかなりやる気のないものです。
  • hid(Custom_HID)のPC側appletというかexeファイルかそのソースが見当たりません。配布元ファイルのum0424.zipの中を探したのですが・・・。
  • dfu.zipは、まだNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);を入れていないので0x8003000番地では動きません。
  • というよりはdfuなので、0x8000000に置かないとだめなような気がします。
  • 各zipファイルに含まれるHW/ディレクトリの内容は同一のはずです。(自分のLinux上ではシンボリックリンクにより共通場所を指す様にしています)



ビルド環境の構築方法




作りかけのHIDmon

  • armon.zip --- PICmonみたいなやつ。
  • armonは今のところ、STBEE , STBEE-Mini ,CQ-STARM , STM8S-DiscoveryのST-Link側, の4種類で動くようになりました。


read more : STM32ブートローダー















リンク

CQ出版DesignWave 5月号

若松通商Design Wave Magazine 5月号

ARMv7 Cortex-M3 Projects

CQ-STARM基板をいじる

TOPPERS/JSP for CORTEX-M3

(別室)ARMマイコンで遊ぼう