SDカード2は
SDカードに合わせてCPUのVCCは3.3Vです。(したがってシステムクロックは10MHzです。) ロジックレベル変換用ICが入手できたのでCPUのVCCは5V、システムクロックは20MHzにしてみました。 ついでに、 FatFs 汎用FATファイルシステム・モジュールをFatFs R0.09bからFatFs R0.10bにバージョンアップしました。 ソフトの変更は システムクロック変更に伴う変更をする。 mmc_bb.cのvoid rcvr_mmc (BYTE *buff, UINT bc)を下記のようにNOPによるディレイを入れます。 mmc_bb.cのvoid rcvr_mmc (BYTE *buff, UINT bc)は データの読み込みの際、CLKの立下り(シフト)から数百ナノたたないと SDカードからデータが出てこないみたいです。 なお、ファイル名mmcbb.cがmmc_bbに変更されてます。 f_mount()の引数が変更されてます。 #define NOP() __asm__ __volatile__("NOP"::) /*-----------------------------------------------------------------------*/ /* Receive bytes from the card (bitbanging) */ /*-----------------------------------------------------------------------*/ ///static void rcvr_mmc ( BYTE *buff, /* Pointer to read buffer */ UINT bc /* Number of bytes to receive */ ) { BYTE r; DI_H(); /* Send 0xFF */ do { r = 0; if (DO) r++; /* bit7 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit6 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit5 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit4 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit3 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit2 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit1 */ CK_H(); CK_L(); NOP(); r <<= 1; if (DO) r++; /* bit0 */ CK_H(); CK_L(); *buff++ = r; /* Store a received byte */ } while (--bc); } |
上記プログラムの結果
回路図
実験風景