■例のGPSロガー。今までの動作試験はひと段落したので、箱に収められるように組みなおす作業に入った。今回使っているATmega128はTQFP64パッケージで、ユニバーサル基盤で扱えるように変換基盤(ダイセン)に乗せている。ただ、使えるピンが丸ピンで、どうもピンの太さを間違えていたようで、接触不良のトラブルに悩まされた。かててくわえてSDカードのFAT16ライブラリのバグが組み合わさってわけが解らず。SDカードを2枚ほど潰してしまった。
これまで使ってきたバラックでも、動作はしたのだから、それを強引に箱に収めるという選択肢もあるのだけど、それをやらなかったのは、使わないパーツが乗ったままになっているということと、パーツの収まりが悪いということ、それとSDカードとGPSモジュールが近接しているのも気になるところだった。
SDカードとGPSモジュールの近接は、過去のロガー組み立ての中で、SDカードとGPSが近接するとGPSの感度が落ちる傾向があるような気がしていて、避けたいと思っていた。別にEMIを測定したわけでもないし、GPSモジュールへの電源ラインにオシロをあてたわけでもない。あくまでも経験上のものでしかない。
今回の組み換えで、AVRとSDカードへの給電ラインとGPSモジュールへの給電ラインは8.8mHのインダクタでデカップリングされた。効果のほどは不明、なのだけど、昇圧コンバータ(AS1322b)出力に含まれる高調波はフィルタされているようで、コンバータ出力が規定どおり3.3V弱程得られているのに対して、AVR側は3Vまで落ちている。3VはGPSモジュール(EM-406A)の動作限界付近らしく、動作が安定しなくなるのでGPS側にはインダクタを挿まず、3.3Vを給電している。
肝心のSDカードについてはここに来て悩まされることになった。
AVR(ATmega128)はダイセンの変換基盤上に乗せ、ヘッダピンを使っているのだけど、これが例えばMILソケットなどで使われている太さのピンでは使えず、もっと細い丸ピンでないと刺さらない。それはそういうものとしても、今度はソケットの方が微妙に径が太くて接触不良気味。どうも怪しいなあと思いながら、ランニングテストをやってみると、SDカードに記録されない。
道通を確認してみると、配線上はOKだけど、変換基盤上のICまで道通が来たり来なかったり。案の定、ソケットとピンの接触不良。ピンの先端に心持ハンダをつけてちょっと太くしたところ、道通問題は一応解決。このGPSロガーは自転車で移動中のバックパックに格納する予定なので、多少荒い使われ方にも耐えてくれないと困る。
それはそれとして、この接触不良問題が出ている間、電気的にやばい状態だったようで、テストを繰り返していたSDカードの挙動が怪しくなっていました。256Mあるはずのカードが128Mしか認識されなかったり、内部的にライトプロテクトがかかってしまっていたり。
CSDレジスタの値が怪しくなっていたので、内部的に怪しい状態になっているのは確実で、フォーマットも受け付けない。書き込み動作も正常にできているのかどうかも不明なので、こちらは破棄することに。
まともに使えるSDカードが残っていたのでそちらでランニングテストを継続。書き込み、読み込み動作はできることは確認できて、ただ、FAT16としての振る舞いがどうも微妙。ファイルサイズk関係のトラブルが多い。
ファイルサイズを拡張する際には、ディレクトリエントリ上のファイルサイズとFATの割り当ての2つの情報を変更しなければならない。原則として、FATの割り当てから算出されるサイズはファイルサイズより大きくなければならないのだけど、時々、FATの割り当てサイズが小さい場合が発生する。
FAT変更時に、クラスタの追加元と追加先の2箇所を変更する必要があって、この変更が単一のセクタに収まっているFATの場合は大丈夫だけど、FATの変更がセクタまたがりになるとおかしくなる様子。これはライブラリのバグでした。1ヶ月も経っていないはずだけど、ロジックを忘れかけていて、参りました。先日アップしているライブラリの方は最新版に中身を更新しています。