SDカードにファイルを作成してデータを書き込んでみる。
例によって、偉大な先人の知恵の記録をなぞるだけの事だが。
まずは、以前100均で買ったこんなものを用意する。
普通の人にはUSB接続のカード・リーダ・ライタだが、私には、
ケーブル取付用USBコネクタ(Aタイプ オス) 70円
ヒロセSDカードコネクタ DM1B-DSF-PEJ(82) 190円
ヒロセ・マイクロSDカードコネクタ DM3AT-SF-PEJM5 140円
の廉価版代替品に見える。
だいぶ安っぽい廉価版だが。
ソケットを基板からはがして、ピンヘッダをハンダ付けする。
ブレッドボードに挿せば、実験用には十分だ。
参考にさせていただいたサイトではLCDを使う関係から5Vの電源が必要なようだった。
ここでは、LCDはやめて代わりにLEDを2個で実行の様子を表示させることにした。
電源は3.3Vに統一できる。
プログラムに以下を追加し、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void gd(unsigned char c){ unsigned char i; for(i=0; i<c; i++){ LATAbits.LATA0 = 1; __delay_ms(100); LATAbits.LATA0 = 0; __delay_ms(100); } } void ngd(unsigned char c){ unsigned char i; for(i=0; i<c; i++){ LATAbits.LATA1 = 1; __delay_ms(200); LATAbits.LATA1 = 0; __delay_ms(200); } } |
正常に終了したとか、エラーだったとかを、LEDの点滅間隔と回数で示すようにした。
1 2 3 4 |
//MonitorPuts("Successful End!!") ; gd(4); //MonitorPuts("Abnormal Write!!") ; ngd(3); |
上の例では、成功なら短く4回点滅、失敗なら長めに3回点滅だ。
とりあえず、書き込みだけを試してみた。
実行すると、表面上はエラーは出ずに終了する。
ただ、完全に意図したとおりに完了する場合と、ファイルだけは作成されて、データが全て00で埋められるだけの場合の2通りがある。
書き込みに失敗してもエラー表示されればまだいいのだが、書き込めてないのにエラーも拾えてないのは困る。
これは、ちゃんと調べて問題を解決してからでないと、実際には使いものにならない。
ファイルだけはちゃんと作成されるのが逆にやっかいだ。
接触不良とかが原因だとすると、ファイルが作成されて、ファイル名も正しく付けられるというのがよく分からない。
※1
その後も状況は変わらない。
取りあえず、一番疑わしい手製のカード・ソケットのついてチェックしてみる。
1-1.そのものの導通テストに問題は無く、ハンダ付けに不具合は無いと思われる。
1-2.Arduinoにつないで書き込みと読み込みのテストをしてみたが問題無かった。
ArduinoでSDメモリカードを読み書きする
Using the SD library to create and remove files on a SD card
Using the SD library to log data
例はいくつでも出てくるが、例えば上の3つについて全く問題なく完了した。
専用のシールドを使う例もあるが、もちろんブレッドボード上で、手製のソケットに置き換えて実行した。
したがって、「手製SDカード・ソケット犯人説」は完全に払拭された。
※2
プルアップ抵抗の値を変更してみたり、電源ラインにインダクタを入れてみたり、電源回りに多めにパスコンを入れてみたりした。
思いつくことはその程度なわけで、でも、改善しなかった。
そこで、全く別の組み合わせとライブラリで再挑戦することにしたら、あっさりうまくいってしまった。
ここでやりかけたことは放棄し、新たに「PIC24FJ64GB002 + FatFs でSDカードを扱う。」で行うことになる。