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デバイスを作りたいと前々から考えていましたが,コンパクトさ は魅力的でしたので,クローニングしました。 モミジもみもみボードの仕様概要について

ボードの仕様

オリジナルは,Open source 4 layer designed PCBだそうですが,何とか両面でこさえるこ
とができました。
回路図やボードレイアウトは,下図の通りです(クリックで拡大)。点線部から切り離せます。

scematic graph of the Momiji-momi^2 board Maple-mini互換っぽい(モミジもみもみ)ボードの回路図
PCB layout of the Momiji-momi^2 board ボードのレイアウト
PCBs of the Momiji-momi^2 board 実際のボード(クリックでチップ部品などの位置説明)
部品リスト 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 オリジナルとの相違点について
Momiji-momi^2 on breads board モミジもみもみボード(初版基板の試作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
the Momiji-momi^2 board I/O 動作中の様子(Rev_A基板の完成品)
実際の基板では,両面ともシルク印刷で,ピン番号やファンクション,PWM,Ain,5Vトレラン ト端子(これは自分にとっては重要)などを書ける限りを記載しているので,オリジナルに 比べて,ごちゃごちゃしてるように見えます。 貧乏性なんで,書ける情報は全部書いたというところです。 実はオリジナルのほぼDIP40ピンサイズのボードは実際に使ってみて,意外に小さすぎて, 使いづらく思っていました。 ブレッドボードだけで遊ぶにしても,USBケーブルの取り回し次第では,ブレッドボード から弾き飛ばされたりしますので,なんだかなぁと思っていました。 (実際使ってるときに一度ならずブレッドボードから上手投げで弾き飛ばされてますw) その上固定もし辛いので,実験完了後に応用製品(たとえば,Minecraft用に作ったUSB連 射速度微調整機能付きHIDキーボード/マウスとかw)として,何かに組み込んで使うといっ たこともやりづらいです。 *duino系ボードのコンセプトは手軽に組んで単体でも応用できるという点なので,LEDチカ チカが動いた→終わり...だけのブレッドボード工作だけでは,勿体無さすぎます。 そういうこともあって,モミジもみもみボードでは,基板にでは耳をつけて,そこに面一 でDCジャックやUSB,マイクロSDカードソケットを揃えて配置する様にして,ついでに耳の 部分にネジ穴を付けて,組み込んでも使えるようにしました。
the Momiji-momi^2 board I/O 面一になっているSDカード,USB,DCジャックの様子(基板上の6pinコネクタはI2Cの信号取出し用)
もしかしたらオリジナルとほぼ同じDIP40Pサイズにしたいということもあるかもしれない ので,耳を切り取って,ほぼDIPサイズにすることも可能なようにしてあります。 (切り取りしやすい様に,切取り線にあたる部分はノーレジにしてあり,viaで線引きしやす くしてあったりw) マイクロSDカードソケットの乗った耳の方は旨く切り離せれば,ピンソケットなどを付け て再利用もできます。(貧乏性なので少しでも再利用できるよう努力してみましたw) detached SD-card part ちなみに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 connects a uSDcard via SPI2 デッチ挙げたブートローダが想定している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でやっちくろよ。 蛇足:事の発端について
image of prototype board 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比較図 pinout_compare [ご注意] ・このページの記載事項については,一切無保証です。
inserted by FC2 system