「PIC24FJ64GB002 + FatFs でSDカードを扱う。」や「PIC24FJ64GB002 + FatFs でSDデータロガーを目指す。」で試したのはGeneric FAT File System Moduleというものだが、Petit FAT File System Moduleという、機能を抑えて大幅に軽くなったバージョンもある。
こちらも試してみた。
どれくらい軽くなっているかというと、
Total program memory used (bytes) : 0x9a02(39426) 60%
Total program memory used (bytes) : 0x3b1c(15132) 23%
という違いだ。
そのかわり、ファイルのコピーや、新しいファイルの作成などには対応しておらず、相当機能を絞り込んだ作りになっている。
しかも、「PIC24FJ64GB002 + FatFs でSDカードを扱う。」の回路と全く同じものに、ファームだけ焼直したらそのまま動いた。
予想されることだとはいえ、すばらしいことだ。
ちなみに、ChaNさんのサイトにあるサンプルとの違いによるプログラムの変更は以下の点だ。
main.cのConfigurationの変更
//_CONFIG2(IESO_OFF & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_HS)
_CONFIG2(IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)
pic24f.hのFCYの値の変更
//#define FCY 14745600UL
#define FCY 16000000UL
uart.cのBPSの値の変更
//#define BPS 115200UL
#define BPS 19200UL
main.cのIoInit()の中あたりに以下を追加
CLKDIVbits.RCDIV = 0b000;//FRC Postscaler 1:1 as 8MHz
CLKDIVbits.DOZEN = 0;//CPU peripheral clock ratio is set to 1:1
詳細は、データシートのFIGURE 8-1のクロックまわりのダイアグラムを見ると良く分かる。
上の2行は、要するにポストスケーらを2つとも1:1にする設定だ。
つまり、クロックは8MHz × 4 = 32MHzとなりFCYはこの半分なので、16000000とする。
これを元にボーレートを計算するわけだが、この計算はEQUATION 17-1に載っている。
USBが無い分だけ、ダイアグラムはすっきりしているので分かりやすい。
以上で、TeraTermと19200baudで通信できた。
57600baudまでは出来たがそれより速いと、私の環境では文字化けした。
回路は、USBシリアル変換モジュールを使い、クロクックは内蔵の物で動かしている。
組み込みっぽくスタンド・アローンで使うなら、この軽いバージョンで、もっと安いPICでも動かせるとしたら、なお嬉しい。
Generic FatFsの最新版を試してみた。
「PIC24FJ64GB002 + Generic FatFs も試してみる。」へ