armon

ARM stm32f103

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

armon/armboot

■ 概要


このブートローダーを使用するためには、

read more :stm8s_blaster arm_blaster


このブートローダーを使用することによって、以下のようなことが出来るようになります。

  • Cortex-M3用のプログラム開発。
  • 内部メモリーやI/Oポートの確認、変更。


このブートローダーを使用することによって、以下のことがらを諦めなければなりません。

  • STM8Sのプログラム開発。
  • 元々焼かれていたST-Linkファームウェアに復元すること。

http://www.akizukidenshi.com/img/goods/1/M-03457.jpg


ダウンロード。

種別ファイル対応基板
STM32版armon.zipSTM8S-DiscoveryのSTM32側/CQ-STARM/STBEE/STBEE Mini
LPC-1343版lpc-armon.zipLPCXpresso/TRZ-1010N
LPC2388版arm7mon.zipCQ-FRK-NXP


いずれの版も、使用に関しては自己責任でお願いします。

  • ファームウェアソース、HEXファイル、Host側ソース、EXEファイルを含みます。
  • Linuxホストから使用する場合はHost側を再コンパイルして使用してください。

アプリケーション・サンプルソース

種別ファイル対応基板
STM32版 仮想COMサンプル他sample.zipSTM8S-DiscoveryのSTM32側、他
LPC1343版 仮想COMサンプル他lpc-sample.zipLPCXpresso(LPC1343)、他
LPC2388版 仮想COMサンプル他arm7sample.zipCQ-FRK-NXP-ARM

2011-01-03: sample.zipを更新しました。仮想COMポートデバイスにて受信割り込みハンドラー関数がコンパイルされていない問題を修正しました。

2011-01-05: lpc-sample.zipを更新しました。仮想COMポートデバイスの登録に失敗するバグを修正しました。


いずれの版も、使用に関しては自己責任でお願いします。

  • アプリケーションというのは簡単なUSBデバイス作成サンプルのことです。
  • CodeSourcery G++ Liteを使用してビルドすることが出来ますが、実際に動作させるにはそれなりの付加回路(SD-CARDとか)が必要だったり、基板ごとの仕様に合わせて手直しが必要な場合があります。
  • armbootブートローダーを用いないで単独使用したい場合は、開始番地を2000番地から0000番地へ変更する必要があります。 (Makefile内にROMADRSというmake変数が用意してあります。)

■ 現在のステータス

  • ・コンパイラ "CodeSourcery G++ Lite" にて、ビルドは通ります。
  • ・通電すると、LEDが点灯します。
  • ・HIDクラスとしてPCから認識されます。
  • ・host/armon.exe を起動すると、メモリーダンプなどが実行できます。
  • ・host/armboot.exe を起動すると、HEXファイルをFlashに書き込むことが出来ます。
  • SWIM端子のGND <=> RESET# 間にBOOT JUMPERを挟んでください。 JUMPER CLOSE で、BOOTLOADERが起動します。
  • JUMPER OPEN で、0x0800_2000番地からのファームウェアが起動します。
  • STM8S-Discoveryのほか、CQ-STARM 、STBee 、 STBee Miniでの動作確認を行いました。

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

左から、

  • クロックは全部72MHz Cortex-M3
  • Flash+SRAM容量は左から、(128K+20K),(512K+64K),(64K+20K),(128K+20K)

■ 使い方

  • (1)JTAGライターを使用して、firmware/main-0000.hex を焼きます。
  • (2)CN7の GND<=>SB1(RESET#)間を JUMPERでショートします。
  • (3)USBでPCと接続するとLEDが点灯します。
  • (4)host/armon.exe を起動して接続できれば成功です。メモリーダンプ('d')      と、メモリー書き換え('ew')が出来ます。
  • (5)host/armboot.exe firmware/main-2000.hex を実行すると、0800_2000番地に   アプリケーションとしてのHIDmonを書き込めます。
  • (6)書き込んだHIDmonを実行するには、CN7のジャンパーをオープンにしてから   USBケーブルを再接続してください。
  • (7)アプリケーション側(0800_2000番地で動作するバージョン)の動作中はLEDが       1秒周期で点滅を行うことで動作の区別をつけるようにしました。

注意

  • STM8S-Discovery以外の基板では、MakefileのBASEBOARD定義を切り替えてビルドを行ってください。
  • STM8S-Discovery以外の基板では、0800_3000番地開始のHEXを作成したのち、そのHEXをDFUW.exeで書き込んでから、 0x0800_0000番地開始のブートローダーを書き込む(mkall.batとbb.bat)ことでJTAGライターなしでファーム差し替えを行うことが可能です。
    • 但し、書き換えには細心の注意を払ってください。

■ userコマンドについて

  ARM> user
       ~~~~
  • というコマンドを実行すると、usercmd.c に記述されたユーザールーチン   を起動することが出来ます。
  • 現在は、簡単なprintf のテストが出来るようになっています。

■ ToDo

未実装項目

  • ・HID以外のUSB Classへの移植
  • I/Oポート名解決,I/Oダンプ --- 少し実装(STM32のみ)
  • ・簡易ロジアナ,オシロ
  • ・AVR/PICライター機能追加
  • ・バスエラーしたら死ぬ.
  • ・readで無駄にFLASH全領域をREADする.
  • ・RAMエリアに対する bootload&run 機能
  • ・簡易レジスタダンプ

実装完了項目

  • ・高速化
  • ・runコマンドが変.
  • ・bootコマンド欲しい.
  • ・(Application modeで)printが欲しい.
  • ・armboot -r オプション.
  • ・USB disconnect
  • ・他の基板への移植(CQ-STARM,STBeeなど)
  • ・逆アセンブラがPIC18Fのまま.

■ 補足

  • (1) armboot.exeは '-r'オプション指定により、アプリケーションの自動起動が出来るようになりました。
    • 今までは BOOT JUMPERの変更を行ったあとで、USBケーブルの挿抜を行う必要がありました。
  • (2) armon.exe の boot コマンドを用いることで、互いに相手側のファームウェアを再起動することが出来るようになりました。
  • 例: BOOTLOADERからAPPLICATION側に切り替える。
    ARM> boot 8002000  (2000でもOK) 
  • 例: APPLICATION側からBOOTLOADERに切り替える。
    ARM> boot 8000000  (0 でもOK)
  • (3)互いに、相手側のファームウェアを更新することが可能です。
    • b.bat ・・・ BOOTLOADERからAPPLICATION側のファームを書き換えるバッチファイル。
    • bb.bat ・・・ APPLICATION側からBOOTLOADERのファームを書き換えるバッチファイル。
  • BOOTLOADER側の書き換えに失敗した(ファームウェアをバグらせてしまった)場合は、外部のJTAGライターが再度必要になります。
  • (4)Linux版もすこしづつ動き始めました。
    • host/ディレクトリにて、ビルドしてみてください。
    • libusb-devが必要です。
      $ sudo apt-get install libusb-dev
    • 実行は root権限で行なうか、該当デバイスをユーザー権限で使えるようにLinux側の(/etc/)設定を適宜行います。

■ FAQ


(750円)どうしてこんなに安いのですか?


どうして、一度ファームを書き換えてしまうと、元に戻せなくなるのですか?

  • それは、元のST-Linkファームが読み出し禁止モードで書き込まれているからです。
  • 全く同じ機能をもつファームを(USBプロトコルアナライザーなどで解析して)自分で開発して、書き込めば、なんとなく元にもどるでしょう。


どうして、元に戻せなくなるのに、ファームを書き換えるのですか?

  • こんなに安いので、2個以上買って使えばいいのです。
  • 1個はオリジナルファームのまま使います。
  • 残りは全部改造してお好きなように。
  • ほら、STM8Sも2個以上手に入るので、おトクでしょ?
  • (って、通販の布団圧縮袋じゃないんだから・・・)


どうして、こんなちっぽけな基板をわざわざ改造して使うんですか?

  • ARMチップ単体を買って基板起こすの面倒じゃないですか。
  • すでにLDOレギュレータとかUSB-Bコネとか水晶まで実装済みで、JTAGピンもBOOT JUMPERも立っているのって、便利じゃないですか。

■ ディレクトリ構成

host/	    . . . . . ホストPC側のツールソース(PICmon)
firmware/	. . . . . ファームウェア部分のソース
inc/		. . . . . ファームウェア部分のinclude関係
HW/STM32_EVAL/  . . . ST評価ボードのポート定義
HW/Libraries/   . . . ハードウェアライブラリ
HW/Libraries/STM32F10x_StdPeriph_Driver/inc/
HW/Libraries/STM32F10x_StdPeriph_Driver/src/
HW/Libraries/STM32_USB-FS-Device_Driver/inc/
HW/Libraries/STM32_USB-FS-Device_Driver/src/
HW/Libraries/CMSIS/Core/
HW/Libraries/CMSIS/Core/CM3/
HW/Libraries/CMSIS/Core/CM3/startup/
HW/Libraries/CMSIS/Core/CM3/startup/arm/
HW/Libraries/CMSIS/Core/CM3/startup/gcc/
HW/Libraries/CMSIS/Core/CM3/startup/iar/
HW/Libraries/CMSIS/Core/Documentation/

ARMビルド環境の構築方法

2011-12追記

  • ↑ CodeSourcery はmentor graphicsに買収されてしまいましたので、G++_Liteの入手性が悪くなっています。
  • 代替として、leaflabsから、maple-ide-0.0.12-windowsxp32.zipを入手して使用することをお勧めします。
  • さいわいなことに、GCCのVersionも4.4.1なので-Osオプション指定によるバグも回避できます。
  • arm-none-eabi-gcc.exeの実行パスは、「maple-ide-0.0.12をインストールしたパス」の hardware/tools/arm/bin/ に通します。
  • もうひとつの選択肢としては、netx-arm-elf-gccを使用する方法もあります。

  • WinARMはlibgccのfloat関数が抜けているので、一部差し替えの必要があります。
    • また、libc.aの_sbrk_rや_open_r,_read_rなども抜けています。(組み込み用途でファイルオープンは普通しませんが)
  • CodeSourcery_G++_Liteはコマンドライン版ですが無償で使用できます。また、gccのバージョンが新しい(4.4.1)ためか、生成コードサイズが小さくなります。
  • CodeSourcery_G++_Liteには makeやls,catといったunix標準コマンドがあまり含まれていません(cs_make.exeは付いています)ので、WinAVRを別途インストールされている方は、そちら(C:\WinAVR\utils\bin\)にもPATHを通しておいたほうが良いでしょう。