May 27, 2012

デジタルオーディオプレーヤー

E2601左の写真は、一見すると、今流行りの自作ヘッドホンアンプに見えるけど、そうじゃない。
携帯型デジタルオーディオプレーヤーだ。iPod とか Walkman と同じように、音楽を鳴らすことができる。
これを完全自作した。こう言ったものを完全自作する人は少ないだろうなあ。

回路自体は以前のコンテンツSTM32応用 デジタルオーディオプレーヤー その1と、ほとんど同じだ。STM32F405に SDIO と I2S インタフェースが内蔵されているので、それを利用して、microSD に入れた音楽ファイルを、FN1242 と言う DAC に送り、ローパスフィルター(LPF)用とヘッドホンアンプ(HPA)用の二つのオペアンプを通してヘッドフォンを鳴らしているもの。

E2602この回路を元に水城徹さんにプリント基板のパターンをおこしてもらった。世界には、ネット経由でプリント基板を格安で作ってくれる業者がある。今回の基板の場合、プリント基板10枚と送料をあわせて、たった 2700円で製造してもらった。

もちろん、業者が作った基板は部品が付いたものではないので、部品は自分で買い揃えてハンダ付けする必要がある。
STM32F405RGT6 は、DigiKey で買った。今日現在の価格は 1022円だ。
その他の部品は、全て秋葉原の秋月・千石・マルツ・鈴商などで買える一般的な部品だ。実はブレッドボードでヘッドフォンアンプを作ってみるは、このデジタルオーディオプレーヤーの最終段のオペアンプを決めるための実験だった。

E2603実際に作ってみると、やはり、最初のプリント基板なので、3つほどジャンパーを飛ばさないと動作しない。
また、デジタル部とアナログ部を共通の電源にしているので、デジタル部で発生したノイズ、特にSDIOのアクセス時に発生するノイズがアナログ部に回りこむ。プリント基板上では、アナログ部とデジタル部を切り離してパターンを作っていたので、その間にインダクタとコンデンサーでノイズフィルターを入れたら、ノイズが無くなった。部品側の写真の中央に空中配線した大きなコンデンサーが、それだ。

単四電池4本で、10時間くらい連続で聞けるから、それなりに実用的だ。

まだまだ不完全なものだが、一応、何とか音楽が聞けるようになったので、今後は回路とかプログラムとかをオープンソースとして公開したいと思っている。

E2604プログラム自体は、github で公開しようと思う。現状、44.1kHz 16bit のWAVファイルしか再生できないが、MP3 のデコードライブラリをリンクしたり、96kHz 24bit や 192kHz 24bit のハイレゾ音源再生への拡張を考えているが、プログラミングの得意な人に是非協力してもらいたい。(STM32F4のマニュアルによると、96kHz 24bit はスペックの範囲なのだが、192kHz 24bit はできるかどうか、やってみないと判らない)
また、
・回路図・レイアウト図
・ガーバーデータ(パターン・シルク・ドリル)・・(EAGLE CADで作ったもの)
や、プログラム等を作る上での議論などをWikiのようなもので公開するつもりだが、無料で、こう言ったWiki等を使えるところがあったら教えて欲しい。

プリント基板に関しては、上記で公開する予定のガーバーデータで、誰でも注文できるはずだが、もうちょっと回路を良くしてからの方が良さそう。特に、私はデジタルは専門なのだが、アナログに弱いので、LPF部やHPA部は、誰か得意な人の協力を得たいところだ。今のところ、単四電池4本の4.8Vで動かしているけど、本当は、単三電池2本でやりたいのだが、2.4Vで、ちゃんと動作するLPF部やHPA部を設計できてないんだよねえ。
まあ、as is で良いなら、部品載せる前の基板をコミケで配布しちゃうのも面白いかも。

とにかく、公開する予定なので、Wiki等を公開できるサーバーとかの情報や、プログラミングやアナログ回路設計などの協力してくれる人の情報求む。

それから、当たり前だけど、回路図とか見て作った回路は自己責任で使って!
下手な配線で、高価なヘッドフォンを壊しても責任持てないので、よろしく。

| | Comments (0) | TrackBack (0)

April 30, 2012

ブレッドボードでヘッドフォンアンプを作ってみる

E2590写真のようにブレッドボードでヘッドフォンアンプを作ってみた。
なんで、ブレッドボードで作ったかと言うと、オペアンプとか抵抗・コンデンサーとかを交換して、良い組み合わせを見つけようと言うため。ユニバーサル基板にハンダ付けして作るとオペアンプはICソケットにしておけば交換できるけど、抵抗とかコンデンサーとかを交換して回路定数を変更するのは難しいからね。ブレッドボードだったら、幾らでも交換できると思ったわけ。
秋月で小型のブレッドボードが150円から売っている。今回、使ったのは250円のもの。その他、ブレッドボード用のステレオミニジャック等も購入。抵抗類だけは千石で買った。

作る前はブレッドボードでの電子工作なんてハンダ付けもできない初心者用のものだと思っていたが、そうでもないことが判った。
まず、ハンダ付けに関しては、ブレッドボード用のステレオミニジャックは秋月で買ったキットなのに使う前にハンダ付けが必要だった。これじゃ「ハンダ付けもできない初心者用」じゃないよね。他にボリュームなど、幾つかの部品はブレッドボード用にピンをハンダ付けが必要だった。
また、ブレッドボードでの回路製作は、ユニバーサル基板でハンダ付けするより簡単かと思ったが、そうでもない。先のハンダ付けを除いても、回路組立に1時間くらいかかったから、大して変わりない。その上、ハンダ付けしてないから幾らでも作り変えできるやと、気を抜いて作ったら、回路を間違ってしまった。オペアンプの入力の+と−を間違えたのだ。電源の+と−を間違えたのじゃなくて良かった。

E2591ともあれ、回路ができて、試聴。
回路は、左図のもので、ゲインは1.36。電源は、単四エネループを4本の4.8V。電圧を低くしたのは、ゆくゆくは携帯オーディオとして使いたいからだ。
秋月で適当に買ったオペアンプを交換して比較した。
比較結果は次の通り。音が出ないものやオーディオとして役に立たないレベルのものは書いていない。
ただし、評価は私の個人的主観・趣味が反映されているので、一般的ではないので、注意。また、秋月で売っている全てのオペアンプを買って調べたわけではない。

OPA2134PA 音はするけど、それほどでもない。
NJM4580DD なんとか鑑賞に耐えられる程度。
OPA2353UA 音楽にはなっているけど、パンチが足りない。
NJM4556AM 安いオペアンプの割りにはいい音がする。
MUSES8820E やっぱり、高いだけあって良い音がする。

と言うわけで、上の5つのオペアンプでは、下の方ほど良い評価だ。
意外なことに OPA2353UA が良くない。秋月のヘッドフォンアンプキットに使っているオペアンプなので期待したのだが。回路定数が悪いのかも知れない。もう少し調査を続行したい。
NJM4556AM は、上記のオペアンプの中で、唯一オーディオ用ではない汎用オペアンプ。ただし、低電圧対応のオペアンプなので試したら、意外と音が良くて驚いた。これで、10個で300円とは滅茶苦茶コストパフォーマンスが良い。
MUSES8820Eは、ほとんど冗談で試した。このオペアンプは、動作電圧が±3.5V~±16Vなので、テスト環境の4.8Vつまり±2.4Vは完全な定格外だ。にもかかわらず、他を圧倒する音の良さだった。さすが高級オーディオ用オペアンプ。

で、やはり気になるのは、MUSES8820Eを定格で動作させると、どうなるかだ。上記と同一の回路で、電源を9V電池つまり±4.5Vで試してみた。
今まで聴いたことが無いくらい良い音がした。この音聴くまで、4.8Vでも十分だと思ってたんだけどなあ。
やっぱり、定格電圧で動かしたい。

| | Comments (2) | TrackBack (0)

April 09, 2012

春の秋葉原

E258先日、秋葉原に行った時の話。
電子部品を買おうと秋月に入ったら、若い女の子が回路図片手に部品を探していた。毎年、春になると秋月電子通商や千石電商と言った半導体や抵抗・コンデンサー等の電子部品を売る店に若い女の子が部品を買いに来る光景が見られる。たぶん、大学とか高専とか専門学校の学生で、学校から与えられたロボコンか何かの課題のために部品を買いに来ているんだと思う。いつもの年なら4月中旬以降5月くらいまでの風物詩なのだが、今年は少し早いかな?
もちろん、女の子だけじゃなく、男の子もいるはずだが、若い男が電子部品を買いに来るのは年がら年中なので別に目立ちはしない。女の子は、普段なら電子部品店に居ない上に秋葉原に似つかわしくない普通のファッショナブルな服を着ているから、目立つんだよね。
普段、秋葉原に若い女の子が居ないわけではない。ただ、秋葉原の街にあふれているのはメイド姿の客引きと、何かオタクっぽいファッションの娘ばかりなので、ごく普通のファッションがかえって目立つ。

若い女の子が、電子部品店に来るのは、毎年のことだけど、今までに面白かった事が2回ほどある。
一つは、数年前のことで、2人連れの真っ黒なゴスロリファッションの女の子が、秋月のベテラン店員相手に、「このセンサーがどうの、あの部品がどうの」って、質問していたこと。聞くとはなしに聞こえてくる内容から、ゴスロリの2人はちゃんと電子回路を理解して部品を探しているようだった。会話の内容とファッションのギャップが大きくて、思わず笑いそうになった。

もう一つは、確か去年か、一昨年のこと。女の子1人と男の子3〜4人のグループで、やはり秋月に部品を買いに来ていた。女の子が部品リストを読み上げ、「これ見つけて!」と命令すると、他の男の子が探していた。女の子は自分じゃ一切部品を探さなくて、男の子がパシリになっていた。このグループは完全に女の子が仕切っていたわけだな。
こう言うグループもリアルに居るんだな。女の子が「超団長」と書いた腕章をしているじゃないかと思っちゃったよ。

| | Comments (1) | TrackBack (0)

February 19, 2012

STM32応用 デジタルオーディオプレーヤー その1

E257しばらく、ブログで、STM32関係の記事をサボっていたのは、いつまでも『入門』じゃ、しょうがないので、実際に使えるものを作ろうと試作していたからだ。
で、やっと紹介できるレベルに達したのが、写真。STM32F405を使ったデジタルオーディオプレーヤーである。

microSD から STM32F405に読み込んだ音楽データを、I2SでFN1242 と言う最高 192kHz 24bit 対応の DAC に送り、ローパスフィルター用オペアンプとヘッドフォンアンプ用のオペアンプの2つを介して、ヘッドフォンを鳴らすと言うもの。以前、同じようなものを、SH-2で作ったのだが、回路が複雑で消費電力が大きすぎて、とても携帯用に使えるものではなかったし、SH-2のパワー不足で、192kHz 24bit の音楽データの再生はできなかった。

STM32F405は、SDから高速で読み出す SDIO インターフェースと、オーディオ用 DAC との標準的なインターフェースである I2S を内蔵しているので、回路はとても簡単だ。また、消費電力も少なく、写真のように単三電池4本で、らくらく駆動できる。

とは言え、現状では 44.1kHz 16bit の音楽データがやっと一曲 再生できるようになっただけで、その上、SDを読み出す度に雑音が乗るなど、まだまだ、改良すべきところが山ほどある。とは言え、最低限の機能が確認できた。

もう少し良くなったら、プリント基板を作って、携帯用に使えるようにするつもりで、その時は、回路やプログラムを公開したいと思う。

実は、もう一つ STM32 を使った応用例を作っているのだが、そちらは未だ公開できるレベルではない。
それも、ある程度進んだら、公開するので、お楽しみに。

| | Comments (0) | TrackBack (0)

January 01, 2012

あけましておめでとうございます

E256あけましておめでとうございます。

イラストは、成層圏を飛ぶ龍です。
参考になるようなものを何も見ずに、記憶だけで描いたら、こんな龍になりました。
まあ、個性的と言うことで・・

今年も、よろしくお願いします。

| | Comments (1) | TrackBack (0)

December 24, 2011

STM32入門 互換性

E255_2今回は、STM32の互換性の話。
データシートだけでは、本当のところが判らないので、実際に買って試してみた。
さすがに、全品目買うわけにはいかないので、左の写真のように適当に選んで購入して、テストしてみた。写真の上段左から STM32F100VET6B STM32F101C4T6A STM32F103RGT6 STM32F105R8T6、下段左から STM32L152C8T6 STM32F205RBT6 STM32F405RGT6 である。
結論から言うと、
・シリーズ内では、ハード/ソフト共に極めて互換性が高い
・シリーズ間では、ハード/ソフト共に、やや互換性が落ちる
である。

詳しく説明する。
まず、どのようなテストをしたかだが、全ての CPU には、最低限の外部部品を配線した。概ねパスコン及びリセット用のコンデンサーと電源としてのは単三電池2本、それとプログラム書き込み用の JTAG 端子だけである。CPU内蔵のクロックを使ったので、水晶も使っていない。
動作確認用として、全ての機種に存在する Bポートの 11ビットに抵抗を介して LED を配線している。
プログラムは、JTAGkeyクローンと ST-LINK で書き込んだ。もちろん、LEDチカチカするプログラムである。

【ハードウエア互換性】
F1シリーズ内とL1シリーズ内は、完全な上位ピンコンパチだ。
パッケージのピン数が同じなら、ピンの配置は同一だし、ピン数が増えても増えた部分は主にパッケージの四隅に集中しており、そのまま存在するピンの配置は同じようになっている。
もちろん、機種ごとに周辺機器が違うので、低位のCPUには無いピンの機能もある。例えば、F100やF101にはUSB用のピンが無いが、F102より上位のCPUにはUSBがある。上位CPUでUSBに割り当てられているピンは、下位CPUでは単純なI/Oポートになっている。これらのピンは、上位CPUでも起動時デフォルト状態では、下位CPUと同じ単純なI/Oポートとして使える設定になっている。プログラム上で、USBとして使用するように設定すれば、USBピンになる。このように、上位互換性が取れている。

同じようにF2シリーズ内とF4シリーズ内も、上位ピンコンパチだ。つまり、ピン配置的に言うと STM32は「F1シリーズとL1シリーズ」のグループと「F2シリーズとF4シリーズ」のグループの2グループに分かれていて、それぞれのグループ内では、上位コンパチブルになっている。

では、「F1/L1グループ」と「F2/F4グループ」で、全くピン配置が違うと言うとそうでも無い。
実は、違いは電源周りだけだ。「F2/F4グループ」には、VCAP/PDR_ON/REFGOFFが新設されている(PDR_ONは100ピン以上のパッケージにしかない。REFGOFFは現状持っている品種が無い)。
VCAPは、CPUに内蔵された定電圧レギュレータの平滑コンデンサー用のピンだ。あって当然というか、むしろ「F1/L1グループ」が平滑コンデンサー無しで動作している方が驚きとも言える。PDR_ONは、入力電源の下限値と動作可能温度範囲を変更するためのピンである。VCAP/PDR_ON共に「F1/L1グループ」では、VSSのピンに割り当てられている。その他、「F1/L1グループ」と「F2/F4グループ」で、VDDとVSSが逆転しているところもある。もし、「F1/L1グループ」と「F2/F4グループ」で共通して使うプリント基板を作る場合、上記のように電源周りだけは、気を付けなければならない。マニュアルにも書いてあるが、数カ所ジャンパーを設けるだけで対処できる。

【プログラムの書き込み】
最新版のファームウエアにアップデートした ST-LINK なら、全てのCPUに書き込みができる。
JTAGkey クローンの場合、OpenOCDのバージョンによって異なる。リリース版の OpenOCD 0.5.0 の場合、STM32F100VET6B と STM32L152C8T6 には書き込めなかった。GITで拾った最新ソースで構築した OpenOCD 0.6.0 だと、全ての CPU に書き込めた。この違いは、CPUのIDが OpenOCD に登録してあるかによる。
なお、STM32F405RGT6 に関しては、「F205のIDになっている」とのエラッタが出ているので、それで、古いバージョンの OpenOCD 0.5.0 でも書き込めたのかも知れない。エラッタが修正されると、OpenOCD 0.5.0 で書き込めなくなる可能性がある。

【ソフトウエア互換性】
プログラムが書き込めるからと言って、必ずしも正常に動作するわけではない。
最も下位レベルのCPUである STM32F101C4T6A (全STM32ファミリー中、価格が最も安い)に合わせて作った LED チカチカプログラムのバイナリを全てのCPUに書き込んだところ、F1シリーズは全機種、何の問題もなく動作した。しかし、L1/F2/F4シリーズは動作しなかった。
元々のプログラムはF1シリーズ用のヘッダ・ライブラリを使っていたので、これらをごっそり F4シリーズ用に交換しコンパイルしたら、F4シリーズで動作した。しかし、このバイナリを他のシリーズに書き込んでも動作しなかった。L1とF2もヘッダ・ライブラリを交換したら動作すると思うのだが、まだやっていない。
結論としては、シリーズ内は、バイナリーレベルのソフトウエア互換性がある。しかし、シリーズをまたぐと、シリーズ専用のヘッダ・ライブラリを使ってコンパイルしなおす必要があると言う事になる。

とまあ、こんなところ。
・シリーズ内は極めて互換性が高いから、シリーズ中一番低いレベルのCPUから始めてステップアップしても、一番高いCPUから始めても構わない。
・シリーズ間のハードウェア互換性は、電源周りが違うだけ。プリント基板を作るなら、数カ所のジャンパーで済むから、「F1/L1グループ」と「F2/F4グループ」で共通して使えるようにしておくと良いかも。
・シリーズ間のソフトウエア互換性は、シリーズ専用のヘッダ・ライブラリを使った再コンパイルが必要になる。これが面倒と思うか、どうかは、個人の考え。

と言うわけで、私は安いものから始めた方が良いと思うので、184円の STM32F101C4T6A から始めた。高機能高性能が良いなら、1243円のSTM32F405RGT6 から始めるのも一つの手ではある。(価格は、2011.12.24現在、Digi-key調べ)

| | Comments (0) | TrackBack (0)

December 15, 2011

STM32入門 STM32のファミリー構成

E254さて、実際にSTM32を買おうと思って、Digi-key 等を見ても、在庫しているだけで、200近い品種があるので、どれを買おうか迷ってしまうだろう。だが、STM32の型番には規則性があり、型番を見れば大体どういう中身か想像が付く。
今回は、STM32の型番の見方だ。

イラストのように型番には幾つかの要素がある。
(ア) シリーズ/ライン
シリーズ/ラインは、CPUの速度や周辺機器など、マイコンを大きく特徴付ける部分を示す。現状、STM32には F1シリーズ、L1シリーズ、F2シリーズ、F4シリーズの4つがあり、各シリーズ内では互換性が高い。

・F1シリーズ
最も古くからあるシリーズで、現在の主力。さらに細かく細分化される。(シリーズを細分化したのが、ラインなのだが、F1シリーズがデビューした当時は良く使われたが、最近はラインと言う言葉をメーカーでも使っていないようなので、無視して良いと思われる)
 F100:クロック 24MHzでUSART/SPI/I2C/ADCとタイマー。
 F101:クロック 36MHzでUSART/SPI/I2C/ADC。
 F102:クロック 48MHzでUSART/SPI/I2C/ADC/USB(クライアント)。
 F103:クロック 72MHzでF102に追加して、CAN/I2Sとタイマー。
 F105:クロック 72MHzでF103に追加して、SDIO/DAC/USB(ホスト)。
 F107:クロック 72MHzでF105に追加して、イーサネット。

・L1シリーズ
昨年出たシリーズで、低消費電力バージョン。
 L151:クロック 32MHzでUSART/SPI/I2C/ADCとタイマー。
 L152:クロック 36MHzでL151に追加して、LCDコントローラー。

・F2シリーズ
今年初めに出たシリーズで、高性能バージョン。
 F205:クロック 120MHzでUSART/SPI/I2C/ADC/USB/CAN/I2S/DAC/SDIO/タイマー。
 F207:クロック 120MHzでF205に追加して、イーサネット。

・F4シリーズ
今年秋に出たばかりのシリーズで、浮動小数点プロセッサ付きの高性能バージョン。
 F405:クロック 168MHzでUSART/SPI/I2C/ADC/USB/CAN/I2S/DAC/SDIO/タイマー。
 F407:クロック 168MHzでF405に追加して、イーサネット。

(イ)パッケージピン数
・T: 36
・C: 48
・R: 64
・V: 100
・Z: 144
・I: 176

(ウ)メモリ容量(RAMメモリの方は多少上下するので注意)
・4: ROM:16K RAM:6K程度
・6: ROM:32K RAM:10K程度
・8: ROM:64K RAM:20K程度
・B: ROM:128K RAM:20K程度
・C: ROM:256K RAM:48K程度
・D: ROM:384K RAM:64K程度
・E: ROM:512K RAM:64K程度
・F: ROM:768K RAM:96K程度
・G: ROM:1M RAM:96K 程度

(エ)パッケージ
・U:VFQFPN
・Y:WLCSP
・H:LFBGA
・T:LQFP

(オ)温度範囲
・6:-40度〜85度
・7:-40度〜105度

(カ)バージョン
・無い場合もある。
・A,B,C

と言う具合。ただし、周辺機器に付いては、数が多過ぎて網羅しきれないので、主要なものだけあげてある。また、同じシリーズでもピン数の多いものだけあるとか、メモリの多いものだけ設定のある周辺機器もあるから注意が必要だ。
また、全ての組合せがあるわけではなく、高速クロックのCPUに小容量メモリの組合せやピン数の少ないパッケージの組合せなどは無い。一般的に、高速なCPUで多機能な周辺機器なほど、メモリ容量が大きいほど、パッケージのピン数が多いほど、高価だが、多少、順番が異なっている事もあるので、購入の時には注意しよう。

では、クロック速度や周辺機器、メモリ容量やパッケージのピン数、浮動小数点プロセッサの有無が適切でさえあれば、どれでも購入して良いのか?
次に、気になるのは、互換性だ。ピン配置やプログラムに互換性があるのか?
と言うわけで、次回は、STM32ファミリー同士での互換性の話。

| | Comments (0) | TrackBack (0)

December 11, 2011

皆既月食をコンデジで撮った

E253これは、昨日の皆既月食を撮ったもの。
ブレているし、ピントも甘いけど、コンデジで撮った上、手持ちなのだから、これだけ撮れれば十分。逆に、これだけ撮れて驚いたくらいだ。
時間的には、ほとんど、皆既月食になった瞬間くらいだ。
いい月夜であった。

| | Comments (0) | TrackBack (0)

December 08, 2011

STM32入門 JTAGkey クローンを作る

E2521今回は前回に続いて、STM32にプログラムを書き込むために必要な JTAGkey クローンの話。
左の写真は、私が作ったJTAGkey クローン達。作った順に左から 1号機 2号機 3号機である。1号機は最初に作ったので、余裕をもった大きさに作っている。1号機で動作確認できた後、2号機と3号機は本格的に使うためにケースに入れ、小型化している。なお、2号機は最も丁寧に作ったのだが、他の人に貰われて行って、既に手元には無い。

JTAGkey クローンに付いてはJTAGkey cloneなどに詳しく説明があるが、これが私が作った回路図である。意外と簡単だ。
Jtag_keyポイントは、秋月で買った FT2232モジュール(1450円)と言う USB−シリアルインターフェースを中心に作っている事と、ロジック電圧の変換に 74VHC125 を使っている事、コンフィギュレーションを記録するためにシリアルROMのAT93C46/56/96を使っている事だ。なお、シリアルROMが回路図に載っていないのは、FT2232モジュールの上に直付けするパターンがあるためだ。
実は、このROMが曲者で、FT2232モジュールのパターンは、8ピンSOP(ピン間ピッチ1.27 mm パッケージ幅3.90mm)用なのだが、これが秋葉原の部品街で手に入らない。ROMを除く全ての部品は、秋葉原で手に入るのに・・・

E2522ただ、秋月では、DIPサイズのAT93C46が40円で売っている。冒頭の写真を見ると判ると思うが、私の JTAGkey クローン 1号機は、秋月で買った DIPのAT93C46を無理やり配線して使っている。
これに対し、2号機と3号機は、digi-keyで買った SOPサイズのAT93C56を使っている。11月29日付のブログで、「AT93C56A-10SU-2.7-ND」を買っておいた方が良いと言っているのが、これだ。
その他、74VHC125 は鈴商で 5個セットで 300円で売っている。ただ、SOPなので、DIPへの変換基板は千石で同じく5個セットで450円だ(ICより変換基板の方が高いのもなんだが・・)。 2号機 3号機で使っているケースも TB-55 と言う千石で180円で売っているものだ。2号機の内部写真も載せておくが、小型化のためにFT2232モジュールのピンも外している。ちょっと無理して小型化した感があり、ここまで小さくする必要は無いだろう。

E2523配線が終わったら、JTAGkey クローンには、コンフィギュレーションが必要だが、この作業は、Windowsパソコンで行う。JTAGkey クローンのコンフィギュレーションは一度やってしまえば、二度とやる必要が無いが、Linuxユーザーも、この作業の時だけ Windowsパソコンを使うなり借りるなりする必要がある。

JTAGkey クローンのコンフィギュレーションには、次の3つのファイルが必要だ。
・CDM20814_WHQL_Certified.zip
 ドライバからダウンロード
・CDM20814_WHQL_Certified_JTAGKey.zip
 おきばから、たどっていく。
・MProg3.5.zip
 MProg よりダウンロード
 現在では、FT_Prog の方が新しいようだが、今回はMProgを使って説明する。

以上のファイルは、ダウンロードの上、解凍しておく。

JTAGkeyクローン を WindowsパソコンのUSBに挿し込むと新しいハードウェアを見つけたと言うので、「CDM20814_WHQL_Certified.zip」の解凍したディレクトリを指定してドライバをインストールする。なお、回路図通りに作ったら、FT2232モジュール上のジャンパーは必要ない。

E2524MProg.exe を起動し、「File」メニュー「New」を選択し、左図の赤線で囲ったところのように値を変更する。(赤線で囲った内、幾つかは変更しなくて良い箇所もある)
その後、「File」メニューの「Save as」で適当な名前でセーブする。
「Device」メニューの「Scan」で、MProgの一番下に「Number Of Blank Device = 1」が表示される事を確認する。もし、そうでなければ、「Device」メニューの「Erase」で、ROMを消去する。
最後に「Device」メニューの「Program」でコンフィギュレーションを書き込む。

MProg を終わらせた後、JTAGkeyクローン を一度抜き、USBに再度挿し込むと新しいハードウェアを見つけたと言うので、CDM20814_WHQL_Certified_JTAGKey.zip」(さっきと違うので注意) の解凍したディレクトリを指定してドライバをインストールする。
この時、なんか知らんが、四回くらい新しいドライバーをインストする。

デバイスマネージャーで確認すると
・USB(Universal Serial Bus)コントローラの中に
 ・Amontec JTAGKey A
 ・Amontec JTAGKey B
・ポート(COMとLPT)の中に
 ・Amontec JTAGKey (COM25) <= COM番号は異なる
 ・Amontec JTAGKey (COM26) <= COM番号は異なる
があることを確認する。

これで、JTAGkeyクローンの準備ができた。後は実際にSTM32にプログラムを書き込んで動作確認するだけだ。

| | Comments (1) | TrackBack (0)

December 04, 2011

STM32入門 プログラムを書き込む方法

E251写真は STM32 にプログラムを書き込んだりオンボード・デバッグをするために、パソコンと接続するインタフェースだ。写真の左が自作したJTAGkey クローンで、右が秋月で買ったST-LINK。今回は、どっちを買えば、もしくは作れば良いかって話。

PICやH8、SH-2と同じように STM32 もフラッシュROMを内蔵していて、そこにプログラムを書き込んで使う。もちろん、プログラムは母艦となるパソコン上でコンパイルやアセンブル・リンクを行なって作る。

ここで問題となるのは、作ったプログラムをどうやって STM32内のフラッシュROMに書きこむかと言う事だ。STM32の場合、フラッシュROMに書き込む方法の情報がなくて悩むのではなく、逆に情報が多すぎて、何だか判らなくなる。STM32に関して書かれた書籍や雑誌に記事などは、コンパイラ・アセンブラ・リンカーやデバッガー、統合環境、プログラム書き込み・オンボードデバッガーなどを一度に説明しようとするが、それらの組み合わせは星の数ほどある。
しかし、パソコン上でプログラムを作るためのコンパイラやアセンブラ・リンカなどに関しては、無料で使える良いものがあって、パソコンとインターネットが使える環境さえあれば、数時間もあればセッティングできるので、ひとまず後回しにしよう。今回は「作ったプログラムをSTM32に書き込む方法」に絞って話を進める。

まず、物理的にSTM32のフラッシュROMへのプログラム書き込む方法は、以下の4つである。
 1: USB経由 (DFU)
 2: シリアルインターフェース
 3: SWD
 4: JTAG
この内、1は USB ケーブルで母艦パソコンと接続するだけと言う極めて簡単なインターフェースで良い反面、「USB I/F を持つ STM32にしか使えない」事と「最初に DFU と呼ばれるローダープログラムを、他の方法で書き込む必要がある」事と言う二つの欠点をもつので、以降の説明から除外する。
また、2もインターフェースは簡単だが、デバックができないなどの欠点がある事と、私自身が未だ動作確認していないので、これも以降の説明から除外する。

残りの3と4だが、これを実際に母艦パソコンに接続するインターフェースと、母艦パソコンでプログラム書き込みに使うアプリケーションソフトも幾つかあって、その組み合わせも多い。主な組み合わせを以下に示すが、表記上「」を物理的にSTM32と直接つながる部分、『』をSTM32とパソコンと接続するインターフェース、【】を母艦パソコンでプログラム書き込みに使うアプリケーションソフトとさせてもらう。

組合せ 1:「SWD」『ST-LINK』【ST-LINK Utility】
組合せ 2:「SWD」『ST-LINK』【TrueSTUDIO (Lite)】
組合せ 3:「SWD」『Versaloon』【OpenOCD】
組合せ 4:「JTAG」『JTAGkey』【OpenOCD】

組合せ 1 は、Windows上のみのサポート。私のところでも動作確認できている。
組合せ 2 も、Windows上のみのサポート。最も一般的なはずなのだが、私のところでは動かない。
組合せ 3 は、Windowsおよび Linux 両方のサポート。残念ながら、私のところでは動いていない。
組合せ 4 も、Windowsおよび Linux 両方のサポート。私のところでは、WindowsでもLinuxでも正常に動いている。

私が言うのもなんだが、私すら手こずって動作確認できないのは、お勧めできない。動作確認さえできれば、組合せ 2や 3も良いのだが、やはり止めておく。特に、組合せ 3は、これが動けば理想的なんだが、そうもいかない。

さて、残った組合せ 1と4では、それぞれ『ST-LINK』と『JTAGkey』と言うインターフェースが必要で、これはハードウエアだから、買うなり作るなりする必要がある。

ST-LINKは、秋月やストロベリー・リナックスで 2500円程度で売っているので、入手は楽だ。難点は、STMicroelectronics の純正なのは良いんだが、ガードが固くて中がどうなっているか判らない事。そのため、アプリケーションも STMicroelectronics の純正か、TrueSTUDIO (Lite)のような製品もしくは体験版だけとなる。書き込み用の ST-LINK Utility は、それなりに使えるのだが、私の場合、TrueSTUDIO (Lite)が動かいないので、デバックができない。もし、ST-LINKの中身が判れば、オープンソースのアプリケーションが作られるのだろうが、そうはいかない状態だ。

それに対し、JTAGkey は本物は1万円以上と高いし、どこで買えば良いのかも良く判らない。しかし、中身は良く知られているので、同等品(JTAGkeyクローン)を自作するのは簡単で 3000円程度で作れる。また、中身が知られているのでオープンソースのアプリケーションもあり、Windowsだけでなく、Linuxでも使える。JTAGkey は、JTAGインターフェースのデファクトスタンダードなので、STM32だけでなく、各社・各種のCPUマイコンやFPGAにも書き込める。それに対し、ST-LINK は、STMicroelectronics の STM8 と STM32 だけしか対応していない。

主に、LINUXを使っていて、余りお金をかけられない私としては、JTAGkey クローンが唯一の解だ。

と言うわけで、ここでの結論は「JTAGkey クローンを使ってSTM32にプログラムを書き込もう」って訳。
作り方は、また次回・・・

| | Comments (0) | TrackBack (0)

«STM32入門 何から買うか?