C言語でPIC18F、SDカード読み書き

C言語でPIC18F、SDカード読み書き

aitendoで入手したカラーグラフィックLCD(M028C9325TP (320 x 240ピクセル)には、SDカードのソケットも実装されています。 ここに画像データを入れておいてLCDへの表示をしようと思います。

サイトを徘徊してみると、こちらのサイト(Interfacing SD Card With PIC Microcontroller-XC8) がPIC18Fを使用してXC8 Cコンパイラ用のプログラムでSDカードのアクセスを行っていました。 ソースコードも一式公開されているので利用することにしました。

上記サイトではPIC18F45K22を使用しています。 こちらではPIC18F26K22を使用していますが、少しの変更でうまく動作させることができました。

SD関連の結線は下記のとおりにして、これは上記サイトのコードでの各ポートの対応と同じです(プルアップ、プルダウン抵抗については変更)。 実はこのままですと先日LCDに表示を行った際のポートと重複してしまいますので、LCD側の結線はあとで変更することにします。

PIC                SDカード(LCDモジュール M028C9325TP)
————————————–
RC0               SD_CS   (10kΩの抵抗器でプルアップ)
RC3/SCK1    SD_SCK
RC4/SDI1     SD_OUT (10kΩの抵抗器でプルアップ)
RC5/SDO1    SD_DIN

ベースのC言語のコードは上記サイトからダウンロードできます。 サイトの下の方にある、 Download Mplab X Project SD_Card_FatFs(リンクしていません) です。

ダウンロードしたものは、そのままプロジェクトとしてMPLAB X IDE から開くことができました。

修正は以下の通り行いました。

1. MPLAB X IDE でのデバイス指定をPIC18F45K22からPIC18F26K22に変更

2. mcc_generated_files\mcc.c を修正
#pragma config P2BMX = PORTD2    // ECCP2 B output mux bit->P2B is on RD2

#pragma config P2BMX = PORTB5    // ECCP2 B output mux bit->P2B is on RB5

3. mcc_generated_files\pin_manager.c を修正
LATD = 0x00;
TRISD = 0xFF;
ANSELD = 0xFF;

 //    LATD = 0x00;
//    TRISD = 0xFF;
//    ANSELD = 0xFF;
————————————
LATE = 0x00;

 //    LATE = 0x00;
————————————
ANSELE = 0x07;

 //    ANSELE = 0x07;

あとはコンパイルして実行すると、上記サイトにあるように “Hello world! …(以下省略)”か書かれたテキストファイルがSD カード上に作られました。 SDカードは手元にあった1GByteのものを使っています。

PIC18F26K22のメモリ使用状況はこんな感じです(MPLAB X IDE v3.50)。
PIC18F26K22にSDカード接続 メモリ状況

ダウンロードしたコードのmain()では、f_mount, f_open, f_writeを使っています。 他にもいろいろ関数が用意されていて、f_readとf_writeを使用するとバイナリファイルのコピーもできました。 SDカードからバイナリファイルのリードは出来ているということになると思います。

メモリにはまだ余裕があるので、前回のLCDへの表示のプログラムと上手に合体して機能追加すれば、SDカードに画像ファイルをいれておいてそれをLCD上に表示できそうです。


関連記事
C言語でPIC18F、まずはLチカ (LED点滅
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続
C言語でPIC18F、カラーグラフィックLCD(M028C9325TP) 接続2
C言語でPIC18F、SDカード読み書き
C言語でPIC18F、SDカードの画像ファイルをLCD(M028C9325TP)に表示

PIC18Fカテゴリの最新記事