LPC1769で遊んでます。(3)
SDカードをつなげてます。FatFsを使って、VCOM経由でモニタを動かすのが目標です。
工作編
- 適当なSDカードアダプタを半田付けしてソケットを作ります。ピンを間違えないように番号も振りました。
- 下記URLを参考に、SDカードとLPC1769を配線します。SDカードに供給する3.3Vは、2SC1815使って適当に実装しました。
ソフト編
プロジェクトは、このまえ作ったFreeRTOSを使いました。
- NXP_app_note_an10916 - 32bitmicro - 32 bit microcontroller (MCU) support - Google Project HostingからAN10916 FAT library EFSL and FatFs port on NXP LPC1700 (with software) V1 (Mar 4, 2010) をダウンロードします。
- zipの中のLPC1700_FatFs_Prjから、必要なファイルをプロジェクトへコピーします。ファイルリストは、以下の通り。nylpcの下とSDFSの下に分かれてます。main_sd.cは、FATFSのmain.cをリネームした物です。
- main_sd.cの初期化コードがエラーを出すので、IoInit関数をコメントアウトして、main_sd.cの初期化コードを削除します。
/*main_sd.c*/ //IoInitを削除 int test_sd () //mnain.cを改名 { char *ptr, *ptr2; long p1, p2, p3; FRESULT f_res; DRESULT d_res; BYTE b1; WORD w1; UINT s1, s2, cnt; DWORD ofs = 0, sect = 0; FATFS *fs; /* Pointer to file system object */ RTCTime rtc; // IoInit();//ここいらない。 //xputs("\nFatFs module test monitor for LPC17xx " VERSION_STRING "\n"); xputs("\nFatFs module test monitor for LPC17xx (" __DATE__ __TIME__ ")\n"); :
- monitor.hをVCOM経由に切り替えます。
/*monitor.h*/ #include <stdint.h> #define xgetc() (char)VCOM_getchar() //ここ #define uart0_put(x) (char)VCOM_putchar(x) //ここ :
- で、USBCDC.cのUSBタスクを書き変えて、モニタプログラムを呼ぶようにします。このままだとUSBタスクのスタックが足りないので、main.cのmain関数を書き変えて、とりあえず160くらいに増やします。
/*USB_CDC.c*/ : DBG("Connecting to USB bus\n"); USBHwConnect(TRUE); test_sd(); // echo any character received (do USB stuff in interrupt) for( ;; ) :
/*main.c*/ : vStartRecursiveMutexTasks(); vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY ); //USBタスクの開始 xTaskCreate( vUSBTask, ( signed char * ) "USB", 160, ( void * ) NULL, tskIDLE_PRIORITY, NULL ); /* Display the IP address, then create the uIP task. The WEB server runs in this task. */ LCDdriver_initialisation(); :
- あとちょこちょこリンクエラーやら参照エラーが起こるので、その辺を直します。
テスト
- 配線を確認して、電源を入れます。
- 起動したら、USB経由のVCOMでモニタプログラムを操作します。
- di → ds でSDカードが読めれば、多分OKです。
古い16MBのSDカードでテストしたときには、さっぱり認識しませんでした。新し目の1〜2GBくらいのSDカードが良いと思います。
ソース
GoogleCodeにあります。リビジョンは8です。
https://nylpc-freertos.googlecode.com/svn
参考文献
大変お世話になりました。
- http://www.page.sannet.ne.jp/kenjia/LPC1768_mbed_Xpresso_3.html
- NXP_app_note_an10916 - 32bitmicro - 32 bit microcontroller (MCU) support - Google Project Hosting
- http://ics.nxp.com/support/documents/microcontrollers/pdf/lpcxpresso.getting.started.pdf
- http://www.nxp.com/documents/application_note/AN10916.pdf
- http://www.atmarkit.co.jp/fpc/keyword/sdcard/sdcard.html