モールドが割れているのだ。熱で割れたのだろうか。中を見ると、見事に電解コンデンサーの一ヶのトップが膨れている。おおー、これに違いない。これを交換すれば動くかもしれない。予備のアダプターと交換してみよう。別の5Vアダプターをつけてテストしてみる。よーし全く問題なく稼動する。予想通り電源が故障の原因だった。予備の5Vアダプターのケーブルを切り、このコントローラーの電源に作り替える。取り外した故障のアダプターの出力電圧をオシロで調べてみた。無負荷でも3Vくらいのところから、激しい脈流になっている。平均では4.5Vでも、これでは正常に動かないはずだ。とりだしたコンデンサーは容量が1/3の300μFに低下していた。密閉機器に入っていたから、熱が原因かもしれないが、良く見るとこのコンデンサーの耐圧は6.3Vしかない。温度は105度まで耐えられるようだが5V出力なのにこの耐圧では問題が起きるはずだ。JPEGライブラリの実装に苦労する(1/3/2011)年末・年始の行事も一段落して、電子工作に時間をかけられるようになった。フォトフレームプロジェクトの第8ステップにあたるJPEGライブラリの実装を暮から始めている。今までのIJGのソースをモディファイしようと準備していたが、とっかかりがなかなか見つからず困っていた。前回の記事のようにsirius506さんのソース(MP3Player)を雑誌のダウンロードページで見つけ、JPEGデコードの道筋がついた。このソースは、こちらが意図しているのと同じJPEGからビットマップへの伸張(IJGではデコードと呼ばずdecompressと言う)だけなので、ライブラリの量が少なくて助かる。JPEGライブラリと、ユーザーインターフェースのモジュールをソースを読みながら選択してEclipseにとりこむ。彼のブログの記事を参考に、少しづつ移植作業を開始する。現在のBMPファイルを表示する本体プログラムに機能を追加していく。彼の記事のいう変更点はすべて修正が済んでいた(当たり前か)。Makefileにもモジュールを追加登録する。移植のコツというのがあるとすれば、全体を通して流れが確認できたら、とりあえずエラーを恐れずにコンパイルをしてみることだ。周到に調べていってもきりがない。エラーはあとから少しづつつぶせる。山ほどコンパイルエラーが出る。これは想定済みである。ひとつづつエラーメッセージを読み個別に解決していく。時間計測をTOPPERS/JSPのサービス関数でやっているので、当面はすべてコメントアウトする。SYSLOGなどのコードは、はずすか、UARTにメッセージを出すコードに置き換えていく。やっかいだったのが、boolタイプの定義でコンパイルエラーが出ていることである。このエラーはWebで調べてもはっきりしない。そもそも以前からオリジナルのコードにも「ねむい」さんの修正が入っている。エラーメッセージは予約語を二重定義していることを怒っているようなので、思い切って定義そのものを削除する。(未定義エラーのときは適当に設定。falseとtrueの2つだけなので余り心配ない)出力が問題だ。Sirius506さんのオリジナルはLCDに出している。ソースを調べているうち意外な機能を発見した。ソースコードを読む限りは、このライブラリは入出力のピクセルサイズを変えられるような感じがする。スケーラーがついていて1/8単位で縮めることが出来るようだ。これで大抵のJPEGファイルは何もしなくても表示ができそうだ(このあとreadmeファイルでも確認した)。出力は、今度のSPIはDMAを使ってやろうと思っているので、当面、UARTにただ16進出力を出し続けるコードにする。出てくる警告は無視し、エラーだけをつぶして行く。フラッシュのサイズは80KBくらい。こんどの石は512KBあるので楽勝だ。DMAが動かない(1/6/2011)コンパイルが通ったので、久しぶりにFPGAとSTM32基板、液晶モニターを組み立てて電源を入れてみる。おやあ、画面の上部に縞模様がでて画像が乱れている。SRAMアクセスがうまく行っていないようだ。これの原因究明までやっている余裕はない。JPEGのテストが先だ。「ねむい」さんから頂いたDFUSeで快調にファーム書き込みを終える。いちいちDFUManagerを動かしてDFUファイルに変換する手間が省けて効率が良い。「ねむい」さんありがとう。BMPファイルのブラウズのルーチンに間借りする形でJPEGデコードが動くようになっている。JPEGファイルをいくつかSDカードに入れてテスト。画面には出てこないがUARTに16進ダンプが流れる。よし、暴走せずに終わった。ふむふむ、このデコードは1行単位のようだ。頭の部分しか表示していないので何ともいえないが、ビットマップデータらしいコードが出ている。同じデータでなく変化しているので、JPEGデコードはうまくいっているようだ。このプログラムのもともとはChaNさんのFatFSのARM版である。ChaNさんのFatFSには速度を測るタイマーがついているのを思い出した。