STM32F207はぢめました

un
ツイニキタヨー
去年くらいに発表されて以来トンと音沙汰なかったですけどES品ですがやっっと一般
ユーザの手にもわたり始めましたSTM32 F-2シリーズ。
従来のSTM32と違う部分は最大動作周波数が120MHzまで増加したのとメモリ保護ユ
ニットがついたのとフラッシュアクセラレータが(やっと)強化されて120MHzまでノーウエ
イトで動作可能となったのとその他諸々のペリフェラル機能が追加された点しょうか。
ライバルに相当するLPC1769も似たような機能をすでに備えているのでいまさら目新し
ものではなくなってしまいましたがー…。あ、そうそうフラッシュ容量も1MBまで増加
してます。低速な外付けのメモリとか用意しないでも結構でかいサイズのフォントもぶ
ち込めるのがうれしいです。

てわけでさっそく使用してみましたが、STM32F107VCT6とは一部ピンの定義が違います。
そこだけ注意してデータシートのmigration guideを参考に配線を変更しました。
un
使用したボードは元はSTM32F103VET6が乗っかっていたebayで格安で購入した基板です。
STM32F207からはFSMCが使えるので(←これ重要!)あえてこのボードを選びました。

次に開発環境ですが、もちろん従来から使ってきたCodesourceryG++を使用します。
しかしまだSTマイクロの公式サイトではF-2デバイス用のペリフェラルライブラリなんぞは
用意されていない(10x系とはレジスタ定義は全く違う)のでKEILのサンプルに含まれてい
るF-2用のbeta版に当たるV0.01と記された定義ファイルのみと上記のごく簡単なサンプル
コードを頼りに手探りで進めていきました。

ちなみにフラッシュの書き込みもF-2デバイスは手順が違うようでOpenOCDではSTM32F1xx
系とは別に用意されていました。後述しますがOpenOCDはSTM32F103xF/G系の512kByte
以上のフラッシュを持つ種への書き込みも対応しています…これはありがたい。
un
書き込み時はこんな感じです。

un
ぽぽぽぽーんと動かしてみたところです。480x272も一瞬だわ…流石120MHzとFSMC…。
そして国内のホビーユーザーでF-2のデバイス動かした人間としては今度こそねむい
さんが初めての人ですね!一番乗り!
次はSDIOに進みたいところですが、上で述べたとおりライブラリが無い状態なので手
探りで進むことになりそうです。まぁ10x系のものを参考にしたら何とかなるでしょう。
実はここまで動かすレベルになるのにかなり手間かかった…何せ資料が全くない…。


おまけ
un
2xx系はまだまだですが、512kByte以上のフラッシュ容量をもつ10x系のSTM32マイコンは
すでにdigikeyやmouserで購入可能です。ねむいさんも速効ひとつ購入してしまった。
1年くらい前にtaobaoでSTM32用の格安の空基板買っといたのがやっとこ日の目を見れま
したのでこっちにさっそく装着。単にフラッシュ容量が増えただけなので従来のライブ
ラリがそのまま転用できて動作の確認が非常にラクです♥

un
お約束カワウソ。

いろいろ試す8

国内は大変苦しい状況が現在進行形で続いていますが、今は新しい生活が始まる季節
でもあります。ねむいさんも二度とていどひくいといわれないように言われないように毎
年この時期に新たな決意をしながら勉強を重ねてきたつもりですが彼ははるかにていどた
かくなってしまってやっぱ資質も必要だよねと思いつつLED点滅で足踏みして茶を濁す
毎日を送っております…そうかあの悪たれも今春から阪大か〜…#




…てわけで前回に引き続き今回も小ネタをこなしていきます。

●キャラクタLCDを2線で制御する
元ネタは中華サイトのBBSより。2線と言ってももちろんi2c液晶ではないです。最低でも
データ4bit+制御2bit分合計6本のI/Oの接続が必要なHD44780互換タイプのLCDモジュ
ールを受動部品を駆使してたった2本のI/Oで制御を行うとこのとです。
コンセプトとしてはでんし研氏の鶏卵問題を解決するAVRライタに近いですね。
un
↑実際にATMEGA1284Pを使用してやってみました。久しぶりにAVR使った…
表示に使った超小型キャラクタLCDはtaobaoで一つ5元で購入したHD44780互換のもの。
これあと5個くらい持て余してるんですよね…(ボソ)ねむいさんは基礎研究しか興味
ないから面白い応用できる人が使ってくれるとうれしいなぁ(チラ

全部掃けました。ゲッツした方はweb上で面白い制作例を乗っけてくれると幸いです。


●LPC1114のI/Oトグルが…
> >>278
> main system clock48Mで、IOパタパタは約2Mだたよ。
とのことです。んなアホなと私も思いましたが、検証用のI/Oをトグルさせてる部分の
コード↓

while(1)
{
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
}

をGCC4.5.1の-O2でビルドして出てきた該当箇所のアセンブルリストが
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
390: 4a03 ldr r2, [pc, #12] ; (3a0 ) <-2cycle
392: 4b04 ldr r3, [pc, #16] ; (3a4 ) <-2cycle
394: 2100 movs r1, #0 <-1cycle
396: 50d1 str r1, [r2, r3] <-2cycle
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
398: 3101 adds r1, #1 <-1cycle
39a: 4249 negs r1, r1 <-1cycle
39c: 50d1 str r1, [r2, r3] <-2cycle
39e: e7f7 b.n 390 <-3cycle

でリファレンスマニュアル首っ引きで調べると合計14サイクル、理論上でもシステム
クロックが48MHzで約3.43MHzくらいでしかトグルすることが出来ない計算になってし
まうので最適化レベルにもよりますけどやっぱしこんなものですね…
ちなみにガチでLPC1114で理論上とりうる12MHzのトグルスピードを出したいのならば
STR命令の部分だけ延々と続くようにしてやればいいので、

while(1)
{
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
〜(出来る限り沢山並べる)
LPC_GPIO2 -> DATA = 0x00000000; // GPIO, write data
LPC_GPIO2 -> DATA = 0xffffffff; // GPIO, write data
}
ってしてやるとよいです。
この場合実際のトグル波形は↓のようになります。
un
Cortex-M0のSTR命令は最短2サイクルのため、GPIOがAHBバスに繋がっているLPC1114では
48MHzの場合は最高I/Oトグル速度は理論上12MHzとなります。


話は変わりますが、audin氏が指摘しているMARY基板で公開しているソースのライセン
スが矛盾している件
ですが、ねむいさん的には金銭が絡まない限り、つまりソースコー
ド自身はタダで利用できる状態のうちは別に大きく騒がれないだろうと思われます(ぉぃ
などと偉そうに言ってるそういうお前はどうなんだと言われそうですが、私の公開し
ているもの
は該当するスタートアップのコードはSTM32のアセンブラのスタートアップ
コードを参考にしてarm-v6mでビルドが通すことのできる独自のものなので…
…ぇーとあのその…セ、セウト!

20111203追:
その後の顛末
あつ氏の見解

audin氏曰くMARYのライセンス形態が修正されたようです
i2c.h,i2c.cに関しては大本のNxPのKeil向けライブラリのライセンスに関する
文章を引用すると...
> Software that is described herein is for illustrative purposes only
> which provides customers with programming information regarding the
> products. This software is supplied "AS IS" without any warranties.
> NXP Semiconductors assumes no responsibility or liability for the
> use of the software, conveys no license or title under any patent,
> copyright, or mask work right to the product. NXP Semiconductors
> reserves the right to make changes in the software without
> notification. NXP Semiconductors also make no representation or
> warranty that such application will be suitable for the specified
> use without further testing or modification.
とのことです。
ざっと見たところ
"ここにあるソフトは製品(ここではLPC1xxx)のプログラムのしかたに関する情報
をカスタマーに提供する例示的な目的のためだけに書かれましたよ"

ってのと
"(あなたが)このソフト使うことに(NxPは)責任も負債も持ちませんし
特許・著作権・製品のマスクワークのもとにあるライセンスや商標も譲渡しません"

という点がミソですね。再配布(redistribution)の制限に関する記載が見当た
らないのですが、再配布たことによって面倒なことになっても俺(NxP)は
責任持たないよと解釈しておけばよいでしょうか。


おまけ
MARY基板でaitendoさんの格安OLEDボード動かして見ましたねむいさんはCheepにいくZE!
これは公開しているプログラムに反映されています。
un

●SUG○IHUBはSUG○Iのか
http://www.system-talks.co.jp/product/sgc-4X.htm
ねむいさんはシステムトー○ス製のSUH○IHUBを副業元のノートパソコンで愛用しています。
SUG○Iハブは独自の電力増強回路によりUSBデバイスを安定して動作させることができ
るという触れ込みです。確かにやっすいUSBハブではよく発生する「バスパワーのUSBデ
バイス挿しただけで突入電流で電圧ドロップして同じハブに刺さってるUSBデバイスも巻き
添えで認識外れる」現象が一切発生しません。しかし…

STM32のマイコン基板を一から組んででLDOの動作確認してる時に気づいたのですが、
このハブを使った時だけダウンストリーム側のVbusの波形がえらめっちゃ汚い…
un
※ねむいさんが持ってるSUG○Iハブはこっちの少し古い型なので現行のモデルでは改
 善されているかもしれません

恐らく独自の電力増強回路(=+5VDCDCコンバータ)のスイッチング時の出力波形がもろ
に出ちゃってる感じです。デジタル回路だけならあんまし問題無いですが、これアナ
ログ含む回路だとこんだけ揺れてるとちょっと都合が悪いです。
てわけでハブ側の改造でさらにSUG○くできるかしてみました。
un
基板はDC-DCコンバータとNEC製のUSBコントローラIC,そして2ポート分(PORT1とPORT2)
だけですがUSBパワースイッチャ(電源監視)ICまで積んであります。さらにダウンストリーム
側には100uFのアルミケミコンが1ポートずつ鎮座しています。市販のハブのほとんどが最
低限のパーツで寄せ集めたチープな作りなのを鑑みると値段にしては超豪華な作りだと思
います。で、こんだけ出力に電解乗ってて波形があれってことはESR不足かな?てことで
DCDCの出力部に低いESRのキャパシタ乗っけりゃ解決かなと判断してねむいさんのトラの子
NEC-TOKIN製NEOCAP(150uF/10V品)をぶち込んだ!
un
un
よし!
てわけでさらにSUGO○くなれたようです。前途のとおりデジタル回路用途のみなら未
改造でも問題無いので昨今のUSB機能付きのマイコンでバリバリ開発する人には多少の
おいたにはびくともしないこのハブお勧めです!


●某付録のRX62N基板
国産マイコンは諸般の事情で全く興味ないので去年と同じく電源周りの挙動だけ…
un
電源立ち上がり
un
電源立ち下がり

去年のSH2A基板はLDOの出力が入力が断たれた後も0.数V程ず〜っとチャージを保ったまま
になって次回の電源投入時に不具合が出ていました。しかし、今回は+3.3VLDOにSBDをか
まして素早くチャージを放電するようにしてあり、しっかり対策されているようですね。

Go to top of page