2015年1月5日月曜日
C言語で記述されたマイコンでも使えるMMLパーサー 'A tiny MML parser'
MML (Music Macro Language)
MMLは、音楽記法をテキストで簡易的に扱うための記述言語です。例えば、「ド・レ・ミ」と四分音符で歌う場合には「C4 D4 E4」と書く事で表現できます。
経緯
先日、大晦日ハッカソン2014なるものを見つけ、mrubyをBlackfinボード(UCB-BF512-B)で動かすおひとりハッカソンを企画し実行したわけですが、実は色々な小道具を整備しないとmrubyに辿りつけないとわかり何故か寄り道。Windows、Mac OS、Linuxで動作可能なChaNさんのFM音源モジュールの簡易シミュレーターの流れもあって、MMLパーサーがあれば自由に自動演奏させられるなぁという考えから実装したい衝動に負けてしまいました。'A tiny MML parser'
'A tiny MML parser'は、Cで記述されたMMLパーサーです。特徴をざっと挙げると
- シンプルなAPI
- 可搬性に優れたソースコード (C89準拠)
- 外部ライブラリに非依存 (libcも不要)
- 小さなフットプリント
- シャープ、フラット、ダブル・シャープ、ダブル・フラットなどにも正しく対応可能
- 複数の符点音符にも正しく対応可能
- 三連符に対応
など、マイコンで使う事も考慮した設計と実装になっています。
特に、シャープやフラットが複数付く場合、符点が複数付く場合、三連符に対応可能な点は、実際の曲を簡易的に表現可能という意味で重宝する仕様になっています。三連符を疑似的に入力するのとか辛いじゃないですか・・・。
どういう風に使えるの?
'A tiny MML parser'を使うには、要求されている唯一のコールバック関数を実装するだけです。このコールバック関数は、「typedef void (*MML_CALLBACK)(MML_INFO *p, void *extobj);」と宣言されており、mml_fetch関数を呼ぶ度に一つのMMLコマンドが解釈されてコールバックが呼ばれる仕組みです。
ライブラリのインターフェースは以下に示すようにたったの三つです。
まず、初期化関数mml_initでコールバック関数を渡して初期化します。
この時、extobjに外部オブジェクトへのポインタを渡してやると、コールバック関数で受け取れます。
次に設定関数mml_setupで演奏時に必要となるオプションとMMLを渡します。
「オプションなんてわけわからん!」という人は「(MML_OPTION *)0」を渡して下さい。
最後に呼び出し関数mml_fetchでMMLのパースを実行します。
このmml_fetchを呼び出す度に、一つのMMLコマンドが解釈されます。
ちなみに、このライブラリは「何が書いてあるのか?」について解釈する機能を提供します。
「それをどうするのか?」については一切関知しません。
実際のシステムに導入する場合、これを意識して使う事が結構ポイントになってきます。
デモ
Blackfin上でFM音源を構成し、そのFM音源をMMLで操作している様子をデモ映像にしました。
[フレーム]
このデモでは、ChaNさんのFM音源のコードを若干改造したものをミドルウェアとして使用しています。MMLパーサーも軽量ミドルウェアとして導入できたので、上位の実装は非常にシンプルな形で済ます事ができました。
ライセンス
ライセンスはMITです。
趣味でも業務でも、ライセンスの範囲で自由にお使い頂けます。
ダウンロード
'A tiny MML parser'のダウンロードは以下のページからどうぞ。
2013年2月24日日曜日
nanoKONTROL2を小規模組み込みシステムのユーザインターフェースとして使うお手軽な方法
便利だったけど・・・
2012年初頭からネチネチネチネチ続けているオーディオ・プラットフォーム開発。
オーディオ・プラットフォーム開発用にでっち上げたベース基板には、予めオーディオ・プラットフォームで使用するであろう「何らかのパラメータ設定手段」を提供するために、LCDとロータリースイッチを搭載しました。
ロータリースイッチでクルクル回転させてグシッと押せば、即座に設定完了という操作系です。
これはこれで便利だったのですが、パラメータが複数に渡ってくると操作性に不満が出てきます。
今回ご紹介する新しいアイデアは、2012年の11月の時点で試作まで完了していました。
すっかり別件で忙しくて忘れていたのですが、どのようなものなのか御紹介しようと思います。
nanoKONTROL2
nanoKONTROL2とは、KORGが販売している音楽制作環境向けのコントロール・サーフェースです。
USB経由でパソコンに接続し、音楽制作環境で色々操作できるというもの。
このように沢山のスライダーとノブが搭載され、複数のパラメータを調整するにはもってこいです。
この手のコントローラはMIDIイベントを送受信できるように設計されています。
MIDIイベントを受信するソフトウェアをホスト上に仕立て、組み込みシステムに指令を与えれば完成というわけです。
組み込みシステムはホスト上から制御出来れば、特別に何かする必要はありません。お手軽ですね。
単にホストに接続できるコントローラを購入しさえすれば、複数のパラメータを直感的に操作可能なユーザインターフェースをシステムのサービスとして提供できるようになるのです。
動作の様子
それでは動作の様子を動画で御紹介します。
[フレーム]上記のように複数のパラメータをサクサクゴニョゴニョする事ができます。
同時に複数のパラメータを直感的に操作できるのが嬉しいポイント。
癖になってしまいそうな感覚です。
まとめ
今回のアイデアは様々なところに応用する事ができます。このようなコントローラは安価で入手しやすいというのも嬉しいメリットの一つ。
これらのインターフェースを直接組み込みシステムに搭載しようと考えたら大変です。
直感的なインターフェースを実現するための部品コストは馬鹿になりません。
お手軽に使えるところを使う事で、素早くシステムとしてのサービスに仕立てる事が可能です。
ラベル:
B073 : BlueTank,
DAW,
nanoKONTROL2
2013年2月17日日曜日
簡単便利なBlackfin用フラッシュ書き込みツール「Blackfin BlueBoot」のVersion 0.3.0をリリースしました。
Blackfin BlueBootってなぁに?
Blackfin BlueBootってなぁに?という方は、「Blackfin BlueBoot - Blackfinに接続されたブート用外付けフラッシュ・ロムを書き換える事ができるソフトウェアのデビューです!」を御覧下さい。Blackfin BlueBootの開発プラットフォーム
2012年の12月に最初のリリースBlackfin BlueBoot Version 0.2.0をリリースしました。
このBlackfin BlueBootは、「DSPに興味はあるけど環境整備の敷居が高くて手を出せない!」という人のために設計実装した開発ツールです。メーカー純正ツールなら外付けフラッシュに書き込めるけど、それはまぁだいたい10万円です・・・なんて簡単に手を出せる物ではありません。
Blackfin BlueBootによって、無償の外付けフラッシュ書き込み環境を実現しています。
Blackfin BlueBootの開発には、市販されているDSPボードとオーディオコーデックボード用を搭載できるベース基板BlueTankを開発して使用していました。これ一台さえあればオーディオ入出力プラットフォームになるという算段です。これはなかなか便利なものでした。例えば、以下のようにオーディオアプリケーションを簡単に楽しめるようになっています。
[フレーム]
「これ一台で」というのがポイント。
ベース基板BlueTankは自分で設計しているのでI/Oの取捨選択は自分でできます。
自分が欲しくないI/Oがてんこ盛りになった評価基板なんていらないのです。
便利なオーディオプラットフォームが登場
さて、前述の市販されているDSPボードとオーディオコーデックボードは、金子システム社製のものでした。これ一台(一枚?)でDSPが楽しめますなシンプルなボード構成がとても気に入っていました。
前述のBlueTankには同社製「DSP基板」と「オーディオコーデック基板」が搭載される形式でした。
そんな折、新しく仕入れたのがTUNA-CANと呼ばれる新しいオーディオプラットフォームです。
なんと、このTUNA-CAN基板は「DSP」と「オーディオコーデック」の2つが1枚の基板にコンパクトにまとめられています。
以下がその写真です。
これにLCDとロータリースイッチを付ければもう「BlueTankいらず」です。
この新しいプラットフォームに触発され、新しいバージョンをリリースする事にしました。
この新しいプラットフォームに触発され、新しいバージョンをリリースする事にしました。
Blackfin BlueBoot Version 0.3.0
新しいBlackfin BlueBoot Version 0.3.0では、主に以下の変更を行ないました。- 書き込みセクタ数の算出バグを修正。
- LDRファイル選択時にLDR情報が更新されないバグを修正。
- TUNA-CAN用ブートローダをリリースに同梱。
- ホスト側I/Oライブラリのソースコードを同梱。
- 日本語ローカライズに対応。
ダウンロードはこちらからどうぞ。
まだまだ修正したい事は沢山あるのですが、それを待っていたらリリースができません。
今回はタイミング重視で、小さく更新してリリースする事にしました。
その他
実はBlackfin BlueBootの初版をリリースした後、別の類似ツールを作っていました。
その話と関連したあれこれは、別途機会を見てご紹介する予定です。
酔漢さんが運営されているDSP空挺団では、「ブレッドボードで作るオーディオ信号処理」が公開されています。
こちらの投稿もお勧めです。
こちらの投稿もお勧めです。
2012年12月29日土曜日
電気系CADから筺体設計に移行する手順について整理してみよう ~筺体設計も楽しいよ!~
箱に入れないとゴミなんでしょ?
「「回路基板、箱に入れなきゃタダのゴミ」 (筺体について考えよう)」では、箱に入れなきゃゴミですよと言わんばかりの方向が示されてしまいました。
まぁ、示したのは私ですが、実際に家の中を見てみると設計した基板で箱に入っていない物は全てゴミのようになっています。というか、ほぼゴミです。
BlueTankを「エフェクタ・プラットフォーム」として仕立てる方向性が見えてきたので、実際に筺体設計を行なう事にしました。
ここでは電気系CADから筺体設計に移行する手順について整理してみようと思います。
今回の環境
今回の環境を以下に示します。
- EAGLE 5.11.0
- RootPro CAD 5
BlueTank基板はEAGLEで設計しています。
機構設計はRootPro CAD 5を使います。
RootPro CAD 5無償版はDXFエクスポート等ができませんが、気に入ったら比較的安価に購入する事のできるCADです。
手順
方針を決める
設計は何事も方針を決めるのが先決です。
今回は基板が先に出来てしまっているので「入るケースなんて限られるだろう」という諦めが半分。
タカチ電機工業のカタログを眺めながら物理的に入る物を消去法で選定する事にしました。
先日の「「回路基板、箱に入れなきゃタダのゴミ」 (筺体について考えよう)」で気になっていたTD型アルミダイキャストボックスの中からの消去法です。
基板外形サイズをノギスで測定し、後はリストに掲載されているサイズに入るかどうか印を付けて確認しました。今回の場合、TD型の中で収まるのは3種類と判明し、その中で一番小さい物を選んだという事です。
今回、アルミダイキャストのケースに入れるのは初めての試み。
細かい事は考えずにとにかく作ってみるという乱暴な考え。
試作という事で大目に見る方針です。
漫画を描いてみる
ここからいきなりパソコン上の作業に移るのは後戻りを生む原因になります。
漫画を描いて方向性やコンセプト、加工可能かなどを確認します。
もう皆さん見飽きているかもしれませんが、今回の設計対象は以下の基板です。
筺体への組み込みも少しは考慮して設計しましたが、どの程度効果的でしょうか。
「この基板を箱に入れたらどうなるの?」と漫画を描いてみます。
「ユーザとのインターフェース」と「外部装置とのインターフェース」を意識すると良いです。
上面加工はかなり大きめの穴を空け、その上からアクリル化粧板を載せる事にしました。
LCD周辺などはかなり大きめの穴を開ける算段です。
この加工範囲なら「EAGLEの図面からアクリ屋ドットコムさんに頼むアクリル外装部品のサイズを簡単に得る方法」で示した比較的安価な加工コースを選択する事ができそうです。ふむふむ、納得。
で、最後に「本当にこれで良い?穴とか忘れてない?」というのを確認します。
漫画と基板を並べて確認すると良いでしょう。
「うーん。多分これで良いだろう。」です。
EAGLE上で基板外形をDXFでエクスポート
さて、漫画で方針を確認したら作業に取り掛かります。
え?まだ漫画を描いていないですって?
描いた方が良いですよ・・・。
以前の記事「EAGLEの図面からアクリ屋ドットコムさんに頼むアクリル外装部品のサイズを簡単に得る方法」を参考に、EAGLEボード・ファイルからDXFファイルを作ります。
筺体のDXFと基板のDXFを組み合わせる
タカチ電機工業さんの場合、DXFをウェブからダウンロードする事ができます。
ダウンロードした筺体のDXFと、EAGLEで出力した基板のDXFを組み合わせて図面を作成します。
2つのDXFをそれぞれ読み込みます。
以下のように各DXFファイルの設計がタブで表示されている事がわかります。
ここで、EAGLEが出力したDXFから基板の配線パターンのデータを取り除きます。
これはデータを軽量化し、ここから先の作業性、操作性を向上させるためです。
必要な外形データ以外を削除すると以下のようにスッキリ。
データも軽量になって操作をスムーズに行なう事ができます。
さて、ここから筺体外形と基板外形を組み合わせます。
RootPro CADは、開いたデザイン間でデータをコピーする事ができます。
今回は基板外形を筺体外形にコピーする形で作業しました。
RootPro CAD 5のコピーは、少し普通のコピーとステップが違います。
選択してCTRL+Cでは期待通りのコピーはできないでしょう。
ここでは簡単に触れておきます。
普通にコピーを選択します。
この状態で「コピー対象を選択する」動作になっています。
コピー対象を矩形で選択します。
コピー対象が水色でハイライトされます。
ここで、画面右側を見て下さい。
基準点という欄が空欄になっていますね?
ここで、選択対象のどこを基準点とするのかを決定します。
これでコピー用バッファにコピーされました。
水色でハイライトされていたコピー対象が通常の描画状態に戻ったと思います。
通常のコピー作業と異なるのは「原点を指定する」という事です。
さて、最後に筺体図面側にコピーして準備完了です。
漫画を参考にCAD上で作画する
漫画を参考にしながら、CAD上で作画します。
ポイントは、インポートした図形に下書き線などを適時加えながら作画するという事です。
私の場合、「下書き線」というレイヤーを新たに作って、そこに下書き線を描く事にしています。
これなら後で「下書き線だけ全部消去」という事が簡単にできます。
「あーでもない」、「こーでもない」みたいな若干の試行錯誤をしながら図面を完成させます。
最終的に印刷して確認しよう
図面ができたら「本当に本当に本当にこれで良い?」という確認をします。
何せ工場にデータを送ったら最後、間違っていても手元に届くまでわかりません。
同じ完成を待つなら「大丈夫かなぁ」というドキドキより、「組み合わせるのが楽しみだなぁ」というドキドキの方が嬉しいですよね?
色んな視点が必要なので、寸法入りや寸法なし等バリエーションを加えて下さい。
箱にしてみると更に良い?
折角印刷したのだから箱にしたくなってきます。
箱に仕立てて確認すると更に効果的かもしれません。
ちょっとやってみました。
厚手の紙に印刷してカッターでくりぬきます。
Craft ROBOを使えと言いたいのですが、セットアップが面倒だったので手作業です。
基板と組み合わせてみます。
うーん。
こんな感じになるのか、なるほど。
コネクタ部分はどうでしょうか。
一応良さそうですね。
もう少しきちんと確認したい場合、もう少し固い紙できちんと組み立てた方が良いかも。
後ろから見た感じ。
エフェクタに見えなくもない?
実際の発注でのポイント
実際に発注する場合、私は漫画も添付する事にしています。
図面の解釈で誤解を未然に防ごうという狙いです。
上記の場合、「箱と蓋のどちらに加工するの?」という疑問に対する答えを示しています。
明らかに「蓋は単なる蓋」という事が図面と合わせてみる事でよくわかります。
実は、以前発注した時に箱に加工して欲しいのに蓋に加工されてしまったという事がありました。
図面に自信がなければ色々な策(策が互いに矛盾しない事!)を打っておくのも手です。
まとめ
電気設計に慣れた人でも、筺体設計まで行なっている人は意外に少ないのが現状です。
実際にやってみると細かな確認が多くて大変ですが、箱に入った時の気持ち良さには、電気設計と異なる快感があります。
年明け早々に発注出来るように詰めの作業をしたいなぁと考えています。
ダウンロード
今回作ったいい加減なCADファイルを公開します。
RootPro CAD 5のFree版で開く事ができます。
ここからダウンロード(もちろん何の保証もありません。自己責任でお使い下さい。)
ラベル:
B073 : BlueTank,
DXF,
EAGLE,
板金,
筺体
2012年12月28日金曜日
「回路基板、箱に入れなきゃタダのゴミ」 (筺体について考えよう)
「回路基板、箱に入れなきゃタダのゴミ」
「回路基板、箱に入れなきゃタダのゴミ」は少し言い過ぎかもしれませんが、2013年のCuBeatSystemsは、実際に使える物に仕立てるまでの過程も重視しようと計画しています。ここで実際に幾つか考えている物のアイデアを記しておこうと思います。
タカチ電機工業
タカチ電機工業さんには何度か加工依頼を出しています。幾つか気になる採用候補についてリストアップしてみました。
TD型アルミダイキャストボックス
BlueTankは、もともとオーディオ・プラットフォームとして設計しましたが、「何のオーディオ装置?」と聞かれると実際に答えに困ります。具体的なアプリケーションをあまり想定していなかったというわけです。
少し思い直して考えているのが「エフェクタ・プラットフォームとしてのBlueTank」です。
で、調べてみると沢山のエフェクタがタカチ電機工業社製のアルミダイキャストボックスで製造されている事がわかりました。おぉ、こうなるのね。
MXA型アルミモバイルケース
次に目を付けたのがお洒落なアルマイト仕上げが印象的なMXA型アルミモバイルケースです。
こちらはヘッドフォン・アンプなどへの採用を多く見かけました。
これまた素敵だ。
WO型サイドウッドケース
http://www.takachi-el.co.jp/data/pdf/05-39.pdf「CuBeatSystemsの名前の由来」で取り上げた装置で採用して気に入っているサイド・ウッド仕上げですが、手作業で製作していては大変です。
少し調べるとサイド・ウッドの付いたモデルがあるではありませんか。
これもなかなか良さそう。
まとまりのないまとめ
メーカ標準品を使ってお洒落な外装を実現する事もできそうです。BlueTankが外装によってどのようなオーディオ・プラットフォームに見えるのか気になってきました。
ラベル:
B073 : BlueTank,
外装,
板金,
筺体
ACB-BF592とUMB-SGTL5000を使ったTalk ThroughをTOPPERS/JSP上で実現する
オーディオ・プラットフォーム・プロジェクトであるBlueTankも、ベース基板が上がってきて半年が経とうとしています。その間にベア・メタルなアプリケーションは幾つか実装したのですが、そろそろ色々な不満が出てきました。
BlueTankプロジェクトにおけるRTOS環境の出発点として、この酔漢さんの成果物をふんだんに活用させて頂く事にしました。これは本当に有難い話です。
Blackfin BF592は、ARM Cortex-Mシリーズ等と比較しても有り余るプロセッサ能力を持っています。簡単なサンプル・プログラムならともかく、システムとして様々なサービスを提供するのにRTOSを使って楽をしたくなってきました。RTOSを使えばNatural Tiny Shell (NT-Shell)もシステム・シェルとして提供できます。「ビデオやオーディオのDMAバッファの管理手法 (動かして遊べるソースコード付き!)」をRTOS上で試してみたいというのもあります。
プロジェクトを始めた当初はフラッシュ・ロムへの書き込みも出来なかったため独立した組み込みシステムとして動作しませんでした。Blackfin BlueBootを実現した事で独立した組み込みシステムとしての道筋が見え、だんだんと欲も出てきました。
幸いにも、DSP空挺団の酔漢さんが「ACB-BF592とTLV320AICを使ったTalkthroughサンプル。TOPPERS/JSPベース。 (bf592_tlv320aic23b_talkthrough) 」というものを公開して下さっています。このプロジェクトは、TOPPERS/JSP for Blackfin上に、使いやすいI2C制御層が組み込まれた上、オーディオ・フレームワークUZUMEが実装されています。
BlueTankプロジェクトにおけるRTOS環境の出発点として、この酔漢さんの成果物をふんだんに活用させて頂く事にしました。これは本当に有難い話です。
TLV320AIC23BもI2Cインターフェースを持つデバイスですから、UMB-SGTL5000に搭載されているオーディオ・コーデックに対する処理も、少しの改造で可能だろうという算段。実際に酔漢さんの丁寧な設計実装のおかげで、ものの3分でBlueTankでもTalk Throughが動作するようになりました。ちなみに、オリジナルのコードは、レジスタ互換のSSM2603が搭載されたUMB-SSM2603でも動作します。
唯一変更したソースコード : uzume.c
対応は至って簡単で、init_codec関数の中身を少し変更しただけです。
今回のTalk Throughは、氏の進めているUZUMEフレームワーク上に構成された物です。
BlueTankプロジェクトも、UZUMEフレームワークを使って色々と実験を進めようと考えています。
素晴らしいプロジェクトを公開して頂いているDSP空挺団の酔漢さんには感謝感謝です。
2012年12月26日水曜日
マルツパーツ館さんでDSP基板とオーディオコーデック基板が販売になりました
BlueTankで愛用しているDSP基板とオーディオコーデック基板がマルツパーツ館さんで販売になりました。
http://www.marutsu.co.jp/shohin_158707/
http://www.marutsu.co.jp/shohin_158709/
http://www.marutsu.co.jp/shohin_158707/
http://www.marutsu.co.jp/shohin_158709/
「DSPってもっと遠い世界の事だと思っていた」という人でも安心して手を伸ばせる価格設定。
先日実装したBlackfin BlueBootもこの基板で使えるようになっています。
VisualDSP++が無くてもフラッシュロムの書き込みに困る事はありません。
2012年12月24日月曜日
999円で売られていたBEHRINGER DR400 (DIGITAL REVERB/DELAY)の安くない中身
クリスマスの雰囲気が満載の街中を歩いていたところ、楽器屋でBEHRINGERのコンパクト・エフェクターがサンキュー価格ということで999円で売られていました。
電源にはMPSのMP1591が使われていました。
330KHzのステップ・ダウン・コンバータです。
今回分解したエフェクタはリバーブでもありディレイでもあるので、それなりのメモリを必要とします。
「どうしてるのかなぁ」と思ったら、当然のようにメモリが鎮座していました。
ISSIのIS41LV16105B-60TLがそれです。
よく見ると「DIGITAL」と名のつくエフェクタも999円です。
興味が出てきたのでBEHRINGER DR400 (DIGITAL REVERB/DELAY)を購入して分解してみました。
分解して最初に目に入ったのは信号処理プロセッサであるDSP56364です。
Freescale社のDSPで、「24-Bit Audio Digital Signal Processor」と銘打った音声信号処理に特化したシリーズです。
音声コーデックにはAKM4552が採用されています。
面白いのはATMEGA16AがノブのADC処理用として用いられている事でしょうか。
配線を見るかぎりではエフェクトのOn/OffスイッチもATMEGA16Aに接続されていました。
フロントエンドはATMEGA16Aが担当という設計ですね。
DSP56364とATMEGA16AとはSPIかI2Cで通信でしょう。
電源にはMPSのMP1591が使われていました。
330KHzのステップ・ダウン・コンバータです。
今回分解したエフェクタはリバーブでもありディレイでもあるので、それなりのメモリを必要とします。
「どうしてるのかなぁ」と思ったら、当然のようにメモリが鎮座していました。
ISSIのIS41LV16105B-60TLがそれです。
こんな風に、街中で999円でエフェクタを買って分解できてしまう時代。
いやー、恐ろしいものです。
ちなみに、笑ってしまったのですが、右端のモードを切り替えるノブ。
メモリの位置に合わせてクリックがあるのかと思ったら・・・ありません!
単なるボリュームだったのです!
うーん、切り替えが難しいぞっ!
本当は機構と電気設計の関係もフムフムと眺めたかったのですが、自分が再現するとしたら「プラスチック成型」などあり得ません。
そう考えるとあまり参考にならない気もしました。
うーん、何か良いケースはないかなぁと考え始めるこの頃。
2012年初頭から始めたBlackfinいじりも2013年は更に加速させようと考えています。
今度は「本当に使えるモノ」に仕立てていく計画です。
ラベル:
B073 : BlueTank,
Blackfin,
分解レポート
2012年12月7日金曜日
Blackfin BlueBoot - Blackfinに接続されたブート用外付けフラッシュ・ロムを書き換える事ができるソフトウェアのデビューです!
このプロジェクトって何なの?
Blackfin BlueBootとは、Blackfinに接続されたブート用フラッシュ・ロムを書き換える事のできるソフトウェアです。ターゲット用の専用ブート・ローダとホスト用の専用アプリケーションから構成され、両者が協調動作する事でBlackfinに接続されたブート用フラッシュ・ロムの書き換えを実行します。
Blackfinは、SPIに接続された外部フラッシュ・ロムからブートさせる事ができます。
しかし、Blackfinは予めどんな外付けフラッシュ・ロムが接続されるのか知るよしもありません。
当然のようにBlackfinが外付けフラッシュ・ロムの書き換え機能を持つわけもなく、「一体どうやったら書き換えができるの?」というわけです。
Analog Devices社は、同社純正ソフトウェアであるVisualDSP++でこの問題を解決しており、Blackfinに接続されたフラッシュ・ロムの型式を選択する事で、GUIから書き換えができるようなサービスを提供しています。
うーん、さすが有償ツール!なんて感動している場合ではありません。
VisualDSP++はとても高価なツールです。
業務で使うならまだしも、趣味のDSP開発で手の出せる金額ではない事がわかりました。
Blackfin BlueBootは、このような背景から高価なツールを購入せずともBlackfinに接続されたフラッシュ・ロムを書き換えられるようにしようというプロジェクトです。
プロジェクトのゴール
このプロジェクトは、以下のゴールを設定しました。
- Blackfin搭載のターゲットに対応可能な事。
- 幅広いフラッシュ・ロムに対応可能な事。
- とにかく簡単に使える事。
- ユーザが自由にターゲットを追加できる事。
- 業務でも趣味でも少ない制約で利用できる事。
- 入手性の良いDSPボードを使って実例を示す事。
- CUIとGUIでホスト側ツールを用意する事。
- 将来的にWindows、Linux、Mac OSのプラットフォームをサポートする事。
- ターゲット側のコードは公開し、幅広く利用してもらえるようにする事。
- その他。
上記のゴールを基に設計したのが、今回公開するBlackfin BlueBootです。
簡単に使える
Blackfin BlueBootが標準でサポートするBlackfin基板を使う場合、特に簡単に使う事ができます。
最初にリリースされるWindows版における動作を見てみましょう。
インストーラでソフトウェアをインストールすると、デスクトップにアイコンが作られます。
ダブルクリックしてソフトウェアを起動します。
ソフトウェアを起動すると、以下のような画面が出現します。
初めに行なうのは、ターゲットとホストを接続するシリアル・ポートの設定です。
次に標準的にサポートされているターゲット・ボードの選択を行ないます。
このリストにないターゲット・ボードの場合、インストール先ディレクトリに公開されているターゲット用ソース・コードと設定ファイルの更新により、独自にブート・ローダを記述する事で対応させる事ができます。(これは後日、別途記事を書きたいなぁ。)
最後に、使用するブートローダとアプリケーションを指定して選択は完了です。
Boot Loaderとは、初段でターゲットに流し込むフラッシュ・ロム書き換え用プログラムです。
Boot Loaderを流し込んで書き込みを行なう場合、ターゲットをUARTブート・モードにしておく必要があります。
Applicationとは、ターゲット上のフラッシュ・ロムに書き込むバイナリを指します。
Applicationは、初段で流し込んだブート・ローダを経由してフラッシュ・ロムに書き込まれます。
ちょっと便利なLDR表示機能
単に書き込めるだけでは面白くないのでBlackfinで使用しているLDRファイルの属性も表示できるようにしました。
Version 0.2.0ではBF592形式しか対応していませんが、順次対応を拡大しようと考えています。
あ、DEADBEEFなんて洒落ていますね。
ダウンロード
- こちらからダウンロードできます。
- 2016年2月27日現在:ウェブサーバーを変更し http://cubeatsystems.com/software/bfin-blueboot/bfin-blueboot_ja.html で公開しています。 @GarageStyleMscさんにお問い合わせ頂きました。ありがとうございます。
- ライセンスはMITです。
- 業務の開発に、趣味の開発に存分に御活用下さい。
- 無保証です。使用した結果起きる如何なる損害も当方は責任を負いません。
関連文書
- 先日の記事でM25P16の書き換えコードを公開しました。
- DSPいじりを楽しみたい方には、金子システム株式会社さんが販売されているACB-BF592をお勧めします。
- DSPなどの話題が盛りだくさんの酔漢さんのページ、DSP空挺団もお勧めです。
まとめ
今回のBlackfin BlueBootツールは、これからBlackfinを使ってみたいけどツールは高価で手が届かないという人にも、手軽にDSPを体験して頂く事のできるツールとして設計しました。Blackfin BlueBootで用いた、「第1段階に書き換え機能を持ったプログラムを流し込み」、「本当にやりたい事を第2段階でやる」という手法は、一般的に用いられる手法の一つです。
実はXilinx社のFPGAツールでもプラットフォーム・フラッシュの書き換えで同様の手法が用いられていたりします。
世の中の色々なツールの動作を観察してみるのも意外に面白いかもしれませんね。
登録:
コメント (Atom)