william_rain 发表于 2012-11-11 19:48:30

stc12c5a60s2读写SD失败

本帖最后由 william_rain 于 2012-11-11 20:59 编辑

stc12c5a60s2
I/O设置为推挽输出。在SD卡套上3.3v电平也对了

但是总是读出的数据为0xff
unsigned char SD_spi_read(void)
{
        UART_Send_Str("b");
        SD_SO = 1;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat7 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat6 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat5 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat4 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat3 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat2 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat1 = SD_SO;

        SD_SCL = 1;
        if (is_init)        delay(DELAY_TIME);
        SD_SCL = 0;
        if (is_init)        delay(DELAY_TIME);
        _dat0 = SD_SO;

        UART_Send_Byte(_dat);//通过串口查看总是0xFF
        return _dat;
}找到问题了,要SD_SO        = P1^3配置为高阻

devcang 发表于 2012-11-12 09:37:04

{:victory:}{:victory:}{:victory:}{:victory:}

bbssilverkey 发表于 2013-2-5 17:23:34

用硬件的更快
页: [1]
查看完整版本: stc12c5a60s2读写SD失败