SDカード3


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);
}


sd_card_gamen2.jpg

上記プログラムの結果


sd_card_kairo2.gif

回路図


sd_card_bb.JPG

実験風景


真空管
戻る