亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sdmmc_mci.c

?? at91sam7a3 keil下sdcard驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if( (R1 & R1_SPI_IDLE)==R1_SPI_IDLE) {
        TRACE_DEBUG("R1_SPI_IDLE\n\r");
    }
    if( (R1 & R1_SPI_ERASE_RESET)==R1_SPI_ERASE_RESET) {
        TRACE_DEBUG("R1_SPI_ERASE_RESET\n\r");
    }
    if( (R1 & R1_SPI_ILLEGAL_COMMAND)==R1_SPI_ILLEGAL_COMMAND) {
        TRACE_DEBUG("R1_SPI_ILLEGAL_COMMAND\n\r");
    }
    if( (R1 & R1_SPI_COM_CRC)==R1_SPI_COM_CRC) {
        TRACE_DEBUG("R1_SPI_COM_CRC\n\r");
    }
    if( (R1 & R1_SPI_ERASE_SEQ)==R1_SPI_ERASE_SEQ) {
        TRACE_DEBUG("R1_SPI_ERASE_SEQ\n\r");
    }
    if( (R1 & R1_SPI_ADDRESS)==R1_SPI_ADDRESS) {
        TRACE_DEBUG("R1_SPI_ADDRESS\n\r");
    }
    if( (R1 & R1_SPI_PARAMETER)==R1_SPI_PARAMETER) {
        TRACE_DEBUG("R1_SPI_PARAMETER\n\r");
    }
}

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void DecodeR2(unsigned char R2)
{
    if( (R2 & R2_SPI_CARD_LOCKED)==R2_SPI_CARD_LOCKED) {
        TRACE_DEBUG("R2_SPI_CARD_LOCKED\n\r");
    }
    if( (R2 & R2_SPI_WP_ERASE_SKIP)==R2_SPI_WP_ERASE_SKIP) {
        TRACE_DEBUG("R2_SPI_WP_ERASE_SKIP/R2_SPI_LOCK_UNLOCK_FAIL\n\r");
    }
    if( (R2 & R2_SPI_ERROR)==R2_SPI_ERROR) {
        TRACE_DEBUG("R2_SPI_ERROR\n\r");
    }
    if( (R2 & R2_SPI_CC_ERROR)==R2_SPI_CC_ERROR) {
        TRACE_DEBUG("R2_SPI_CC_ERROR\n\r");
    }
    if( (R2 & R2_SPI_CARD_ECC_ERROR)==R2_SPI_CARD_ECC_ERROR) {
        TRACE_DEBUG("R2_SPI_CARD_ECC_ERROR\n\r");
    }
    if( (R2 & R2_SPI_WP_VIOLATION)==R2_SPI_WP_VIOLATION) {
        TRACE_DEBUG("R2_SPI_WP_VIOLATION\n\r");
    }
    if( (R2 & R2_SPI_ERASE_PARAM)==R2_SPI_ERASE_PARAM) {
        TRACE_DEBUG("R2_SPI_ERASE_PARAM\n\r");
    }
    if( (R2 & R2_SPI_OUT_OF_RANGE)==R2_SPI_OUT_OF_RANGE) {
        TRACE_DEBUG("R2_SPI_OUT_OF_RANGE/R2_SPI_CSD_OVERWRITE\n\r");
    }
}

//------------------------------------------------------------------------------
/// Initialization delay: The maximum of 1 msec, 74 clock cycles and supply ramp
/// up time.
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SdCard driver instance.
//------------------------------------------------------------------------------
static unsigned char Pon(SdCard *pSd)
{
    SdCmd *pCommand = &(pSd->command);
    unsigned int response;
    unsigned char error;

    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_POWER_ON_INIT;
    pCommand->pResp = &response;

    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // Send command
    error =  SendCommand(pSd);
    return error;
}

//------------------------------------------------------------------------------
/// Resets all cards to idle state
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SdCard driver instance.
//------------------------------------------------------------------------------
static unsigned char Cmd0(SdCard *pSd)
{
    SdCmd *pCommand = &(pSd->command);
    unsigned int response;
    unsigned char error;

    TRACE_DEBUG("Cmd0()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_GO_IDLE_STATE_CMD;
    pCommand->pResp = &response;

    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // send command
    error =  SendCommand(pSd);
    return error;
}

//------------------------------------------------------------------------------
/// MMC send operation condition command.
/// Sends host capacity support information and activates the card's
/// initialization process.
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SdCard driver instance.
//------------------------------------------------------------------------------
static unsigned char Cmd1(SdCard *pSd)
{
    SdCmd *pCommand = &(pSd->command);
    unsigned char error;
    unsigned int response;

    TRACE_DEBUG("Cmd1()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_MMC_SEND_OP_COND_CMD;
    pCommand->arg = AT91C_MMC_HOST_VOLTAGE_RANGE;
    pCommand->resType = 3;
    pCommand->pResp = &response;

    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // send command
    error = SendCommand(pSd);
    if (error) {
        return error;
    }
    if ((response & AT91C_CARD_POWER_UP_BUSY) == AT91C_CARD_POWER_UP_BUSY) {
        return 0;
    }
    else {
        return SD_ERROR_DRIVER;
    }
}

//------------------------------------------------------------------------------
/// Asks any card to send the CID numbers
/// on the CMD line (any card that is
/// connected to the host will respond)
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SD card driver instance.
/// \param pCid  Buffer for storing the CID numbers.
//------------------------------------------------------------------------------
static unsigned char Cmd2(SdCard *pSd, unsigned int *pCid)
{
    SdCmd *pCommand = &(pSd->command);

    TRACE_DEBUG("Cmd2()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill the command information
    pCommand->cmd = AT91C_ALL_SEND_CID_CMD;
    pCommand->resType = 2;
    pCommand->pResp = pCid;
    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // Send the command
    return SendCommand(pSd);
}

//------------------------------------------------------------------------------
/// Ask the card to publish a new relative address (RCA)
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SD card driver instance.
//------------------------------------------------------------------------------
static unsigned char Cmd3(SdCard *pSd)
{
    SdCmd *pCommand = &(pSd->command);
    unsigned int cardAddress;
    unsigned char error;

    TRACE_DEBUG("Cmd3()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_SET_RELATIVE_ADDR_CMD;
    // Assign relative address to MMC card
    if (pSd->cardType == CARD_MMC) {
        pCommand->arg = (0x1 << 16);
    }
    pCommand->resType = 1;
    pCommand->pResp = &cardAddress;
    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // Send command
    error = SendCommand(pSd);
    if (error) {
        return error;
    }

    // Save card address in driver
    if (pSd->cardType != CARD_MMC) {
        pSd->cardAddress = (cardAddress >> 16) & 0xFFFF;
    }
    else {
        // Default MMC RCA is 0x0001
        pSd->cardAddress = 1;
    }

    return 0;
}

//------------------------------------------------------------------------------
/// Command toggles a card between the
/// stand-by and transfer states or between
/// the programming and disconnect states.
/// Returns the command transfer result (see SendCommand).
/// \param pSd  Pointer to a SD card driver instance.
/// \param address  Relative Card Address (0 deselects all).
//------------------------------------------------------------------------------
static unsigned char Cmd7(SdCard *pSd, unsigned int address)
{
    SdCmd *pCommand = &(pSd->command);

    TRACE_DEBUG("Cmd7()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_SEL_DESEL_CARD_CMD;
    pCommand->arg = address << 16;
    pCommand->resType = 1;
    // Set SD command state
    pSd->state = SD_STATE_STBY;

    // Send command
    return SendCommand(pSd);
}

//------------------------------------------------------------------------------
/// Sends SD Memory Card interface
/// condition, which includes host supply
/// voltage information and asks the card
/// whether card supports voltage.
/// Returns 0 if successful; otherwise returns SD_ERROR_NORESPONSE if the card did
/// not answer the command, or SD_ERROR_DRIVER.
/// \param pSd  Pointer to a SD card driver instance.
/// \param supplyVoltage  Expected supply voltage.
//------------------------------------------------------------------------------
static unsigned char Cmd8(SdCard *pSd, unsigned char supplyVoltage)
{
    SdCmd *pCommand = &(pSd->command);
    unsigned int response[2];
    unsigned char error;

    TRACE_DEBUG("Cmd8()\n\r");
    memset(pCommand, 0, sizeof(SdCmd));
    // Fill command information
    pCommand->cmd = AT91C_SEND_IF_COND;
    pCommand->arg = (supplyVoltage << 8) | (0xAA);
    pCommand->resType = 7;
    pCommand->pResp = &response[0];
    // Set SD command state
    pSd->state = SD_STATE_STBY;

    TRACE_DEBUG("supplyVoltage: 0x%x\n\r", supplyVoltage);

    // Send command
    error = SendCommand(pSd);

    // Check result
    if (error == MCI_STATUS_NORESPONSE) {
        return SD_ERROR_NORESPONSE;
    }
    // SD_R7
    // Bit 0 - 7: check pattern
    // Bit 8 -11: voltage accepted
    else if (!error && ((response[0] & 0x00000FFF) == ((supplyVoltage << 8) | 0xAA))) {
        return 0;
    }
    else {
        return SD_ERROR_DRIVER;
    }
}

//------------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品久久| 国产亲近乱来精品视频| 99久久精品国产一区二区三区| 亚洲www啪成人一区二区麻豆| 亚洲三级在线播放| 亚洲色欲色欲www在线观看| 国产精品久久久久久亚洲伦| 国产精品女主播av| 日韩码欧中文字| 亚洲免费观看高清完整版在线| 亚洲视频资源在线| 亚洲另类色综合网站| 亚洲欧美成aⅴ人在线观看| 亚洲精品你懂的| 石原莉奈在线亚洲三区| 青青草97国产精品免费观看无弹窗版| 亚洲综合无码一区二区| 午夜精品久久久久久| 久久精品噜噜噜成人av农村| 韩国成人精品a∨在线观看| 高清国产一区二区| 日本国产一区二区| 欧美视频一区在线观看| 日韩欧美一级二级三级久久久| 久久亚洲春色中文字幕久久久| 国产视频亚洲色图| 怡红院av一区二区三区| 蜜臀a∨国产成人精品| 国产一区二区毛片| 在线免费观看视频一区| 91精品国产综合久久国产大片| 久久久久久久久99精品| 一区二区三区精品| 国产精品一区三区| 在线免费视频一区二区| www成人在线观看| 洋洋av久久久久久久一区| 日本不卡一区二区三区高清视频| 丁香另类激情小说| 欧美精品一卡二卡| 国产日产欧美精品一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 久久成人精品无人区| 色天使久久综合网天天| 精品日韩成人av| 一区二区三区精品视频| 国产不卡视频一区| 91精品久久久久久久久99蜜臂| 中日韩免费视频中文字幕| 日本不卡视频在线观看| 91老司机福利 在线| 欧美sm美女调教| 婷婷六月综合网| 91麻豆国产福利精品| 亚洲精品在线观看视频| 一区二区三区免费观看| 白白色 亚洲乱淫| 久久午夜色播影院免费高清| 视频一区国产视频| 日本国产一区二区| 日韩理论片网站| 成人一区二区三区在线观看| 亚洲精品一区二区三区在线观看| 亚洲资源中文字幕| 一本大道久久a久久精二百| 中文字幕制服丝袜一区二区三区 | 日韩不卡在线观看日韩不卡视频| 成人激情动漫在线观看| 久久亚区不卡日本| 精品中文字幕一区二区小辣椒| 欧美女孩性生活视频| 亚洲国产成人porn| 欧美午夜在线观看| 午夜视黄欧洲亚洲| 欧美午夜影院一区| 午夜精品免费在线| 欧美日韩国产首页| 亚洲成av人影院| 日韩欧美一二三| 久国产精品韩国三级视频| 欧美一区二区日韩| 国精品**一区二区三区在线蜜桃| 欧美一区二区在线视频| 午夜视频在线观看一区二区| 欧美一区二区三区思思人| 蜜桃av一区二区| 欧美精品一区二区蜜臀亚洲| 国产一区二区三区四区五区入口 | 亚洲国产精华液网站w| 成人美女在线观看| 亚洲色图欧洲色图| 欧美在线一区二区| 免费久久精品视频| 久久综合久久综合九色| 国产成人自拍网| 中文字幕精品在线不卡| 一本久久a久久精品亚洲| 性感美女久久精品| 精品少妇一区二区| a级高清视频欧美日韩| 悠悠色在线精品| 精品乱码亚洲一区二区不卡| 粉嫩av一区二区三区| 亚洲电影在线免费观看| 精品国产青草久久久久福利| 成人国产精品免费观看动漫| 亚洲一级二级在线| 精品人在线二区三区| 成人18视频在线播放| 亚洲一区日韩精品中文字幕| 日韩手机在线导航| 99久久精品国产一区二区三区| 石原莉奈一区二区三区在线观看| 国产亚洲一本大道中文在线| 色久优优欧美色久优优| 国产美女在线精品| 亚洲一区二区视频在线观看| 久久久久久久久久久99999| 欧美亚洲综合色| 国产成人免费在线观看| 奇米一区二区三区av| 亚洲婷婷综合久久一本伊一区 | 国产午夜精品在线观看| 在线观看精品一区| 国产99久久久国产精品| 婷婷六月综合网| 亚洲精品国产a| 亚洲国产精品成人综合色在线婷婷 | 日本vs亚洲vs韩国一区三区| 国产精品免费网站在线观看| 日韩久久精品一区| 色婷婷一区二区三区四区| 国产成人av福利| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲欧美日韩综合aⅴ视频| 久久精品水蜜桃av综合天堂| 欧美高清视频在线高清观看mv色露露十八 | 在线精品观看国产| av激情综合网| 国产成人亚洲综合a∨猫咪| 美女高潮久久久| 亚洲超碰精品一区二区| 一区二区三区色| 亚洲人一二三区| 一区视频在线播放| 国产精品五月天| 亚洲国产精品二十页| 亚洲国产成人午夜在线一区| 2017欧美狠狠色| 精品国产成人系列| 精品日韩一区二区三区免费视频| 欧美一级在线视频| 日韩女优av电影在线观看| 日韩一区二区三区av| 91精品国产综合久久婷婷香蕉| 欧美三级视频在线播放| 欧美美女一区二区| 欧美日韩精品一区二区在线播放 | 欧美区一区二区三区| 欧美少妇一区二区| 欧美无砖专区一中文字| 欧美性xxxxx极品少妇| 欧美日韩免费电影| 日韩视频免费直播| 亚洲精品一区二区三区蜜桃下载 | 久久草av在线| 国产一区二区在线电影| 国产成人小视频| 色综合天天综合网天天看片| 欧美在线观看一区二区| 91精品国模一区二区三区| 欧美电影免费观看高清完整版在线 | 亚洲日穴在线视频| 亚洲电影视频在线| 免费欧美高清视频| 福利电影一区二区| 色综合久久中文字幕| 91精品欧美福利在线观看| 精品99一区二区| 中文字幕亚洲精品在线观看| 亚洲午夜久久久久| 狠狠色丁香婷婷综合久久片| 成人精品在线视频观看| 在线看不卡av| 精品国产伦一区二区三区观看体验 | 91麻豆蜜桃一区二区三区| 欧美日韩免费高清一区色橹橹| 精品国产免费一区二区三区香蕉| 亚洲国产精品t66y| 亚洲国产精品久久人人爱| 精品一区中文字幕| 色综合网站在线| 精品日韩99亚洲| 一区二区三区小说| 国产精品一区二区三区99| 欧美私人免费视频| 久久久久亚洲蜜桃| 午夜欧美一区二区三区在线播放| 国产美女视频一区| 51午夜精品国产|