SDカードからデータを読み込むためにFatFsを見直している。
FatFs 汎用FATファイルシステム モジュールをのぞいたら、サンプルの日付が2016.11.15となっていたので、せっかくだからもらってきて試してみる。
実のところ、PIC用のサンプルに変更は無いようだった。
とにかく、ffsample.zipをもらってきて、PIC24フォルダ内のファイルをプロジェクトに追加する。
環境は、
MPLABX IDE v3.45
XC16 v1.26
使ったものは、
PIC24FJ64GA002
SDカード
SDカードコネクタ
ブレッドボード
ジャンパー線
MCLR用のプルアップ抵抗
動作確認用のLEDと抵抗は適宜
USBシリアル変換モジュール
だ。
configuration bitsはwarningが出るので書き直した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// CONFIG2 #pragma config POSCMOD = NONE // Primary Oscillator Select (Primary oscillator disabled) #pragma config I2C1SEL = PRI // I2C1 Pin Location Select (Use default SCL1/SDA1 pins) #pragma config IOL1WAY = OFF // IOLOCK Protection (IOLOCK may be changed via unlocking seq) #pragma config OSCIOFNC = OFF // Primary Oscillator Output Function (OSC2/CLKO/RC15 functions as CLKO (FOSC/2)) #pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Clock switching and Fail-Safe Clock Monitor are disabled) #pragma config FNOSC = FRCPLL // Oscillator Select (Fast RC Oscillator with PLL module (FRCPLL)) #pragma config SOSCSEL = SOSC // Sec Oscillator Select (Default Secondary Oscillator (SOSC)) #pragma config WUTSEL = LEG // Wake-up timer Select (Legacy Wake-up Timer) #pragma config IESO = OFF // Internal External Switch Over Mode (IESO mode (Two-Speed Start-up) disabled) // CONFIG1 #pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768) #pragma config FWPSA = PR32 // WDT Prescaler (Prescaler ratio of 1:32) #pragma config WINDIS = OFF // Watchdog Timer Window (Windowed Watchdog Timer enabled; FWDTEN must be 1) #pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled) #pragma config ICS = PGx1 // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1) #pragma config GWRP = OFF // General Code Segment Write Protect (Writes to program memory are allowed) #pragma config GCP = OFF // General Code Segment Code Protect (Code protection is disabled) #pragma config JTAGEN = OFF // JTAG Port Enable (JTAG port is disabled) |
変更点は、FNOSC_FRCPLL と POSCMOD_NONE の2つ。
外付けでなく内蔵のクロックを使うための変更だ。
さらに pic24f.h の FCY の値を変更する。
//#define FCY 14745600UL
#define FCY 16000000UL
また、main.c の中の IoInit() 内の以下を変更した。
//uart_init(115200); /* Initialize UART driver */
uart_init(57600); /* Initialize UART driver */
これは、115200baudでは通信できなかったからだ。
速度を下げたら、問題なくコマンドのやり取りができるようになった。
さらに、main.c の中に以下の2行を追加する。
CLKDIVbits.RCDIV = 0b000;//FRC Postscaler 1:1 as 8MHz
CLKDIVbits.DOZEN = 0;//CPU peripheral clock ratio is set to 1:1
コンパイルしたらLFNまわりの部分でエラーが出たので、LFNを使わない設定にしたら出なくなった。
//#define _USE_LFN 1
#define _USE_LFN 0
LFNは必要ないので、エラーの原因は調べてない。
回路図は以下の通り。
もう、プルアップもインダクタも何にもなく、ただつないだだけだ。
これでも動くので、もしトラブルが出たら考えることにした。
なお、Petit FAT File System Moduleのサンプルも、同様の変更で同じ回路で動く。
ただし、ボーレートの設定だけは、main.c の中でなくuart.c のBPSの値を以下のように変更する。
//#define BPS 115200UL
#define BPS 57600UL
PetitFatFsの方が機能が少ない分だけ、他のプログラムに組み込みやすいかもしれない。
Tweet