YES! Momiji momimomi! dev. board.
sorry. japanese only.
モミジもみもみ(Maple-miniライク機能コンパチ)ボード
こんなのを作ってみました
LeaflabsのMaple-miniに手を出してしまいました。
これは,ARM cortex-M3 stm32をMCUにしたarduino風開発環境が使用できる開発ボードで
す。以前にATmega328Pで*duino互換ボードを作って遊んでいましたが,この手合いのボー
ドはお手軽にバラックを組んで遊べるので,わりと数を使いたかったりします。
けど,値段が(25$弱)...ちょっとね...
ということで,クローンボードのモミジもみもみボードを作ってみました。
折角作るのであればということで,ただのクローンじゃ勿体無いので,マイクロSDカード
やDCジャックもつけてあります。
まあ実は,arduino風かどうかは全然重要ではなく,cortex-M3の小規模デバイスを使って
手軽にデータロガーやUSBデバイスを作りたいと前々から考えていましたが,コンパクトさ
は魅力的でしたので,クローニングしました。
モミジもみもみボードの仕様概要について
ボードの仕様
- MCU: ARM Cortex-M3(STM32F103CBT6/STM32F103C8T6) at 72MHz
- メモリ: オンチップ 128/64kB FlashROM, 20kB SRAM
- GPIO : 34(内2ポートはオンボードLED,オンボードスイッチ用に使用, 19本が5V入力トレラント)
- A/D : GPIOのうち9ポートは,12ビット A/D入力に使用可能
- PWM : GPIOのうち12ポートは,PWM出力可能
- 内蔵機能: タイマ x4, I2C x2, SPI x2(SPI2は,マイクロSDソケットに接続), USART x3
- 電源: USBバスパワー または DCジャック(センター+ 5〜12V推奨電圧は8V以下) または3.3Vをコネクタから供給
- 搭載機能: マイクロSDソケット,ミニUSB-Bソケット,2.1mmDCジャック,ユーザLED x1,ユーザーSW x1,リセットSW
- その他: 600mil幅DIP40pフットプリント互換の外部コネクタ端子
オリジナルは,Open source 4 layer designed PCBだそうですが,何とか両面でこさえるこ
とができました。
回路図やボードレイアウトは,下図の通りです(クリックで拡大)。点線部から切り離せます。
Maple-mini互換っぽい(モミジもみもみ)ボードの回路図
ボードのレイアウト
実際のボード(クリックでチップ部品などの位置説明)
部品リスト
BUT タクトSW
RESET SMDタクトSW
USB miniUSB_Bコネクタ
MCU STM32F103CBT6(128KB) or STM32F103C8T6(64KB)
IC1 TAR5SB33
D1 HN2S01FU
LED LED(1608-2012)
Q1 2SA1313
X1 X'tal8MHz
F1 100mA(3025)
L1 FB(1608-2012)
C1,C2 12p-22pF(1608)
C3-C6 1uF(1608)
C7 1uF25V(1608)
C8 4.7u-22uF(3025)
C9 0.01u-1uF25V(1608)
R1,R2 30Ω(1005-1608)
R3 1.5kΩ(1608-2012)
R4 100k-330kΩ(1608)
R5,R6 1kΩ(1608)
R7 100k-330kΩ(1608)
R8 1k-4.7kΩ(1608)
R9 100k-330kΩ(1608) N/A(実装無用)
R10 1kΩ(1608)
R11 100k-330kΩ(1608) N/A(実装無用)
R12 10kΩ(1608)
耳の部分の部品
DCJACK 2.1φDCジャック
MICROSD マイクロSDカードソケット
L100 10u-220uH500mA
C100 1uF(1608)
C101 10u-22uF(3025)
R100-105 100k-330kΩ(1608)
その他の部品
20x1pピンコネクタ x2本
MCU以外は,秋月やその周辺で入手できるパーツばかりです。
MCUは,DigikeyやMouserあたりで入手が可能です。
またMCUについては,オリジナルと同じSTM32F103CBT6が使えます。
さらに...
モノを大事にしたいという人向けのTipsになりますが,STM8S-discoveryボードを遊び尽
したあとで,それのST-Link用のMCU(STM32F103C8T6)を再利用なんてこともできます。
ちなみに試作機と1号機(初版基板で作成したもの)がST-LinkのMCU再利用品ですが,ちゃ
んと動いていますw
MCUはDigikeyで買っても\600ちょいだけど,張り替える気力があれば多少は?ね?
MapleIDEから使用する場合には,一番最初にDFUに対応したブートローダをMCUに書き込む
必要があります。多分ここが一番厄介かも知れません。
書き込むブートローダは,Leaflabsで配布している,Maple-miniのブートローダバイナリ
がMCUのフラッシュ容量に関わらず,そのまま利用出来ます。
ブートローダの書き込みは,D2(BOOT1)をLレベル,D32(BOOT0)をHまたは,BUTボタンを
押しながら,リセットボタンを押して解除すると,MCU内蔵のシステムブートローダが起
動するので,STmicroのFLD(Flash Loader Demonstrator)を使うか,pythonとpyserialが
使える環境であれば,Mapleのドキュメントの通りstm32loader.pyを使って,USART1から
書き込むとよいでしょう。 参考となるページ→ Maple Bootloader(s)
(別ページにST-Linkでデバッグする方法を記載してありますが,ST-Link経由でブートロー
ダを書くことも可能です)
蛇足ながら,ST-Link用のSTM32F103C8T6を再利用した場合には,一度プロテクションを
完全に解除するために全クリアを行ってから書き込む必要があります。
MapleIDEから見た場合には,Maple-miniとまったく同じに見えますから,MapleIDEでのボー
ドコンフィグは,面倒ならそのままMaple-miniを選択すればOKです。
違いは,64K版MCUのSTM32F103C8T6を使用している場合には,フラッシュの容量が64KBとオ
リジナルの半分となる点だけです。
フリーエリア(フラッシュ容量からブート用の領域20KBを差し引いた容量)に収まっていれ
ば大丈夫だし,仮にオーバしても64Kをオーバした分の書込みベリファイで失敗して判明
するので,問題はないと思います。
なお,ピン端子のファンクション対応についてもオリジナルのMaple-miniとまったく同じ
なので,そちらの説明ページを参照してください。
Maple-mini オリジナルとの相違点について
モミジもみもみボード(初版基板の試作1号機)
回路や仕様でオリジナルと違う点がいくつかありますので記載しておきます。
ノンコンフィグでUSBバスパワーを使用する場合に,使用可能な容量は100mAまでなので,
使用電流が全体で100mAで収まるように使ってください。ボード単体ならば最大でも50mA
程度に収まるはずです。
オリジナルでは500mA(デジタル部だけなら250mA)を謳ってますが,USBのバスパワーを使
いDFUからCDCへの切替えなど行うことを考えると,エニュメレーションが完了するまでの
間は100mAを超える電流供給を期待するのはマズイと思います。
モミジもみもみボードのレギュレータの定格は200mAで,いちおうUSBのVbusには100mA定格
ポリフューズ(200mAで遮断)を入れてあります。
もし,100mAを超えて容量が欲しいというのであれば,レギュレータに逆流保護が施して
あるので,外部から3V3に電源を供給することで対応できるようになっています。
ちょっと調べてみたら,STM32F4-Discoveryボードも同じような感じでmax150mAレギュレー
タに逆流防止のダイオードの構成になってますね。
またオリジナルは,アナログ部を厳密に分離してる(アナログ用にレギュレータを搭載)こ
とを謳っていますが,モミジもみもみボードでは簡略化してあります。
具体的には,アナログ部の電源の分離は,Vccからフェライトビーズを経て,デカップリング
キャパシタでデカップリングされて接続する程度に端折ってます。
本来のMaple-miniのピンソケット部分V+,V-端子は,このボードではN.C.としてあります。
AVccのリップル低減は勿論重要ですが,A/D変換中には余分な周辺へのクロックを止める
などして内部の変動要素にもシッカリ対応しないと結果が得難いです。
あとは前に触れたとおり,マイクロSDカードソケットとDCジャックが搭載可能となった分,
耳のように物理的に基板がハミ出ています。
まあブレッドボードでも何とか使える程度の出っ張りなんで,気にしないようにしてくだ
さいw
動作中の様子(Rev_A基板の完成品)
実際の基板では,両面ともシルク印刷で,ピン番号やファンクション,PWM,Ain,5Vトレラン
ト端子(これは自分にとっては重要)などを書ける限りを記載しているので,オリジナルに
比べて,ごちゃごちゃしてるように見えます。
貧乏性なんで,書ける情報は全部書いたというところです。
実はオリジナルのほぼDIP40ピンサイズのボードは実際に使ってみて,意外に小さすぎて,
使いづらく思っていました。
ブレッドボードだけで遊ぶにしても,USBケーブルの取り回し次第では,ブレッドボード
から弾き飛ばされたりしますので,なんだかなぁと思っていました。
(実際使ってるときに一度ならずブレッドボードから上手投げで弾き飛ばされてますw)
その上固定もし辛いので,実験完了後に応用製品(たとえば,Minecraft用に作ったUSB連
射速度微調整機能付きHIDキーボード/マウスとかw)として,何かに組み込んで使うといっ
たこともやりづらいです。
*duino系ボードのコンセプトは手軽に組んで単体でも応用できるという点なので,LEDチカ
チカが動いた→終わり...だけのブレッドボード工作だけでは,勿体無さすぎます。
そういうこともあって,モミジもみもみボードでは,基板にでは耳をつけて,そこに面一
でDCジャックやUSB,マイクロSDカードソケットを揃えて配置する様にして,ついでに耳の
部分にネジ穴を付けて,組み込んでも使えるようにしました。
面一になっているSDカード,USB,DCジャックの様子(基板上の6pinコネクタはI2Cの信号取出し用)
もしかしたらオリジナルとほぼ同じDIP40Pサイズにしたいということもあるかもしれない
ので,耳を切り取って,ほぼDIPサイズにすることも可能なようにしてあります。
(切り取りしやすい様に,切取り線にあたる部分はノーレジにしてあり,viaで線引きしやす
くしてあったりw)
マイクロSDカードソケットの乗った耳の方は旨く切り離せれば,ピンソケットなどを付け
て再利用もできます。(貧乏性なので少しでも再利用できるよう努力してみましたw)
ちなみにSDカード接続は,OLIMEXINO-STM32に準拠してSPI2に接続されています。
またSDカードソケット基板の裏面に27と書かれたソルダジャンパをON(導通)することで,
SDカードのメディア挿入信号(D27に負論理で)検知が可能です。
SDカードメディアがソケットにない状態では,各信号は高抵抗でのプルアップですので,
他の用途に使用することも可能になります。
SDカードを利用するにあたっては,マイコン風雲録さんのところでMaple/libmaple用の
SdFatライブラリを公開されていますので,これを利用させてもらうのが一番簡単です。
OLIMEXINO-STM32をターゲットに使われて開発されたようで,サンプルも殆どそのまま動作
しますので,大変手軽でオススメです。
参考までに,listfilesというSDカードのコンテンツ一覧をUSBシリアルに表示するサンプル
スケッチで実行サイズが30KB弱くらいですので64KのMCUでも,まだまだ余裕があります。
(MapleIDE-0.0.12 でビルド)
SDカードから実行プログラムをロードするブートローダーについて
前述のようにしてLeafLabsで公開されている,Maple-mini用のブートローダーをそのまま
使わせもらって,モミジもみもみボードのMCUに焼きこめば,それで十分な開発ができると
思います。
蛇足ながら当方でモミジもみもみボードを便利に使うために,起動時にマイクロSDカード
からバイナリファイルをロードする機能を追加したブートローダーをデッチあげてみました。
[アーカイブ]
以下の機能が本家のブートローダーに加えてあります。
(1) SDカードからバイナリファイルをSRAMへロードして実行する。
(2) 起動時にユーザボタン(BUT)を押してDFUモードに移行した際には,SRAM上のプロ
グラムのベクタを0クリアして,以後の実行を抑止する。
もちろんMaple-miniオリジナルでも下図の様にSDカードを接続すれば利用できます。
デッチ挙げたブートローダが想定しているMaple-miniでのmicroSDカード接続図
SDカードから実行プログラムをロードする条件としては,SDカードのメディア挿入信号
(D27に負論理のMediaDetect)検知を可能にした状態で,ルートディレクトリにAUTOEXEC.BIN
というファイル名で実行バイナリを格納したSDカードを挿入しておくと,リセット解除後
にそのファイルを0x20000c00〜 へとロードします。
一応チェックとして先頭の32bitのベクタワードが0x20005000(スタックポインタの初期ベ
クタ)かと続くベクタが奇数(thumb命令へのリセットベクタ)かをチェックしており,それ
以外の場合は読込みません。
MapleIDEのボードコンフィグ「LeafLabs Maple Mini Rev 2 to RAM」指定で生成した実行
プログラムのバイナリファイル(tempディレクトリのbuild〜ディレクトリに〜.cpp.binと
いうファイル名で生成されます)を上記のようにSDカードに保存して,モミジもみもみボー
ドにセットして起動すると,MapleIDEでロードしたようにSRAMで実行可能なアプリが実行
できます。
このバイナリファイルのサイズは16KBまでです。16KBを超えるファイルの場合は,16KBを
超えたところでロードを中断し,ベクタテーブルの先頭をNULLで埋めて実行されないよう
にしています。
このデッチ挙げたブートローダを使用するには,アーカイブを解凍して,バイナリファイル
build/maple_boot.bin をモミジもみもみボードに書込んでください。
ブートローダのソースは,2013/2/27時点のgitサーバのものを使っています。またファイ
ルシステムアクセスにはELMのChanさん作のプチFatFSを使用しています。
追加変更については,アーカイブにあるREADME_petitFatFSを参照してください。
MapleIDEについて
このボードを使うに当たっては,SourceryCodeBenchや適切にビルドされたGNUツールチェー
ンでも開発は出来ますが,手軽さを求めるならば,やはりMapleIDE(libMapleライブラリ)
を使って開発するのがいいでしょう。
IDE環境からライブラリ&コンパイラまで全部込みこみなので,IDEを使わない場合でも
環境構築の手間がかなり省けます。
MapleIDEの入手やインストール手順について
モミジもみもみボードをPCのUSBポートに接続すると,LEDが4Hz程度で1秒間明滅するので,
この間にBUTボタンを1秒くらい押します。やがて2Hz程度の明滅に変わりますので,その
状態がブートローダ起動状態です。
(押し放しで起動するとBOOT0がアサートされるのでNG。明滅を始めてから押す必要あり)
間に合わなくても,その場合にはリセットボタンを押して操作をやり直せば大丈夫です。
まっさらな環境だと,最初にブートローダ書き込み用にDFUドライバを要求されますので,
MapleIDEに付属するドライバを選択してインストールすればよいでしょう。
モミジもみもみボードもオリジナルのMaple-miniと同じように,動作状態によりUSBデバイ
スとしての機能を切替えます。そのたびにホストはドライバの再ロードを行います。
ブートローダの場合にはDFU機能,通常のアプリでSerialUSBを使用する設定になっている
場合には,SerialUSB機能と接続したまま機能を切替えします。
DFUとSerialUSBのドライバは,MapleIDEに同梱されているので,要求されたら必要に応じ
てインストールすればいいです。
ドライバは,MapleIDEディレクトリのdrivers/mapleDrv/dfuおよびdriver/mapleDrv/serial
にあります。
この自動切り替わりの機能は,最初は抜き差ししなくてもいいので,便利だと思っていま
したが,TeraTermなどの通常のターミナルで,SerialUSBを使っている場合には,スケッチ
のアップロードの度に通信が途切れて,再接続が必要になるので存外に煩わしいです。
結局デバッグなどでシリアルメッセージを出す場合には,空いているUSARTを使ったほうが
手間が減っていい様に思えます。
補足:モミジもみもみボードへのMapleIDE(v0.0.12)からのスケッチアップロード手順
(1) MapleIDEを起動してツールバーからTools>Boards>Leaflabs Maple Mini Rev2 to flash
を選択してスケッチを作成します。
(2) モミジもみもみボードにUSBケーブルを接続します。
(必要に応じてドライバをインストールしておいてください)
(3) DFUブートローダを起動するために,リセットボタンを押し解放して1秒以内にユーザボ
タンを押します。
リセットボタン解放直後に4Hz程度の非常に速いLED明滅がありますので,このときに
ユーザボタンを押してください。
(4) (3)でユーザボタンが押されたままにしておくと,やがて1-2秒後に明滅の間隔が2Hz
程度になります。そうしたらユーザボタンを解放してください。
この状態がDFUブートローダ起動の状態です。
(5) MapleIDEのUploadボタンを選択するか,ツールバーのFile>Upload to I/O boardを
選択します。
(6) スケッチのフルビルド後(環境によっては時間が掛かりますので,お茶でも飲んでゆっ
くりしていてください)にエラーがなければ,アップロードまで一気通貫で行われます。
(7) アップロード終了後に自動的にモミジもみもみボードがリセットされてスケッチが
実行されます。
前述したlistfilesというスケッチに加えて実行後にGPIOレジスタの値をダンプするスケッチの
アップロードまでの実行ログの例
Going to build using 'armcompiler' (ARM)
Compiling core...
Compiling libraries: Ethernet, SdFat
Compiling the sketch...
Linking...
Computing sketch size...
M:\TEMP\build354266429194653493.tmp\listfiles_A.cpp.bin :
section size addr
.data 30264 0
Total 30264
Binary sketch size is reported above. Check it against a 108000 byte maximum.
Loading via dfu-util
Resetting to bootloader via DTR pulse
Reset via USB Serial Failed! Did you select the serial right serial port?
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...
(↑予めDFUブートにしてあったので,USBシリアルからのリセットが出来ないよとの文句)
Searching for DFU device [1EAF:0003]...
Found it!
Opening USB Device 0x1eaf:0x0003...
Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=1, name="DFU Program FLASH 0x08005000"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x0400
bytes_per_hash=605
Starting download: [##################################################] finished!
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode
ただ現状のMapleIDEは,発展中の環境でもあるため,周辺ライブラリのIDE(wiring環境と
いうべきか)への対応も未整備である点が少なからず見受けられます。
自分でUSBデバイスを作ったりはもとより,arduinoのwiring環境では既にライブラリサポー
トされている,I2CやSPIの対応もlibMapleのAPI使って実装してね,という状況なので,
LEDチカチカが済んだら,リファレンスマニュアルと格闘して腕を磨くには絶好の状況(笑)
といえるのではないでしょうかw
まあ冗談はともかく,プロセサ性能的にはH8SX程度の事は出来るのでレッツチャレンジと
いうことで遊ぶには面白いモノだと思います。
んで,デバッグをどうすっぺね?ST-Linkでやっちくろよ。
蛇足:事の発端について
Aitendoのボードを使って作ったプロトタイプ(右下はモミジもみもみボード)
ことの発端はaitendoで売っていたSTM32用の生基板を買ったところからです。
STM8S-discoveryのST-Link側MCUをどう使おうかなと思案していたところにジャストミー
トでした。
上の画像の左側にあるのがAitendo基板に,STM8S-discoveryのSTM32F103C8T6を実装して
いろいろ手を入れていじったプロトタイプです。
(一応こんなんでもMaple-miniコンパチでSDカードからのブートもできたりしますw)
事の発端からの経緯ダイジェストw
Aitendoボードにちょっと手を入れるとMapleIDEが動く → *duinoみたいに使えるじゃん →
Maple-miniというのが小さくてよさげ → お?結構いいじゃん → クローンボード作っぺ
質問をもらったので,回答ついでにここにも記載しておきます。
質問要旨「Aitendoの基板でMapleIDE使う場合は,どのように改造すればよいですか?」
→ ググればいいんじゃない?と返したところ,48pinの例が見当たらないとのことなので
かいつまんで以下のように改造したところを紹介しました。
要約すると,maple-miniの回路に沿って切った貼ったするだけです。
はっきり言って,MapleIDEのボードコンフィグをそれ様にこさえた方が断然簡単です。
(1) USBのEnable/DisableのジャンパピンポストにPNPトランジスタを並列に接続して
PB9でon/off制御をできるようにする。
(2) PB0に接続されたLEDをPB1に繋ぎ替える。
(3) ユーザボタンをPB8につける。
(4) OLIMEXINO-STM32のボードの回路図に準拠してSDカードソケットを追加(余禄)。
それとaitendoの48pinSTM32用のボードのシリアルのヘッダにあるシルクはMCU側の信号名
ではなく,どうも接続するシリアル変換ボードの信号名として書かれているようで,
TXDのシルクのあるピンはPA10/RxD1に,RXDのピンはPA9/TxD1に接続されているので
aitendoボードで「シリアルでカケネーカケネー」という人は確認してみてください。
STM32F10xシリーズの48pin-64pinQFP パッケージ別ピンout比較図
[ご注意]
・このページの記載事項については,一切無保証です。