« November 2011 | Main | January 2012 »

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)

« November 2011 | Main | January 2012 »