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

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

?? sd.c

?? 增強型51單片機fs7821sd卡、mmc卡讀寫程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
        if(!ReadyForData)
            continue;
            
        CSRWrite(SD_BASE + SD_BUFFER_BASE, 
            ((TDataCast *)&CurrentBuffer)->ucByte[0]);
        
        *((UINT32 *)(&SdCmdBuf[1])) = 
            SectorStart << BYTES_PER_SECTOR_SHIFT;	 //在Cmd Buffer中設置將要讀取的扇區地址
        if(SectorCount > 1) //如果是讀取多個扇區,則向SD/MMC卡發送讀取多個扇區命令
        {   CSRWrite(SD_BASE + SD_CLK_CTRL, CSRRead(SD_BASE + SD_CLK_CTRL) | SD_CLK_AUTO_DIS);    	
            Status = SdSendCmd(READ_MUL_BLOCK, SdCmdBuf);
            if(Status != STATUS_SUCCESS)
            continue;
        }
        else
        {
            Status = SdSendCmd(READ_BLOCK, SdCmdBuf);	//如果是一個扇區,則向SD/MMC卡發送讀取一個扇區的命令
            if(Status != STATUS_SUCCESS)
            continue;
        }
        if(CSRRead(SD_BASE + SD_IE) & SD_CRC16_ERR)	   //讀取SD/MMC卡的中斷寄存器,檢查讀取的數據的CRC校驗碼是否有錯,有錯則重試讀取過程,最多5次。
        {
            CSRWrite(SD_BASE + SD_IE, ~SD_CRC16_ERR);
            continue;
        }
        else
            return STATUS_SUCCESS;
    }
    return STATUS_FLASH_ERROR;
}

STATUS SdReadSector()
{
    STATUS Status = SdReadOneSector();
    SectorStart ++;
    return Status;
}

STATUS SdReadNextSector()
{
  STATUS Status;
  bit Stop;

  

  Stop = SectorCount == 1;

  CSRWrite(SD_BASE + SD_BUFFER_BASE, ((TDataCast *)&CurrentBuffer)->ucByte[0]);

  CSRWrite(SD_BASE + SD_COMMAND, SD_CMD_RX_DATA_ONLY);  	
  CSRWrite(SD_BASE + SD_CLK_CTRL, CSRRead(SD_BASE + SD_CLK_CTRL) | SD_CLK_AUTO_DIS);    	
  if ((Status = SdWaitCmd()) != STATUS_SUCCESS)
    return Status;

  if (CSRRead(SD_BASE + SD_IE) & SD_CRC16_ERR)
  {
    
    CSRWrite(SD_BASE + SD_IE, ~SD_CRC16_ERR);
    return STATUS_DATA_ERROR;
  }

  if (Stop)
    return SdStopCmd();

  return STATUS_SUCCESS;
}
//--------------------------------------------------------------------
// Write one sector of data to SD/MMC
//--------------------------------------------------------------------
STATUS SdWriteOneSector()
{
    STATUS Status;
    BYTE CrcSts;
    int RetryCount1 , RetryCount2;
    bool ReadyForData;

    if(!(CSRRead(SD_BASE + SD_STATUS) & SD_WPD))
        return STATUS_WRITE_PROTECT;
  
    SdWaitCard();

    for(RetryCount1 = 0; RetryCount1 < 5; RetryCount1++)
    {
        ReadyForData = false;
        for(RetryCount2 = 0; RetryCount2 < 20; RetryCount2++)  //讀取SD/MMC卡的狀態,SD/MMC卡沒準備好發送數據則循環重試20次
        {
            *((UINT32 *)(&SdCmdBuf[1])) = RCA;
            Status = SdSendCmd(SEND_STATUS, SdCmdBuf);	//發送帶一個response的命令,以得到當前SD/MMC卡的狀態
            if(Status != STATUS_SUCCESS)
                continue;  
            if(SdRespBuf[3] & 0x01) // READY_FOR_DATA in Card Status
            {
                ReadyForData = true;
                break;
            }
        }        
        if(!ReadyForData)
            continue;

        CSRWrite(SD_BASE + SD_BUFFER_BASE, 
            ((TDataCast *)&CurrentBuffer)->ucByte[0]);
        
        *((UINT32 *)(&SdCmdBuf[1])) = 
            SectorStart << BYTES_PER_SECTOR_SHIFT;	 //在Cmd Buffer中設置將要寫入的扇區地址
        if (SectorCount > 1) //如果是寫入多個扇區,則向SD/MMC卡發送寫多個扇區命令
        {   
            Status = SdSendCmd(WRITE_MUL_BLOCK, SdCmdBuf);
            if(Status != STATUS_SUCCESS)
            continue;
        }
        else
        {
            Status = SdSendCmd(WRITE_BLOCK, SdCmdBuf); //若為寫一個扇區,則向SD/MMC卡發送寫一個扇區的命令
            if(Status != STATUS_SUCCESS)
            continue;
       }
        CrcSts = (CSRRead(SD_BASE + SD_STATUS) & SD_CRC16_STS) >> 3;  //讀取SD/MMC卡返回的CRC狀態信息,以判斷寫入過程是否正確
        if(CrcSts != GOOD_CRC16_STS)
            continue;
        else
            return STATUS_SUCCESS;
    }
    return STATUS_FLASH_ERROR;
}

STATUS SdWriteSector()
{
    STATUS Status = SdWriteOneSector();
    SectorStart ++;
    return Status;
}

STATUS SdWriteNextSector()
{
  STATUS Status;
  BYTE CrcSts;
  bit Stop;


  Stop = SectorCount == 1;

  SdWaitCard();
  CmdTimer = SD_CMD_TIMEOUT;
  if (CmdTimer == 0) 
  {
    return STATUS_FLASH_ERROR;
  }

  // CSRWrite(SD_BASE + SD_BUFFER_BASE, Buffer >> 8);
  // hsin-chang huang
  CSRWrite(SD_BASE + SD_BUFFER_BASE, ((TDataCast *)&CurrentBuffer)->ucByte[0]);

  CSRWrite(SD_BASE + SD_COMMAND, SD_CMD_TX_DATA_ONLY);  	
  if ((Status = SdWaitCmd()) != STATUS_SUCCESS)
    return Status;
  CrcSts = (CSRRead(SD_BASE + SD_STATUS) & SD_CRC16_STS) >> 3;
  if (CrcSts != GOOD_CRC16_STS)
  {
    return STATUS_DATA_ERROR;
  }

  if (Stop)
    return SdStopCmd();

  return STATUS_SUCCESS;
}

//--------------------------------------------------------------------
// Initialization sequence of SD/MMC
//--------------------------------------------------------------------
STATUS SdReadFlashInfo()
{
    STATUS Status;
    int RetryCount;
    
    for(RetryCount = 0; RetryCount < 5; RetryCount++)
    {
        Status = SdReset();
        if(Status != STATUS_SUCCESS)
            continue;
            
        Status = SdDetect();
        if(Status != STATUS_SUCCESS)
            continue;

        Status = SdGoIdentifyState();
        if(Status != STATUS_SUCCESS)
            continue;

        Status = SdGoStandbyState();
        if(Status != STATUS_SUCCESS)
            continue;

        Status = SdReadCSD();
        if(Status != STATUS_SUCCESS)
            continue;

        Status = SdGoTransferState();
        if(Status != STATUS_SUCCESS)
            continue;
        else
            return STATUS_SUCCESS;
    }
    return STATUS_FLASH_ERROR;
}

//----------------------------------------------------------------------------
// Description:
//   Handle the media change event
//----------------------------------------------------------------------------
void SdMediaChange()
{
  if (SdCardExist())
  {
    BYTE i = MAX_FLASH_RETRY_TIMES;
    
    SdCtrlReset();
    SdPowerOn();

    do 
    {
      SdMediaStatus = SdReadFlashInfo();
      i--;
    }while (i && (SdMediaStatus != STATUS_SUCCESS));
    if (SdMediaStatus == STATUS_SUCCESS)
      SdMediaStatus = STATUS_MEDIA_CHANGE;
  }
  else
  {
    SdStopClk();	
    SdPowerOff();
    SdAvailableBlocks = 0;
    SdMediaStatus = STATUS_NO_MEDIA;
  }
}

//----------------------------------------------------------------------------
// Description:
//   use to change STATUS when device "Start"
//----------------------------------------------------------------------------
void SdStart()
{
    if(SdCardExist())
        SdMediaStatus = STATUS_SUCCESS;
}

//----------------------------------------------------------------------------
// Description:
//   use to change STATUS when device "eject"
//----------------------------------------------------------------------------
void SdEject()
{
    SdMediaStatus = STATUS_NO_MEDIA;
}

//----------------------------------------------------------------------------
// Description:
//   Query the current device information
//   *NumScsiBlocks = 0 means that the device does not exist now
//----------------------------------------------------------------------------
STATUS SdQueryDevice()
{
  STATUS OrgStatus = SdMediaStatus;

//  DebugPrint("<SdQueryDevice> Status = %bu\r\n", SdMediaStatus);
  if (SdMediaStatus == STATUS_NO_MEDIA)
    return SdMediaStatus;

  if (SdMediaStatus == STATUS_MEDIA_CHANGE)
    SdMediaStatus = STATUS_SUCCESS;
  DeviceInfo.TotalBlocks = SdAvailableBlocks;
  DeviceInfo.BlockSize = BYTES_PER_SECTOR;
  if (CardType == CARD_SD)
    DeviceInfo.WriteProtect = SdWriteProtect();
  else
    DeviceInfo.WriteProtect = false;

  return OrgStatus;
}

//----------------------------------------------------------------------------
// Description:
//   The SD interrupt handler
//----------------------------------------------------------------------------
void SdIntHandler(BYTE Event)
{   Event=Event;
    SdGetFlashInfoTimer = GET_FLASH_INFO_DELAY;
}

//----------------------------------------------------------------------------
// Description:
//   Make the SD device into suspend mode
//----------------------------------------------------------------------------
void SdSuspend()
{
  SdStopClk();	
  SdPowerOff();
}

//----------------------------------------------------------------------------
// Description:
//   Make the CF device resume
//----------------------------------------------------------------------------
void SdResume()
{
  if (SdCardExist())
  {
    SdPowerOn();
    SdReadFlashInfo();
  }
}

//----------------------------------------------------------------------------
// Description:
//   Initiate the SD device
//----------------------------------------------------------------------------
void SdInit()
{
  if (SdCardExist())
  {
    SdMediaChange();
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区小说区区亚洲影院| 国产精品一区二区三区乱码| 欧美精品一区二区三区高清aⅴ | 99久久免费精品| 日本不卡的三区四区五区| 国产精品白丝在线| 精品国产一区二区三区不卡| 欧美这里有精品| 不卡一区二区在线| 国产精品中文字幕日韩精品| 日韩在线一二三区| 一区二区三区四区蜜桃| 日本一区二区三区国色天香 | 国产精品嫩草影院com| 这里只有精品99re| 91麻豆国产在线观看| 高清久久久久久| 激情伊人五月天久久综合| 五月激情综合网| 亚洲综合色噜噜狠狠| 一色屋精品亚洲香蕉网站| 精品国产乱码久久久久久老虎| 欧美日韩一本到| 在线观看日韩精品| 91美女精品福利| 91在线看国产| 成人福利视频在线看| 国产成人免费网站| 国产一区二区主播在线| 国产中文一区二区三区| 久久99久久99小草精品免视看| 免费国产亚洲视频| 日本vs亚洲vs韩国一区三区| 日本伊人精品一区二区三区观看方式| 性欧美大战久久久久久久久| 亚洲成人动漫av| 亚洲v中文字幕| 五月激情六月综合| 麻豆一区二区三| 精品一区二区三区久久久| 精油按摩中文字幕久久| 老汉av免费一区二区三区| 狠狠色丁香久久婷婷综合_中| 久久66热re国产| 国产精品综合视频| av在线播放不卡| 91免费版在线看| 欧美视频第二页| 欧美妇女性影城| 精品美女一区二区| 国产欧美一区在线| 综合色天天鬼久久鬼色| 亚洲一卡二卡三卡四卡| 日韩精品电影一区亚洲| 精品一区二区三区的国产在线播放| 国内精品伊人久久久久av影院| 国产成人免费在线观看不卡| youjizz久久| 欧美三级韩国三级日本一级| 欧美精品一二三四| 久久久国产精华| 亚洲日穴在线视频| 亚洲不卡在线观看| 国产麻豆一精品一av一免费| 成人短视频下载| 欧美日韩亚洲综合在线| 2021久久国产精品不只是精品| 国产精品欧美久久久久无广告| 伊人夜夜躁av伊人久久| 青青草国产精品亚洲专区无| 国产高清不卡一区二区| 色妞www精品视频| 日韩一级高清毛片| 国产精品久久久久久久第一福利| 一区二区三区在线观看视频| 久久国产婷婷国产香蕉| 91亚洲永久精品| 日韩欧美一卡二卡| 日韩美女视频一区二区| 青草av.久久免费一区| 国产不卡在线一区| 69久久99精品久久久久婷婷| 久久久久久久久99精品| 一区二区三区精品视频在线| 国内精品写真在线观看| 91在线看国产| 国产蜜臀97一区二区三区 | 久久精品国产亚洲5555| 国产不卡视频一区| 欧美中文字幕不卡| 国产亚洲欧洲一区高清在线观看| 亚洲色图.com| 激情伊人五月天久久综合| 欧美在线视频日韩| 日本一区二区三区四区| 美国精品在线观看| 欧洲视频一区二区| 国产精品国产三级国产有无不卡| 日韩国产精品久久久久久亚洲| 成人禁用看黄a在线| 日韩欧美一区二区久久婷婷| 亚洲资源中文字幕| 99国产精品国产精品久久| 久久蜜桃一区二区| 蜜臀a∨国产成人精品| 欧洲视频一区二区| 日韩一区在线看| 国产成人av资源| 日韩欧美中文一区| 午夜精品视频在线观看| 色噜噜偷拍精品综合在线| 国产精品免费aⅴ片在线观看| 国产美女久久久久| 日韩欧美国产精品一区| 午夜视频一区二区三区| 99精品国产一区二区三区不卡| 久久久久高清精品| 国产一区美女在线| 日韩精品自拍偷拍| 日韩不卡一区二区| 欧美二区三区91| 性欧美大战久久久久久久久| 欧美午夜一区二区三区| 亚洲综合在线五月| 色菇凉天天综合网| 一区二区三区国产豹纹内裤在线| av激情综合网| 亚洲欧美日韩小说| 色噜噜狠狠色综合欧洲selulu| 亚洲欧美福利一区二区| 99久久精品国产一区| 亚洲欧洲精品一区二区精品久久久| 成人自拍视频在线| 国产精品视频在线看| 国产成人av在线影院| 国产亚洲欧美日韩日本| 国产乱人伦精品一区二区在线观看 | 一区二区成人在线视频| 在线一区二区三区四区五区| 亚洲欧美视频在线观看| 欧美在线一区二区三区| 亚洲一卡二卡三卡四卡| 欧美精品乱码久久久久久 | 免费xxxx性欧美18vr| 欧美mv日韩mv亚洲| 国产精品一区二区久久精品爱涩| 久久久久久久综合色一本| 成人黄色软件下载| 一区二区欧美视频| 91精品免费在线观看| 国产伦理精品不卡| 国产精品电影院| 精品视频资源站| 久久99精品国产麻豆婷婷 | 国产精品久久久久久久久快鸭| 99国产精品久久久久久久久久| 亚洲激情欧美激情| 制服丝袜亚洲色图| 精品亚洲成a人| 国产精品传媒入口麻豆| 欧美日韩在线综合| 国内精品久久久久影院薰衣草| 欧美激情一区二区三区全黄 | 欧美va亚洲va国产综合| 丁香另类激情小说| 一区二区三区日韩精品视频| 日韩视频在线观看一区二区| 成人一级视频在线观看| 亚洲伊人色欲综合网| 精品国产乱码久久久久久久久| 成人av网址在线| 亚洲成a人v欧美综合天堂下载| 精品国产不卡一区二区三区| av一区二区三区黑人| 日韩福利电影在线| 国产精品国产三级国产aⅴ无密码| 欧美色欧美亚洲另类二区| 久久99国产精品久久99| 亚洲最新在线观看| 久久久久久**毛片大全| 欧美三级电影网| 成人av资源站| 精品制服美女丁香| 亚洲一区在线观看免费观看电影高清| 26uuu国产在线精品一区二区| 91视频国产观看| 国产九九视频一区二区三区| 亚洲午夜久久久久久久久电影网| 国产色一区二区| 欧美一区二区精品| 欧美在线观看一区二区| 国产精品一二三四| 日韩精品三区四区| 亚洲欧美日韩久久| 国产欧美视频一区二区| 欧美一区二区久久久| 在线观看日韩国产| eeuss鲁片一区二区三区在线观看| 激情综合网最新| 日本美女一区二区|