(日々の記録)デジタルオシロを買った。家族と久しぶりに映画を見にいってきた。笑わないで!トイストーリー3である。このアニメ映画は、はっきり言って子供向けではない。子供の気持ちを忘れないでいる大人のための映画である。電気スタンドがスキップしてくるPIXERフィルムのオープニングを見ているだけで昔CGに夢中になったころの感動で胸が躍るのだけど、この映画は中味が深い。表面の筋を追うだけでは(それだけでも十分面白いが)、作者の本当の意図を理解することは出来ない。話はアメリカの典型的な子供たちの玩具(おもちゃ)のたどる運命を、奇想天外なアクション仕立てで辿り、玩具の主人公たちの生きざま(?)の中で、友情の絆の尊さを子供たちに訴えることになっているが、実はこれは表向きの話で、底流には玩具に対する作者の深い愛情が流れている。人間は何のために生きるのか。何を糧に生きていくのかを問うている。大学生になって故郷を旅立つ17才の玩具の主人が、主人公たちと別れを惜しむシーンは涙なしには見ていられない。半世紀も前に、古い生家の長い廊下を海に見立て、積み木を組み合わせて戦艦「長門」(大和でなく)を作り、敵空母と海戦をした幼時の記憶がよみがえる。どんな玩具(電子工作の部品も同じ)にも魂と命が宿っている。久しぶりのAVR開発(7/19/2010)それはともかく、FPGAのフォトフレームプロジェクトである。FPGAのSPIインターフェースのコード開発まで進んだ(未テストだが)。次は、プロセッサーにSPIを実装して、いよいよ画像データをFPGAに送る段階である(第6ステップ)。当初の予定では、プロセッサーはJPEG画像をビットマップデータにするためにフラッシュが大きくて速度の速いARMを予定していた。経験が浅いうえにSDカードのファイルシステムが未実装なので時間がかかる。早く画像が見たいので手っ取り早いAVRの方でSPIを実装することにした。AVR研究所と名乗りながら、ここ最近はFPGAばかりやっていたが、久しぶりのAVRの開発である。ついでなので、ChaNさんのFatFSのバージョンアップをすることにした。このファイルシステムの成長の速度はとても早く、2年前に作ったこのMega128基板のFatFSは、まだTinyFSがあったころの0.04で、去年のリニアPCMプレーヤーが0.07、今はさらに0.08まで上がり、機能が更に充実してきた。リリースノートを読ませてもらう。なになに、LFN(日本語ファイル名)が中規模なAVRでも使えるような改修がされている。32KB程度のフラッシュサイズでも動くようだ。このファイルシステムはとても良く出来ていて、プロセッサーの機種に依存しないモジュールと、機種に依存する下部ルーチンが明確に分割されており、沢山のプラットホームで動く。バージョンが違っても、上部ルーチンを取り替えるだけで動くと嬉しいが、そこまでは難しいだろう。そのためもありリリースの度に機種毎のサンプルソースがついている。いたれりつくせりの配慮である。テストベンチとなるのは、これまで、当ブログに度々登場したMega128の自作基板である。通常は、ChaNさんのFatFSのサンプルソースが入っている。LED電光掲示板や、Xbee電力ロガーの親機にもなった。おや、RTC.cが変えられていてエラーが出る。ディレクトリの表示でも変数未定義でコンパイルが止まる。FAT構造体も少し変わっている。全部のモジュールを取り替えた方が無難なようだ。ここのソースは全部入り(コマンドすべてを試せる)なので仕方あるまい。SPIのコーディングそのものは、あっと言う間に終わった。ロジアナで出力波形を見ると、どうもうまくない。SPIになっていない。送信の合間にクロックが出っ放しになる。これでは同期送信の意味がない。非同期にはスタートビットとストップビットがついているので、1フレームを送ったあと適当に休むことが出来るが、SPIは正確に送信ビット数のクロックで止めないと、あとがめちゃめちゃになる。クロックラインのDDRを入力方向にすることで、クロックを止めることができたが、どうやってもストップビットの9ビット目が残る。それに、まれにだが途中でクロックが止まらないところが発生するときがある。ボーレートや、CPUの周波数でも状態が変化する。TXEN(送信開始/停止)も入れるが効果なし。やってみたがあきらめた。Mega168(328)の標準USARTでは、この前のリニアPCMプレーヤーで使ったようにSPI(マスターだけ)になることが出来るが、Mega128は古い機種なのでその機能を持っていない。データシートにないことをやろうとするのはそもそも無理なようだ。Mega128のUSARTでSPIを作るのはあきらめ最終目的のSTM32へ(7/23/2010)ブレッドボードでMega168のSPIマシンを作っても良いが、SDカードの配線を組み直すことを考えたら、当初の計画通り、STM32の方で開発してしまう方が早そうだ。SDカードが組み込まれている雑誌付録のCQ-STARM基板、STM32F103VB6基板を取り出した。これも1年ぶりのARMである。情けないことにすっかり操作を忘れている。Eclipseの新規プロジェクトすらマニュアルを見ないと作れない。ソースコードは、ねむいさんのFatFSのソースを拝借する。Thomas氏がChaNさんのコードを基にSTM32用に公開したものに、「ねむい」さんがSTMのライブラリバージョンを3に上げ、Dfu下でも動くようにしてくれたものだ。ディレクトリごとまとめてEclipseのプロジェクトフォルダーに放り込み、refreshをかける。無事、Eclipseのプロジェクトが出来た。makefileとソースの#includeファイルのディレクトリパスを、こちらの環境に合わせコンパイルする。おお、エラーも出ずビルドはすんなり終わった。楽な、UARTからプログラムをロードするフラッシュローダーを用意する。この基板はたくさんのブートモードに対応するため、ジャンパーを追加してある。どれがどれだったか、これも全く忘れている。おやあ、愛用していたFlashLoaderが動かない(JTAGはセットアップが難しいので先送り)。あちこちいじってみたが、動かない。電源電圧を測るとあれあれ2.5Vしかない。試行錯誤しているときに電源コネクターを逆差ししたらしい。しつこいレギュレーターの呪いだ。USBから3.3Vを出すLDOが壊れてしまったようだ。Digikeyを覗く。ピンコンパチの300mA出力のレギュレーターLDS3985を見つけた。基板に乗っているLD2985のupgrade版らしい。価格も安い(¥101)。これは買うしかないだろう。XCS250E(¥1309)と一緒に発注する。総額は¥7865で、送料無料ラインを余裕で超えた。「ねむい」さんに刺激されてSTM32Fのピンコンパチの新型、STM32F107VC6(¥1369)と、Primer2や、ストロベリーリナックスのSTBee基板の512KBチップSTM32F103VET6(予備のつもり¥1542)がゲタとなった。CQ-STARMの方だが、LDOが壊れても、3.3Vラインに電源を供給すれば問題ないことに気づき、JTAGのコネクターのVccピンに乾電池をつなぐ。うむ、これまでのRTCソフトのLEDが点滅して無事UARTにも時計表示が出る。本体は大丈夫なようだ。Loaderが動いたり、止まったり安定しない。電源が低すぎる(3.3Vが3.1V)のか。翌日、3.3VのACアダプターとブレッドボードでしっかりした配線にしてやりなおし。おおお、FlushLoaderが動いたぞ。プログラムのロードも上手くいった。AVRで見た馴染みのFatFSのメッセージがARMでよみがえる。flでファイルリストが出た。何と、日本語ファイルも問題なく表示。