いろいろ試す…

ブログ始めて1月ほど経とうとしています。書いてる記事はARM系が多いのですが、
このブログのヒットカウントの稼ぎ頭が以前少し触れたJTAGkey(の互換回路)の紹介と、
JTAGkeyとUrJTAGを使ってDDT誌のLattice基板へ書き込むの記事だったりします。
まぁ私がブログの記事をメモ帳代わりにして参照してるのでこのページカウント
だけ多いといったら当然なんですけど…そんな私のブログへの一番のリピーターさんは
googlebotさんだったりするorz




ううむ…もうちっと真面目に書くか…あーでも来週1週間は二次裏での活動に
集中したいしなぁ…困った…







話変わって、LPC2388の基板でできる事柄の追実験を私もいくつか行いましたの
で紹介します。まぁいわゆる他人のふんどしです。

●FreeRTOSを載せる
OS乗っけることによる恩恵って何なのでしょうかと自問自答する私。
そのまえにOSとはどういうものか、どのようにして動かすのか/動くのか等の
おべんきょが必要な段階です…山の頂上は遠い。

後閑氏のFreeRTOSの解説ページとFreeRTOSの公式サイトで配布されてるZIP中に
あるLPC2468用のデモを頼りにLPC2388の物に移植してみたところ、
先に作成したLPC2388用のファイルを組み込むだけであっさり動きました。
リンカスクリプトの修正もLPC2388用のアドレスに差し替え以外は特に大きな変更もなく
printf/sprintf等の標準関数が使えてます。
時間の空きを見てこのOSの仕組みやOS使用時の定石等を覚えていきたいと思います。

そういやLPC2388のエラッタでPLLが300MHz以上だったかは動かないとか言う記述が
ありますね。私が買ったのすべてチップrev.Bでエラッタの範囲外なので高めに設定してます。
雑誌の付録は多分みんなrev.Bだから大丈夫だとは思うけど…
(雑誌記事等のPLLてやけに低めに設定されてたのはここら辺の理由ね…)

ARM7_LPC2388_xxxxxxxx.zip 試される場合は自己責任でどうぞ。


●USBHostLiteを使ってみる
くんくん氏がGCC環境にてUSBHostLiteを使いやすくした形で公開されていましたので
こちらを使わせていただきました。前回の日記のをベースにUSBHostLiteのプロ
グラムを付け足す形で作成してます。ターミナルから「u」もしくは「U」を打つと接続
されたUSBメモリにアクセスを試みる形にしました。ちゃんと読み書きできていれば
適宜メッセージが表示されます。こんな感じでうまくいけてます

現在の外観はこんな感じです。サクサク書き込み&デバッグができるJTAGkey大活躍です。
左下に見えるLatticeの基板はAVR_Core使ってSDカード読めるところまでいってますが…
まだまだ初歩の段階です。こっちはいまだ手探りです。


●ChanさんのMCIアクセスプログラムを試す。
LPC2388用の拡張子基板がボリ松若松通商から発売されていますがSDの読み書きを
試すだけに6000円ペイするのは(趣味であっても無駄な所に金を落とすのは)
できなかったので残り物かき集めてSDカードのインターフェースだけこしらえました。
自分で作ると200円。基板組むのに25分ほど。さほど負担にはなりません。
イーサネット用の回路も自作に頼ることになるでしょうね。

プログラムはchanさんのWinARM20060606用のコードをCodeSourceryでコンパイルできる
ようにmakefileを書き替えただけで後はコピペしただけで難なく動作してしまいました。
RTCの時刻情報を反映できるような付加機能とかができたら公開したいと思います。

STM32の基板にもRTCとこいんでんちいっこいれる

ゴトッ

来たわよ

これはUSBのJTAGデバイスの普及間違いなしですね〜
いい時代になったものです…私はもう作ったからいいや(しれっと




昨日はLPC2388の基板にRTCとバックアップ用の電池付けましたが、STM32にも
同じ事やってみました。STM32もLPC2388と同じくVbatでバックアップできる
独立したパワードメインがあるのでコイン電池一個でRTCを動かせます。


CQ-STARMはVbatはジャンパ抵抗で切り離せられるようになっているので
改造も楽ちんです(他のリワークがきついけど)。こんな感じで各部品を実装です。


RTCのプログラムのサンプル
は以前のstdioのライブラリ使ったprintf
のプログラムをベースにRTC部分の割り込みと、UARTの受信割り込みを足しこんで
昨日のLPC2388のプログラムになるべく似せるようにしてます。
(どっちかと言うとSTMのがオリジナルなんだけどまぁいいや)
自己責任でどうぞ。あと32.768KHzの水晶は必ずつけるように!

ARM7TDMIに並行してCortexも本格的に覚えようかしら…ブログで公開するに
当たって深いとこまでいじって来たけどなかなか面白い。




今頃LPC2388基板(CQ-FRK-NXPARM)とかいぢってみる

2x歳も半ばを過ぎて、やっとクレジットカードを手にしました…
磁気カード式の定期使うためには半ば強制加入だったもんで仕方無く導入なん
ですけどね〜。案の定早速パスワード失念しかけて青くなる私。






CQ誌のインターフェース誌や今は亡きDWM誌は春になるとARM系のマイコン基板
が付録に付きます(ました)ね。フレッシャーズ向けとの触れ込みですが、これ系の
基板は通電前に回路図、部品データシートをよ〜〜〜〜く観て吟味した上で
遊ばないといけないのは周知の事実だと思います。

また、記事もゲーメスト並に豪快な誤植・間違いが多いので鵜呑みにしてしまうと、
マイコン初心者の方向けのEASYな難易度のはずがSUPERHARDのハマリ地獄に
直行したり知らぬうちに基板壊すなんてことも多々あります。
(「ザンギュラのスーパーウリアッ上」レベルなら笑って許せるけど+5Vと+3.3V
間違えるとかはヤバ過ぎだ)

幸いなことに現在はブログ等で情報の相互のやりとりができるのでホビーで楽しまれ
ている方でも出来るだけ損をしないように十分調査をした上で実験・製作等をする
のが良いと思います。ググるだけでも全然違いますからね。
ねむいさん的には危険と失敗のリスクを隣り合わせにするのも遊びの醍醐味と
思ってるので
付録基板の企画はこれからも支持したいと思います(性的な意味で)。


また前振り長くなりましたが、私もARM7TDMIのアーキテクチャ学習用にこの基板を
いぢっています。雑誌記事のチュートリアルは全てガン無視でMartin THOMAS氏の
LPC2378のサンプルをベースにLPC2388(CQ-FRK-NXPARM)向けにコードを移植、また
リンカスクリプト、スタートアップコードもnewlibのprintf系の関数が使用できる
ように試行錯誤を繰りかえして徐々に付け足していきました。
以下にARMをGCCでコンパイルする際、newlib(標準Cライブラリ)のprintf系関数
をハングしないように使うための最低限のコツとかを。
注:CodeSourcery/RaisonanceRIDE7の環境下でのコンパイルを想定してます。

1.システムコール関数群を定義する。
 syscalls.cというファイルにprintf系の関数を使用したときに呼び出される
 関数群を定義するのが通例となっています。定義してないとリンク段階で
 「sbrkr.c:(.text+0xc): undefined reference to `_sbrk'」とかのエラーが
 出てきてしまいます。
20110912改変:
 AVRやPICで慣れた人がSTM32やLPC2000/1000などのARMマイコンを初めて使用
 する際に必ず引っかかるポイントですが、CodesourceryG++などのGNUなビルド環境
 ではprintf等の関数の出力先を柔軟にするために_readや_write,_sbrk等のローレベ
 ル関数が実装されていないので自前で作ってやる必要があります。
 sourceware.orgにsyscallについての簡単な解説がありますので参照してください。

 printfを出力を吐かす先はたいていはシリアル出力となるので_readや_write関数
 については自前のシリアルの一文字入/出力関数をリターゲットしてやればよいです。
 上記URLに則すならたとえば_write関数のoutbyte(・・・の部分を自前のUART出力関数
 に置き換えればリターゲットは実現できることになります。

 _sbrkについてはprintf系関数(書式に変数を含まない場合に限りmemcpyが呼び出さ
 れるもようです)やmallocを使用する際にメモリアロケーターのローレベル部として
 後述の外部変数_endと絡めて呼び出される極めて重要な関数です。

 audin氏も(話がOSにも絡んでいますが)非常に深い考察をされていますので必読です!


2.リンカ・スクリプト内の_endの定義
 newlibは_sbrkという関数で_endを参照してきますので、リンカスクリプト内で
 外部変数_endを定義します。調べた限りではbss領域の直後でheap領域の初めに
 (heap領域がリンカスクリプト内で明示されてないのもあるが…。)
 定義されていますのでそう記述しておきます。

3.スタック領域の確保
 printf系の関数はスタックをびしばし使って1kバイト近く消費しますので、
 printf系の関数使う場合1kbyte以上+本来使用するスタックのバイト数を定義
 しときます。確保してなくてもパッと見ちゃんと動く時もあるので結構見落とされ
 がちです。動作が怪しい時は、スタックの確保量を疑ってみてください。
 Martin THOMAS氏のサンプルとそれを真似した私のソースはスタートアップ
 ルーチン内でスタック領域の確保を行っています。
 また、可変引数に変数がない純粋な文字列のみの場合、printf関数はコンパイラ
 側で自動的にputs関数に切り替えられます。

4.printfとか使うとリンクされる「.ARM.exidx」セクション
 WINARM20060606にはこんなのなかったはずですが…、ググりまくって調べると
 こことかここに詳しく説明がありました。
 arm-(OS名)-eabiな処理系でnewlibとか使うと無理やり挿入されちゃうようです。
 .ARM.exidxもリンカスクリプト内で適切に定義してやらないとリンク時エラー
 になったり「sh_link not set for section `.ARM.exidx'」ってワーニング
 吐かれたり、コードサイズが異様に膨れ上がったりしますのでやや注意です。
 私の環境では上記の様に配置して無難におさまってもらってます。


以上の点を踏まえ、printf/sprintf使用してUARTにRTCの時刻情報を吐く
CQ-FRK-NXPARM向けのプログラムをこしらえました。32.768kHzの水晶必須です。
おまけで#defineでscanfを使用した簡易メモリダンプに切り替えられるようにしてます。
ダンプのルーチンはSYSLAB氏が公開されていた物を使用させていただきました。
ソースはこちらに。自己責任でどうぞ。
フラッシュの書き込みができるlpc2388用のopenocdのcfgファイルもついでに。


RTC用のVbatは基板上でVccに直結されていますが切り離してやると本来の動作が
できるようになります。今、バックアップ電池でARM基板のRTCを動かすのが
流行ってるようなので私も真似して付けてみました回路構成はこんな感じです
今回使用したTAKACHIのCH7410-2032LFというボタン電池ボックスはコンパクトで
底が平らなため、CPUの上に両面テープでペタッと置けるので重宝してます。



DDT誌付録のLatticeXP2基板にAVR_Coreを実装する(するだけ)

少し前から下描きでずっと放ってあったいないさんの画像レス用の絵を
ガーっと仕上げて二次裏内で本人にいくつか使用してもらいました。
思えば私、ひさびさに真面目に虹メ&女主人らしい活動をした気がします。
やればできるジャン私!…そして滞るブログの更新。






少し前にAVR_CoreのLED点滅&UART垂れ流しのデモSVFだけ公開してましたが、
ある程度まとまりましたのでここに実装の仕方とか箇条書きで記しておきます。
ねむいさんが後から読んでわかるレベルのことし書きませんので悪しからず。
なんせまだ検証途中なもんでこれから先もどんどん変わる。

「お前の前フリはいつも長い」という方の為にソースは最初につけておきます。
自己責任でどうぞ。

1.ハードウエアを準備しないとね
 a.LatticeXP2基板はLDO&外部OSCを必ずつける。
  内部も使えますがシリアル吐かせたい時は正確なクロックが必要なので。
  クロックは30MHzを使用(kawasan氏のソースは内部で4分周してるので実際は
  7.5MHzでうごいてます)。これは私がやってるお勧めできない実装例

 b.LatticeXP2に何らかの手段で書き込みができるようにしておく。
  内蔵フラッシュにはUrJTAG+JTAGkeysvfファイルの再生という形で
  コンフィグができます。
  JTAGkey(と互換回路)は持ってるけどLPTポートが無いPCやなひたふさんの
  78kライタが使用できる基板を持ってない&無駄にCOMポート増やしたくない
  なんて人は私がやってる方法で試してみてください。

2.論理合成用のソフト群のインストール…
 アカウントもらえるの時間かかるけどがんばれ。
 れっつごー

3.AVR_Coreのソースは…
 kawasan氏がxilinx用に実装を試みています。今回はこちらを使わせてもらって
 LatticeXP2向けとして実装していきます。

4.プロジェクト作って…
 ねむいさんは鳥頭でvhdlの文法はもうすっかり忘れてしまいました。だから
 なるべくソースはいじらない方向で、かついきなり本体に実装で行きます!!
 (シミュレーション等を一切考えてないとか一番ダメな手法だろうけど…)。
 プロジェクトに統合したvhdファイル群と階層構造はこちら
 
5.AVR側のプログラムは…
 WINAVR(20090313)を使用してATMEGA103用のプログラムをコンパイルします。
 後述しますがRAMは実デバイスとほぼ同じ4096バイト取るのでコンパイラ側で
 リンカスクリプトなどの細工とかを考える必要は全くなしです。
 (cyclone基板の頃はDWM誌に具体的な説明が何一つなくてホント苦労した)
 kawasan氏のhex2vhdl.cを実行形式ファイルにしておいて、make一発で
 prom.vhdまでプリッと出るようにしておきました。kawasan氏に感謝です。
 肝心のプログラムの内容はソースを参照のこと(はしょるはしょる)
 とりあえず前回とほぼ同じで、動いてますよ程度のものです。

6.とにかく一回合成してみる
 時間長い。すげぇ長い。仮想PC上で動かしてるからこんなものなのでしょうね多分。
 合成の結果を見てみるとROM、RAM共ブロックRAMを類推してくれてます。
 kawasan氏のxilinx用のものがそのまま使えるようです。kawasan氏にマジ感謝です。

7.外部に信号を出す
 外部に引っ張り出す信号の設定をします。今回は最小限の確認なので
 こんな感じに。後述しますがreset引っ張るときは元のソースは論理が反対に
 なってるので注意です。

8.jedファイルに落とす
 ピン配設定まで終わったらここでjed作ります。jedからsvfはこちらを参照のこと。

9.svfを書きこむ
 UrJTAGのバッチモードで一気に。svfファイル内のeraseいじっておくとあっとい
 う間に終わるのは前にも述べたとおり
 あと、何度かやってるうちに分かりましたが、バッチで動かすとUrJTAGがdetect
 に入ったときに時折フン詰まりになることがわかりました
 バッチの記述にdetectの前にfrequencyの設定を2回記述して回避してます。
 (原因はあとで調べます…)

10.うごいた。
 動いてます。ねむいさん自身はほとんど何もしてません。先達が残された偉大な
 足跡に感謝ですね…。というわけでもう一回おソース。冒頭のと同じです。
 試されるときは自己責任でどうぞ(定型文)

11.考察
 a.AVR側のプログラム容量の制限
  なんも考えなしにべーっと合成した場合、RAM:4096byte(固定),ROM:8192byte
  が限度でした。ブロックRAMは166kbitあるのでRAMが4096byteだとROMは
  16384byteでもギリでいけると思いましたが…駄目。
  RAMを2048に減らすと通るかしら?そうなるとRAMENDを細工しなきゃならない
  のでしたくないのですが、でも現状こんだけRAMROM使えたらおんの字ですよね!?
  
 b.AVR_Core側
  kawasan氏のvhdlソースをなるべく変えないスタンスで行きましたが、
  DDT誌基板のSW入力ピンをリセットとして使うと、論理が逆になってしまう
  のでソース中の記述も変えました。
  また、ROM容量を8192byteまで取ったのでROMのビット幅も変えてます。
  この二つの変更だけでDDT誌のLatticeXP2基板にAVR_Coreを実装できました。
  あ、prom.vhdのこと忘れてた。



…実装は上手くいきましたが、AVR_Core使う場合はこっからがやっとこ始まり
ですね〜…一応RAM&ROM容量の見積もりがついたんで作りたい物のめどはつけてます…
vhdlとか論理回路とかの再おべんきょは避けられないのかorz

明日絶対に筋肉痛になるな…

注!最悪PCまでつぶれるので真似しないでください


今回のお題
IF誌5月号付録LPC2388基板に品質の悪いUSBケーブルを使用して接続すると
接続した瞬間に発生する高電圧で基板上のレギュレータを壊してしまう件
の検証。
また、発生する高電圧を抑制して壊れないようにする対策の効果の検証。

IF誌が同時に勧めているショットキダイオードは上記現象とはあんまし関係ない
ので今回は付けない。

追:
simさんちのコメントで関係がない割には妙に事情に詳しい人が弁解をされておりました。
dv/dtのコントロールが出来てない回路では突入電流で過電圧が発生して素子が
破損するリスクがあるなんてのは聖闘士にとってはもはや常識中の常識です。
それ以前に誤植や思い込みによる間違いが多過ぎでCQ出版はひどすぎです。


実験装備:
1.CQ-FRK-NXPARM(IF誌5月号付録LPC2388基板)。
2.品質の悪いUSBケーブルとやらがないので
  USB2.0のA-B1mを一本,USB2.0の5m延長2本使って合計11mの規格オーバーの
  ケーブルを用意。(ケーブル組成はすべてVCC&GND:AWG24、D+&D-:AWG26
  っぽいです。)
3.2012サイズ、X5R,16V,10uFのチップ積層セラミックコンデンサ(MLCC)
  USBの規格上VCCにぶら下げられるキャパシタ容量上限が10uFだから
  これ選びました。


実験内容:
LPC2388基板とUSBコネクタをズボズボしたときの+5Vの電圧をオシロで観察する。
上記3.のコンデンサをうまく実装して同じことをする。
左下にコイン電池みたいな物体が見えるけど気にしないでください。

結果:(測定したのだいぶ前です)
あー
コンデンサない時
うー
コンデンサある時

考察:
It's groovy...
じゃなくて確かに電源の立ち上がりでオーバーシュートして一瞬ですが耐圧
オーバーしてますね。憶測ですが元からあるレギュレータの入力コンデンサの
CとUSBケーブルのLでちょうど共振しちゃっているのでしょうかね。
(電源立ち上がりの時定数が早すぎるとか??PID制御思い出した)
10uFぶら下げてやると水を打ったように電源の立ち上がりがなだらかになります。
対策は上手くいっているようです。

あと、わかっているとは思いますが、なだらかになるからと言ってむやみ
やたらに220uFとかでかいコンデンサ付けると今度は突入電流でUSBのホスト側が
過電流と認識してUSBデバイスを認識させなかったり最悪+5VUSBが大きく
ドロップしてマザボごと強制リセットとか憂き目にあいますのでUSBの規格に
従いましょうね。

ねむいさん的にはレギュレータの問題よりもVbatがVccに直けt(ry



EX:
私が出せる全力スピードでUSBコネクタを激しくズボズボする。
それはもう200回くらい。もちろんコンデンサは実装しない状態で。

結果:
レギュレータは全くの無傷。今日も元気に3.3Vを生成しています。
腕が攣った。
基板側の¥120で買ったUSBリセプタクルがガ●ガ●マ●コイになったので付け替えた。

考察:
(今日の日記のタイトル)

VCP(仮想COMポート)DEMOを動かす

SkyDriveにうpしたソースコードのファイルのURLが全部別のに
変更されていた!少し前に仕様が変わって10MB以下のファイルでも
直リン不可になってしまっていたらしいorz

人が見に来るようになる前にソースのダウンロード先だけは
確実に落とせるように変更しておきました。(←うつけ)
幸い画像の直リンはまだ出来るみたいだから画像の処置は様子見ですよぅ。




マイコン使って仮想COMポートを実現する…今ではいろんな手法があります。
tiny45などのAVR使って簡易なCDCなんかもできたりしていやはや
すごいな〜なんて。CQ-STARMに乗っかってる石にもUSBのインタフェ
ースがサポートされてるので当然のごとく仮想COMポート(以下VCP)の
デモなんか用意されてるわけですが…

これがなぁ…コンパイラのバージョンにシビアでコンパイルすら通らなか
ったり通ってもwarningわんさか出たりそれ潰してフラッシュしてUSBが認
識された!と喜んだのもつかの間ポート開いた瞬間に固まったりでもう一回
warningで出てたとこ穴のあくほど見て修正してやった開いた!と思ったら
今度は文字が送信出来てなくてもう一回ソースや海外の掲示板の投稿を穴
のあくほど見てまわりまわった挙句結局最適化のせいだとわかって修正し
てやっとこ使える代物になれたかなでも所詮はDEMOだと言ってしまえば
それで終わりですがそう言い切るのもなんだかな…あーつかれた。
いかんまた前振りが長い。

20110129追:
107系のUSB-OTGの物とソースを一本化し、なおかつエンドポイント3をダブルバッファリング
にしてさらに大量のデータを受信したときに取りこぼすバグを修正しました。こちらからどうぞ。

おソースはこちらです。USBライブラリV3.1.0のデモを適用してます。
上で長々と書いた私の無駄な努力が修正されています。
(どうやらV3.0.0でもまだ不具合あったみたいですねorz)
20101221追:
 今気づいたけどダブルバッファリング化して動作をさらに安定化させたverにふつー
 のバグ満載verを上書きした状態で放置してました。でもローカルのソースも破棄して
 残してないからもう修正できないやごめんね(テヘッ♥



でもこのV3.X.X系ってライブラリの構成が大幅に変わってますね。
調べてみるとこの規格に合わせたといったところでしょうか。
てかこれだいぶ前の情報じゃないか…。
ねむいさんの知識は断片的で非常に危ういです。日々お勉強はつづきます。


あと私が使いやすいように独自の修正加えてます(これまで
公開したのもほとんど私仕様にしちゃったけど)。"Nemui"でコードを
サーチすると何やってるか分かると思いますが、重要なのを一つ。

void Virtual_Com_Port_init()関数開始直後にあるGet_SerialNum();
をコメントアウトしてUSBシリアルナンバを"STM3210"固定にしてます。
どうもこの関数がとってくるユニークIDとやらがうまくシリアルナンバを
反映してくれない。他のUSBデバイスだとあまり気にならないのですがVCPは
COMポートが増設され、違うUSBポートにさすごとにどんどんCOMポートが
増殖していくのでシリアルを固定にしてそれを防がなくてはなりません。
(多分うまくやる方法があるんでしょうけどね、現状はこれで満足…)






以下ねむいさん流仮想COMポートの消し方(WinXP32bit用)
1.提供された仮想COMドライバにアンインストーラがあれば
  それを使用する。
2.1.が無い場合、
  環境変数に画像の変数を追加する
  変数名:DEVMGR_SHOW_NONPRESENT_DEVICES
  変数値:1
3.パソコンを再起動。
4.ファイル名を指定して実行で"COMPMGMT.MSC"と入力、実行。
5.「デバイスマネージャ」を選択し、ウインドウの表示(V)をクリック。
6.プルダウンメニューの「非表示のデバイスを表示」をクリック。
7.「デバイスマネージャ」-> ポート(COMとLPT)をクリックすると
  半透明のCOMポートが見える。不透明は現在物理的に繋がっているデバイス。
8.「削除」で憎いあいつを消す!これでCOMポートが消えます。

でも何度も言いますが提供された仮想COMドライバにアンインストーラが
あれば必ずそれを使用しましょうね。












9.たまにB.S.O.D.になって泣く

ディジタル・デザイン・テクノロジ付録基板のLatticeXP2にUrJTAG+JTAGkey互換回路でコンフィグする

2011.05.26追:
LatticeのISPVMがFT2232デバイスに正式対応となりました!
これで手軽に読み書きができるようになります。
いい時代となりましたね♥
追の追:
内蔵Flashに書くときは.jedファイルを指定します。
SPI-ROMに書くときは.bitファイルを指定します。
あとHS-1はGNDに落としておくこと。

2009.07.31追:
Latticeの付録基板を使用中、書き込み・消去が失敗すると以後基板からヤバ目
の発振音がしてJTAGで一切アクセスできなくなる事態に陥いることがあります。
これは「不完全なコンフィグ->コア電流異常消費->電圧ドロップ->再コンフィグ」
のループを繰り返してデッドロック状態に陥ってるからです。

この状態から回復するにはnPROGピンを(Lattice基板上でCN2_B07を)LOWに
引いたまま電源を投入して電源投入直後のコンフィグを開始させない状態で
JTAGにアクセスし、書き込みor消去を正しく完了させる必要があります。
依然としてこのページのアクセスが非常に多く大事なことだから2度言います。




DWM誌が廃刊休刊となり、新たにディジタル・デザイン・テクノロジ誌
略してDDT誌が刊行されました。ご多望にもれず、付属基板なんかがついてます。
石はLatticeのLFXP2-5E-5TN144Cですね。フラッシュベースの不揮発型FPGAですって。

ねむいさんはLPC2388基板と秋月ARM基板動かすのに夢中になってたので
ほうっておいていましたが少しだけ触ってみましたよ。LPTの書き込みアダプタはもはや
作る気がなく、なひたふ氏の78kを使ったライタはCOMポートが増殖してしまいます。
ねむいさん的にはテストを兼ねてUrJTAG+JTAGkeyを使ってSVFファイルの
再生と言う形でLatticeの基板に書き込みをして見ようと思います。


…5月17日現在、ネットで検索してもデモのLEDチカチカを書きこんだ!
以外の作例が全くと言っていいほど見当たりません。
それどころかLEDチカチカの記事すらほとんどないのがさらに不安をあおります。
唯一chanさんはミクを動かしてレヴェルの違いを見せつけてくれていました。すげぇ。


私も一つ組んでみました。30Mhzの水晶とM25P40-VMN6P、LDOのADP3339なんか
つけてみました。あれ?このADP3339って…とお思いの方、かわいそうに…そう、+5V電源を
指示どおりに接続すると高い確率で発振するかのSH2基板に乗っかっていたアレですね〜。
今検索すると"「接続すれば発振する」は通用しない"と言う一文がトップに躍り出て
とても意味深です。でもADP3338/ADP3339はわるないよ?

それはおいといてこんな感じに各部品を実装。電源は容易に脱着できるように
JST-XAを。JTAGの端子は10Pinありますが、実際に信号が出てるのは
TCK,TMS,TDO,TDI,Vcc,GNDだけなので、馬鹿避け用に真ん中の一本はカットしてます。
ついでに9,10Pinもカット(最初からつけなきゃよかったorz)もちろん対になる8Pinコネクタ
(どうせ残りの9,10Pin繋がってないし…)はカットした真ん中の一本に
メクラをかませて馬鹿避けを実現してます。

ADP3339用のコンデンサは裏に実装してます。VinにはGRM21BB31C106KE15を、Voutには
秋月のこの子を付けて常時安定した+3.3Vの供給を行っています。
秋月のセラコンは+3.3V以下のセラコン対応のLDO用に大量に買っておいてもいいと思います。
あ、言い忘れてた、ADP3338/3339使うときはRP1、RP2は必ず除去してください!
真似する人はちゃんとデータシートで確認すべし。
さらに今回はSPIEEPROMは付けたけど一切無視するのでHS1のジャンパもカット。
やっとかないとSVFで書けません。

書き込む準備は出来ましたので次はsvfファイル生成ですね。
ISPLEVERとその他ツールはインストールしてあるものとして話を進めます。
jedの生成までは紙面にあるので省きますよ!!
(ツールをインストールするまで一苦労でしたね〜…認可もらえるまで
時間やたらかかったり、まぁその分しっかり審査しているということなのでしょう。
ちなみに私は組織名:二次裏メイド協会、名前:キリ・イセノミヤで通りました。
はぢめて上司が役に立った(笑)…っていいのかこれで)



では行きましょうか。
というわけでだいぶ端折ってjedが生成されたところからスタート。
これから先は画像付きで。
jedが生成し終わったらispVMを起動する
ChainConfigration1と言うウィンドウは即効消す。
UniversalFileWriterを起動
生成ファイルにSVFを選択
InputDataFileに先に生成したjedを選択
RUNTEST FROM REV.C をONにする
OutputDataFile名を指定する。
Genereteボタンを押してSVFを生成

はい出来ましたね?できてなくても次行きます。
次はいよいよ書き込みです。前ふり長くなりましたがこっからが本番です。
UrJTAGをダウンロードしてインストールしてください。JTAGkeyと通電した基板を接続し、
UrJTAGを起動。生成したsvfをUrJTAGと同じフォルダに置いて以下のコマンドを順番に。
その前に!HS1のジャンパカットし忘れてたら電源落としてカットしておいてね!

>cable jtagkey
>detect(ちゃんと繋がっていればここでチェーンが見える)
>part 0
>instruction length 8
>svf (生成したSVFのファイル名) progress
1分ほどたつと
>Scanned device output matched expected TDO values.
と表示され、FPGAがロードされます。

あと小技ですが、svfファイルの中のeraseの記述で
>! Erase the device
>
>! Shift in ISC ERASE(0x03) instruction
>SIR 8 TDI (03);
>! wait 1.20e+002 SEC
>RUNTEST IDLE 120000003 TCK;

>RUNTEST IDLE 120000003 TCK;

>RUNTEST IDLE 5000003 TCK;
くらいに減らしてやると書き込み時間を大幅に短縮できます。
最速で40秒くらいでコンフィグできます。それぞれの環境で調整して見てください。

また、もし書き込みが失敗してFPGAが不安定な状態に陥ったらnPROGピンを(基板上で
CN2_B07を)LOWに引いたまま電源を投入して再び書き込みを行って回復して
くださいね。基板捨てんじゃねぇぞ!あきらめるな1!!(←乙女の雄叫び)




こんなかったるいコマンド入力いちいちやってられるか!!と言う
方はバッチで実行するやり方もありますのでご紹介します。
こちらの中にサンプル付きでありますので中のファイル見てねむいさんが
何をしたいかが理解できる人だけ自己責任でどうぞ。
30MHzの外部OSC必須です。でもUART要らない人は特に周波数に気にしなくてもいいです。

JTAGkeyClone(FT2232系JTAG I/F)製作のすすめ


20130521追:
FT2232系デバイスを用いたJTAGKey/JTAGKey2製作に関しては
こちらを参照してください!











お仕事の方でサーボモータのおべんきょを一からしてます。
そもそもねむいさんは4年制大学を卒業したにもかかわらず就職氷河期の下、
20代後半まで介●の仕事をしながら本業の虹裏メイドをしていたので電気の分野は
ほぼ一からおべんきょなのですが、私の場合は元主人が遺したARMマイコンに
関するリソースが最初から大量にあったのでARMマイコンに関しては強くて
ニューゲーム状態だったのです。

とはいえまったくのどしろうとでもべんきょうさせてもらえながらちゃんとしごともさせて
もらえてさらにおきゅうりょうまでもらえるくみこみぎょうかいってすごいとおもいます。
ちなみにねむいさんのほんしょくのにじうらめいどはちょうぜつぶらっくでにんきのない
めいどは「」たちにすぐよごれきゃらのきゃらづけをされてあらしのどうぐにされてすてら
れるというれつあくかんきょうなうえにおきゅうりょうがはなくそていどしかもらえません。
ふぁっくです。

きょうのにっきおしまい。








…真面目に読んでしまった人すみません、続行します。



以前はJTAGの制御といえばPCのLPTポートに少しばかりのロジックデバイス、おもに信号
レベル変換のバッファが乗った回路を接続してI/O直叩きで制御ってのが主流でしたよね。
CPLD/FPGAを提供している各社もLPT接続タイプの書き込みケーブルの回路を公開して
いて、趣味で開発やっている人も自作が容易にできていました。

時は流れ、いまどきのナウでヤングでスタイリッシュなPCにLPTポートなんて時代遅れ
のものは搭載されなくなり、代わりにUSB接続のダウンロードケーブルがメーカから
提供されるようになりました。
しかし、USBのそれは各社のノウハウになっていて真似して自作できる代物ではなく
なってしまいました。しかも安くても3諭吉くらいしてホビー用途には手が出しづらい。

しかしながら数年前くらいからFT2232等のJTAGのライブラリがサポートされるデバイスが
出てきて有志の人たちがフリーで多目的に使用できるアプリケーションを作られてきました。




そのFT2232を使用したJTAGハードウエアで有名なのがAmontec JTAG keyですね。
容易に自作できるのでFT2232系は上記を含め多くの派生があります。それを通じてARM
マイコン等のJTAGポートを備えたデバイスにアクセスできる(フリーで使える)PC側のソフト
は、OpenOCD、UrJTAG等などたくさんあります。

先の日記で何度か言及してますが、私もかみき氏の作例をベースに一つ作成しました。
2電源レベルシフタがミソです。氏の回路と違う点は、ターゲットに電源供給する回路を
廃したことと、外付けEEPROM(AT93C66A)の回路を追加してAmontec JTAG keyに化かす
ことを目的としました。




自分自身の学習の意も含め、かみき氏互換のJTAGkeyCloneの回路図を起こしました。JTAGkey2Cloneに関してはこちらをご参照ください。

また、JTAGkeyCloneに化かすためのeepromのデータですが、こちらにあるJTAGKey用の
デバイスドライバのZIPファイルを展開するとJTAGKey_eepDataというフォルダがあります。
この中にあるamontecJTAGKey.eptというファイルをMProgで読み込んでeepromに書き
込んでください。もちろんEEPROMの書き込みの際は先にFTDIのドライバをインストール
しておかなければなりません。これは先のZIPファイル内のftd2xxというフォルダにあります。


20130521追:
JTAGKey/JTAGKey2製作に関してはこちらを参照してください!



以下JTAGkey互換回路を制御できるアプリの使用時の画面とかを。
詳しい使用記は以後の日記で幾つかをぽつぽつと。

注釈
IF誌付録LPC2388基板にOpenOCD+insightでデバッグ

注釈
asagaoでDWM誌2008年9月号付録のColdFire基板のEzPort経由のプログラム書き換え

注釈
OpenOCDで秋月ARM基板のRAMスタート

注釈
UrJTAGのSVF機能でDDT誌付録のLatticeXP2基板を高速にコンフィグ

注釈
HappyJTAG2とかいう怪しいのでAVRにJTAG経由で書き込み

注釈
fenrir氏作成のcblsrvのFT2232対応版を使用してxilinx IMPACTからコンフィグ
(注:fenrir氏によってISE11.x以降でも使えるようになりました!)

注釈
そして本懐のamtsvfplayerでSVFを再生…できねぇ!
20120215追:
amtxhal.dllはグルーロジック(非公開)が組まれたPORTB側のDS2432というEEPROMに
仕込まれたキー情報も読みに行っているのでクローンの場合はamtxhal.dllを
使用するプログラムは一切使えなくなります…がamtsvfplayerくらいしか使われてるの
見たことないのでJTAGkeyCloneでもそれ以外の用途では全く問題はありません。
JTAGkey系のCloneでsvf使いたいならUrJTAGを使いましょう。

STM32にJTAG経由でDFUを書き込む

20121108追:
内容がものすごく古てもう実用に耐えない内容なのでこちらを参照してください。
STM32に限らず普遍的な内容を網羅してあります。








急に冷え込みましたね…えっくし
あの子は今寒さに凍えて体を冷やしていないだろうか…?
…温めてやれないのでしんぱいです。




ARM系のCPUでJTAG経由のフラッシュプログラミング方法なんて
巷にものすごく詳しく解説付きであふれてるので、ねむいさん的には
皆さんに全く参考にならない方法を紹介していきたいと思います。

20120517追:
レガシーポートを使用する方法はもうお勧めできません!


●レガシーなLPT経由の方法
私はM570RUのユーザーです。こいつにはLPTなんてレガシーなもの存在
しません。じゃぁどうやってやんだよ!というとExpressCard接続のLPT拡張ユニット
をつかってLPTポートを"物理的に"設けます。昔ながらのIOポート直叩きができます♥

認識されるとこんな感じ。しかし!エクスプレスカード=PCIExpress接続の拡張
LPTなので物理アドレスがいつもの0x378とかじゃなく0x3CD8とかへんてこりんな場所に
置かれます。もちろん0x378にアドレスの変更なんてできませんでしたorz
(物理アドレスもらえるだけマシだが…)

というわけで使えるアプリケーションは限られます。H-JTAGというJTAGサーバー
を提供するソフトは0x3CD8でも設定可能なのでこれが使えます。
LPT接続用のJTAGインターフェースの回路図はこちら。Wiggler互換です。
なんでJTAGのコネクタをわざわざ10Pinから20Pinに変換してるのかというと、
AVRJTAGICE/JTAGICE mk2とALTERAのJTAGインターフェースがこの10Pinの配列で、
ねむいさん的にはこれを基準としてすべての制作物を合わせているからです。
ARMしか使わない人は元から20Pinでいくか各自のやりやすい配置で行きましょう。

H-JTAGの基本設定はこんな 感じに してください。
実はWiggler互換じゃなくてもLPTにつながりゃ何でも行ける。
Coretx-M3専用のTAPコントローラの設定は必ず行うこと。
そして難なく認識
書き込み消去もほとんどストレスなくサクサク行けます。


話変わりますが、なひたふ氏のMITOUJTAG評価版0.31&トラ技特別版は
上記の拡張LPTは一切使用不可でした。0x378,0x3BC,0x278の物理アドレス
しかサポートしてないみたいです。残念。(まぁ評価版だし…)
ちなみにlinuxのioperm()関数とかもサポートするアドレスの範囲が
0x3ffまでなのでそれ使ってる直叩き出来るアプリも全滅。全アドレスに
使えるiopl()関数に適宜書き替えてやる必要性があります。



●USB(JTAGkey互換回路)経由の方法
アマチュアのARM開発ではこちらが今現在最もポピュラーな方法ですね〜。
私のM570RUでもこれならスマートかつ無問題です。
(なぜかM570RUは物理COMポートがある。Linuxのデバッグ出力用だろうか?)。

先にも紹介しましたJTAGkey互換回路はかみき氏のものを流用させてもらって
います。扱える電源電圧範囲が1.65V〜5Vとだだっ広いです。
+5Vトレラントな2電源レベルシフタのおかげなのですが、JTAGkey単体の評価や
レベルシフタの実力は別件で測ってますのでまた後ほどにでも。

また、かみき氏の回路にAT93C66Aの外付けEEPROM回路をさらに追加して、
Amontec JTAG keyと全く同じVIDとPIDにしています。EEPROMの設定を含めた
ドライバファイルはこちらに
MProg書き込んでください。


STM32基板との接続も最もポピュラーな構成を流用しています。
STM32(というかARM全般)--JTAGkey互換(FT2232レイヤ)--OpenOCD(server)という
つなげ方です。

20120517追:
OpenOCDを使用したフラッシュの書き込みはこちらを参照にしてください。




前振り長くなりましたが、DFU(DeviceFirmWare)をJTAGkey互換回路で
STM32に書いてみます。今回のおソースはこちら。最新のSTM32-USBファーム
ウエアライブラリ
とDFUのデモソフトウエアを適用してます。わかっているとは
思いますけど試される時は自己責任でよろしくお願いします。
開始アドレスは0x08000000固定です。makefike内で0x08003000開始も設定
できますけど当然動きません。気を付けてください。

新しいDFUをJTAG経由で書きこんで見ます。成功したときのログは
以下のようになります。STM32はJTAGデバイスが2つ見えます。


> "C:¥Devz¥AVR¥WinAVR¥utils¥bin¥make.exe" program
openocd-ftd2xx -f interface/jtagkey.cfg -f target/stm32_flash.cfg -c "flasher main.elf" -c "resume" -c shutdown
Open On-Chip Debugger 0.2.0-in-development (2009-05-09-21:00) svn:1606M
BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS

500 kHz
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Part: 0xba00, Version: 0x3)
Info : JTAG Tap/device matched
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Part: 0x6410, Version: 0x1)
Info : JTAG Tap/device matched
Warn : no telnet port specified, using default port 4444
Warn : no gdb port specified, using default port 3333
Warn : no tcl port specified, using default port 6666
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Part: 0xba00, Version: 0x3)
Info : JTAG Tap/device matched
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Part: 0x6410, Version: 0x1)
Info : JTAG Tap/device matched
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08000ed8
Info : device id = 0x20016410
Info : flash size = 128kbytes
stm32x mass erase complete
Info : Padding image section 0 with 0 bytes
Warn : not enough working area available(requested 16384, free 16336)
wrote 8508 byte from file main.elf in 0.640630s (12.969411 kb/s)
verified 8508 bytes in 0.437502s
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Part: 0xba00, Version: 0x3)
Info : JTAG Tap/device matched
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Part: 0x6410, Version: 0x1)
Info : JTAG Tap/device matched

> Process Exit Code: 0
> Time Taken: 00:05

DFUが正しく書きこまれていれば、DFUseを起動するとこの画面が見えるはずです。

これでJTAGさえあればDFU書き潰して0x08000000でスタートするプログラム
書きこんでも大丈夫ですね。…と言いたいところですが!
STM32のコアクロックが停止する__WFI命令等を実行しっぱなしの
プログラムを不用意に書きこんでしまうと起動->__WFIでクロック停止->JTAG
インターフェースも仲良くおだんまりとなってJTAG経由のアクセスが
一切できなくなってしまいます!

これを回復するには先日紹介したシステムメモリからのブートでシリアル
経由でフラッシュの消去を一旦行うか、リセットボタン連打しながらJTAG経由で
うまく引っかかるまでひたすら消去動作を行い続ける方法があります
(ファミコンの裏ワザみたいだ)。私としては後者前者の方法を強く強くお勧めします。

STM32のフラッシュプログラミング

当記事の内容はもう古すぎるのでこちらを参照してください。





…あづい…あづいですね…まだ5月なのに〜…
まぁおかげでバイト帰りのいなちゃんの汗n





CQ-STARMは最初からUSB経由でファームウエアのアップロードができる
DFUというプログラムが書きこまれているため、外部のプログラマーが
必要ないのが特徴です。

その代り、開発に際してプログラム開始位置は0x08000000->0x08003000
からになる。という制約を受けます。
DFUを使用してアプリケーションを作るときは、0x08003000からプログラムが
スタートするように考慮しなければなりません。DFUのプログラムは
0x08003000に決め打ちですっ飛んで行きますので。
(この辺AVRだと楽なんですよね〜、ブート領域がメモリの後方にあって
ヒューズビットでいつでもスイッチできるからアプリの方はプログラム
メモリ容量以外は何も考えなくていいという)

考慮の方法は以下の2点です。
1.ソースコード内の割り込みベクタのアドレスを
0x08000000->0x08003000にする。
2.リンカスクリプト内のスタートアドレスを
0x08000000->0x08003000にする。
デバッグはDFU経由で書いて本ちゃんはまっさらからスタートしたい、
もしくはDFUなんていらんという人もいるでしょう。そういう時こんなの
いちいち書き変えてたらめんどいのでmakefileの記述で一発で切り替え
できるようにしちゃいましょう。

1.の部分、こんな感じで
2.の部分、ここをこうして
最後にmakeで切り替えられるようにする

と後あと楽です。ケアレスミスもなくなりますし。
以前のMassStorageClassDemoにもこれを適用していますので詳しくはこちらをご参照ください。
(RAMスタートの記述も形だけあるけど未サポートです。)

ちなみにCQ-STARMでDFUを使う場合、USBディスコネクトの回路を追加して
いると「Leave DFU mode」が正しく動くようになります…ってこれが当たり前か。
DFUなぞ使わないという人にはJTAGで書く方法とシリアルで書く方法が
あります。今回はシリアルで書く方法を紹介します。JTAGは次回にでも。

STM32はオンチップフラッシュROM、オンチップSRAM、オンチップのシステム
メモリの3種のブートモードをサポートしていて,DFUや通常のアプリは
フラッシュROM、RAMスタート時はオンチップSRAM、そしてSERIAL経由で
STM32のフラッシュを書き換えたい時はシステムメモリからの起動を選択できます。

JTAGあるしシリアルなんていらんジャンなんていう人もいると思いますが、
変なプログラムを書きこんでしまってJTAGが一切アクセス不可能に陥った
場合、強力な回復手段となるので、このモードがあるというくらいは
覚えておいてくださいね。

私はフラッシュ、システムメモリの2つのブートモードが選択できる
ように拡張基板にタクトスイッチを追加しました。どことどこを繋ぐかはこんなかんじで
シリアルは、USB-SERIAL変換のICしか使う気がないのでレベル変換かまさ
ずにTTLレベルのままで置いときました。
USB-SERIALのユニットはCP2102使って、TTLレベルでRxD,TxD,GNDの3つだけ
しか使わない凄く小さいのを
一つ作っておくと使い回しが効いて楽です。

用意ができたらBOOT0をVCCに吊ったままリセットを解除してシステムメモリ
からの起動を行います。その後PCにインストールしたFlashLoaderDemonstratorを起動します。USB-SERIALが繋がってる仮想COMポートを選択し、正常に通信ができていれば
こういう画面になります。そっからはフラッシュを消したり読んだり
書き替えたりプロテクト掛けたりと自由自在です。
CQ-STARMを仮想COMポートに化かしてももちろん行けます。基板2つもってる人は
一方を仮想COMポートにして試してみるよいでしょう。



おっと言い忘れてた、毎度毎度のことですが、自己責任でどうぞ!

MassStorageClass DEMOを動かす

最近工作ものばっかに手を取られて本業の二次裏メイド業が
おろそかになってる私。下描きでほったらかしているいないさんの絵が
早く仕上げてと訴えている。もうちょっと待っててね♥




さて本題、てDWM誌2008年5月号の付属基板と同梱のCDには
DFU経由でCQ-STARM基板に書き込みができるように
いくつかのデモがすぐに使えるようにとdfuファイル形式で
入っていました。しかし、紙面の説明がとても乏しく、そのとおりに
やっても動かない云々の意見と(その対策)が出ていたのは
みなさんご承知のとおりと思います。

この同梱されたdfuファイルというのはCQ-STARM向けではなく
STマイクロが提供する評価キットSTM3210B-EVAL/STM3210E-EVAL
向けのものです。

CQ-STARMはSTM3210B-EVALの回路構成を真似て設計されており、
STM3210B-EVAL向けのdfuデモファイル群も一応動くのですが、
その中でMassStorageClassの奴をそのまま使ってしまうと
ちょっとまずいことが起こります。

CQ-STARM上ではSDカードを挿入したときに必ずLになるポート
が出力になっており、ショートしてCPUおよびSDカードに
ダメージが行きます。どうなってるかはここ見てくださいね。
この件も私が見つけたわけではなく、去年すでに騒がれたこと
なのですが、忘れ去られた頃に新たにCQ-STARMに触る人がいる
かもしれないから書き残しておきます。


以下私が行ったわーくあらうんど。
●ソフトウエア
 初期のデモでは確かSTM3210B-EVAL上のLED4つが同時点灯するという
 コードのようでしたがV3.0.0/V3.0.1のデモコード見ると最小限のLEDのポートが
 出力になるようになってました。前回のコードはV3.0.0を適用してあるので
 そっちを使ってもらえればいいかなと思います。
 LEDの出力もCQ-STARMに合わせて変えてます。でも下のパタンカットは必須ですよ!
 ※ソースコードほしい方はメールください。

●ハードウエア
 STM3210B-EVALは本来MicroSD搭載なのでライトプロテクトと挿入検知は
 存在しない。だからここにつながるパタンいらないからカット!
 こんな感じで

ついでだから他の便利な改造も基板に施してますので紹介します。

●USBディスコネクト
 USBのデモにはRESETをかけるとUSBが切り離されるUSBディスコネクト
 のコードが含まれているのですが、CQ-STARMはハード的に駆動させるための回路
 が存在しません。したがってDFUで書いてはUSBケーブル抜きを繰り返す
 必要があり非常にめどいです。だからこの部分を追加。
 具体的な改造はこんな感じ。パタンカットもなくビアとポリイミド
 テープを駆使してなんなく達成。これでUSB-miniBコネクタが激しい抜き差しで
 ガバガバマ●コイになるのを避けられます。


●加速度センサにコンデンサ追加
 加速度センサ周りに10uFのチップセラコンと1nFのチップセラコンを追加する。
 これは加速度センサの指示ですね。つうか本来はじっそうすべk

 10uFのチップセラコンは+3.3V系以下の系では秋月のこれを愛用してます。
 こいつは2012サイズなのに大容量でかつ静電容量変化率も少ないので、
 セラミックコンデンサ対応のLDOとも相性バッチリです。
 
 1nFのチップセラコンは1608のをビアと近接のGNDパタンはがして実装。
 10uFの方は元の1uFは一旦どいてもらってポリイミドでガードした上
 に仲良く同居。こんな感じで



使ってみた感じですが、わたしの手持ちの256Mb,512MB,1GB,2GBはすべて
Windows上のディスクドライブとして認識、読み書きもできました。
残念ながらSDHCはファームウエアで対応しておらず認識できないようです。

開発環境を整える(自分流に)

今日は日が照って暑いですね〜。私はここぞとばかりに押し入れにしまってた
夏服をひっぱりだして片っ端から洗濯していました。もう夏は目の前です。


それはおいといてネット上ではGCC+Eclipseを用いて無償でできる
ARM開発環境の構築法がすでに一般的に広まっていますね。
私もタd…GCC派ですがEclipseは使わず自分流の環境をおっ立ててやってます。
…うn、使いこなすまでのあれやこれやの設定とかがめどかっただけなんだ…。


20110728追:ビルド方法はこちらに誘導します


雑誌付録基板CQ-STARM(STM32)

去年、同基板の幾つかのサンプルをGNU Cにポーティングしてそれっきりに
していましたが、がた老氏が同基板で奮戦されているのに感化されて私も過去に
やってきたことを残すことにしました。


とりあえずマイコン工作基本の'き'であるLEDチカチカから始めてみましょう。
私はARMの開発環境としてRaisonanceのRIDEをインストールしてます。
実際RIDEも中身は「Codesourcery G++ lite for ARM」のツールチェインなんで
CodeSourceryでやってる人はそっちでも行けます。


プログラムはこちら。自己責任でどうぞ。
※ソースコードほしい方はめーるくだち

Martin Thomas氏のLED点滅プログラムをベースにSTM32の最新のファームウエア
ライブラリ
を組み込んでSTM32基板に対応したものを作りました。
printf,sprintf等の標準関数を正常に動かすためにRaisonance付属のリンカスクリプトや
その他もろもろをいじりまくりです。
この辺は長くなるのでまた改めて説明します。とりあえず動かす!

…今Martin氏のページ見にいったらChanさんのFATFS乗っけた作例を
アップデートされてますね〜。試してみたいが時間が…

いなちゃんかわかわ

思うところあって私もブログ始めてみました〜。
虹裏メイドな私ですがジャンルは技術系で
攻めてみよう か な と思います…。


STM32-Primer
↑とりあえずSTM32Primer使っていなちゃんを写してみる
…はぁ〜…やっぱりかわいいなぁ♥♥

…いいのかいきなりこんなんで

Go to top of page