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

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

?? sd_drive.c

?? Atmega64單片機程序(完整工程)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*--------------File Info-------------------------------------------------------
** 文   件   名:    SD_Driver.c
** 最后修改日期:    2008.3.28
** 版        本:    V1.0
** 描        述:    sd 卡驅動軟件包: 用戶API函數			
**------------------------------------------------------------------------------
** Created   by:    		
** Created date:			
*******************************************************************************/

#include "SYS_Config.h" 
#include "SD_Config.h" 
#include "SD_Hal.h" 
#include "SD_Cmd.h" 
#include "SD_Drive.h" 


extern INT8U Data_Buf[SD_BLOCKSIZE];//在main函數中定義


sd_struct sds ;/* SD卡信息結構體變量  */

/* 超時時間單位表(單位:0.000000001ns) timeout unit table */
const INT32U time_unit[8]=
{
    1000000000,100000000,10000000,
    1000000,100000,10000,1000,100 
};

/* 超時時間表 timeout value table */
const INT8U time_value[16]=
{
    0,10,12,13,15,20,25,30,35,40,45,50,55,60,70,80 
};

/* 超時時間因數表 timeout factor table */
const INT8U r2w_fator[6]=
{
    1,2,4,8,16,32 
};


/*       
********************************************************************************
用戶API函數:  初始化,讀,寫,擦 SD卡 
				
/******************************************************************************
** 函數名稱: INT8U SD_Initialize()				
** 功能描述: 初始化SD卡							
** 輸   入: 無									
** 輸   出: 0:   正確    >0:   錯誤碼		  	
*******************************************************************************/
INT8U SD_Initialize(void)
{
    INT8U recbuf[4],ret ;
    
    SD_HardWareInit();  //初始化讀寫SD卡的硬件條件 
       
    if(!SD_ChkCard())   // 檢查卡是否插入
        return SD_ERR_NO_CARD ;
    
    SPI_CS_Assert();         /* 1. 置CS為低 assert CS */
    
    SD_SPIDelay(100);        /* 2. 至少延時 74  */
   
    SPI_CS_Deassert();       /* 3. 置CS為高 dessert CS */
    
    SD_SPIDelay(20);         /* 4. 延時2(8 clock)  */
    
    ret=SD_ResetSD();        /* 5. 發出CMDO命令復位SD卡  */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    ret=SD_ActiveInit();     /* 6. 激活卡進入初始化過程.  */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    ret=SD_ReadOCR(4,recbuf);/* 7. 讀OCR寄存器,查詢卡支持的電壓值 */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    if((recbuf[1]&MSK_OCR_33)!=MSK_OCR_33)
	return SD_ERR_VOL_NOTSUSP ;/* 不支持3.3V,返回錯誤碼  */
  
    SPI_Clk_MAX();           /* 8. 設置SPI時鐘到最大值 */
    
    #if SD_CRC_EN  
        ret=SD_EnableCRC(1); /* 使能CRC校驗 enable CRC check */
        if(ret!=SD_NO_ERR)
            return ret ;
    #endif 
    
    ret=SD_SetBlockLen(SD_BLOCKSIZE);/* 9. 設置塊的長度: 512Bytes  */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    return(SD_GetCardInfo());        /* 10. 讀CSD寄存器,獲取SD卡信息  */
}

/*******************************************************************************
** 函數名稱: INT8U SD_ReadBlock()					
** 功能描述: 從SD卡中讀一個塊						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT8U *recbuf   : 接收緩沖區,長度512Bytes	 	
** 輸   出: 0:   正確    >0:   錯誤碼		  		
*******************************************************************************/
INT8U SD_ReadBlock(INT32U blockaddr,INT8U *recbuf)
{
    INT8U ret ;
    
    if(blockaddr>sds.block_num)
        return SD_ERR_OVER_CARDRANGE ;
    /* 操作超出卡容量范圍 operate over the card range */
    
    ret=SD_ReadSingleBlock(blockaddr);
    /* 讀單塊命令 read single blocks command */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    return(SD_ReadBlockData(SD_BLOCKSIZE,recbuf));
    /* 讀出數據 read data from sd card */
}


/*******************************************************************************
** 函數名稱: SD_Read_word		
** 功能描述: 塊偏移為offset 的長整形數據 						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT16U offset   : 塊內偏移				 
** 輸   出: INT32U     
             0xFFFF:   錯誤碼		  		
*******************************************************************************/
#if SD_Read_Word_EN 
INT16U SD_Read_Word(INT32U blockaddr,INT16U offset)
{
    INT8U  *buff;
    INT16U resp;
    
    buff=Data_Buf;
    
    if( SD_ReadBlock(blockaddr,buff)==0 )
    {
        resp=buff[offset+1];
	resp=(resp<<8)+buff[offset];
        return resp;
    }
    return 0xFFFF;
}
#endif

/*******************************************************************************
** 函數名稱: SD_Read_Dword		
** 功能描述: 塊偏移為offset 的長整形數據 						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT16U offset   : 塊內偏移				 
** 輸   出: INT32U     
             0xFFFFFFFF:   錯誤碼		  		
*******************************************************************************/
#if SD_Read_Dword_EN 
INT32U SD_Read_Dword(INT32U blockaddr,INT16U offset)
{
    INT8U  *buff;
    INT32U resp;
    
    buff=Data_Buf;
    
    if( SD_ReadBlock(blockaddr,buff)==0 )
    {
        resp=buff[offset+3];
	resp=(resp<<8)+buff[offset+2];
	resp=(resp<<8)+buff[offset+1];
	resp=(resp<<8)+buff[offset];
	return resp;
    }
    return 0xFFFFFFFF;
}
#endif


/*******************************************************************************
** 函數名稱: INT8U SD_ReadMultiBlock()				
** 功能描述: 從SD卡中讀多個塊						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT32U blocknum : 塊數量					
	     INT8U *recbuf   : 接收緩沖區,每塊512字節		 
** 輸   出: 0:   正確    >0:   錯誤碼		  		
*******************************************************************************/
#if SD_ReadMultiBlock_EN 
INT8U SD_ReadMultiBlock(INT32U blockaddr,INT32U blocknum,INT8U*recbuf)
{
    INT32U i ;
    INT8U ret ;
    
    if((blockaddr+blocknum)>sds.block_num)
        return SD_ERR_OVER_CARDRANGE ;
    /* 操作超出卡容量范圍 operate over the card range */
    
    ret=SD_ReadMultipleBlock(blockaddr);
    /* 讀多塊命令 read multiple blocks command */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    for(i=0;i<blocknum;i++)
    {
        /* 讀出數據 read data from sd card */
        ret=SD_ReadBlockData(SD_BLOCKSIZE,recbuf);
        if(ret==SD_NO_ERR)
            recbuf=recbuf+SD_BLOCKSIZE ;
        else 
            return ret ;
    }
    return(SD_StopTransmission());
    /* 結束數據傳輸 stop transmission operation */
}
#endif 

/*******************************************************************************
** 函數名稱: INT8U SD_WriteBlock()					
** 功能描述: 向SD卡中寫入一個塊						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT8U *sendbuf  : 發送緩沖區,長度512Bytes	  	
** 輸   出: 0:   正確    >0:   錯誤碼		  		
*******************************************************************************/
INT8U SD_WriteBlock(INT32U blockaddr,INT8U *sendbuf)
{
    INT8U ret,tmp[2];
    
    if(blockaddr>sds.block_num)
        return SD_ERR_OVER_CARDRANGE ;
    /* 操作超出卡容量范圍 operate over the card range */
    
    if(SD_ChkCardWP()==1)
        return SD_ERR_WRITE_PROTECT ;
    /* 卡有寫保護 */
    
    ret=SD_WriteSingleBlock(blockaddr);
    /* 寫單塊命令 write single block */
    if(ret!=SD_NO_ERR)
        return ret ;
    
    ret=SD_WriteBlockData(0,SD_BLOCKSIZE,sendbuf);
    /* 寫入數據 write data */
    /* 讀Card Status寄存器, 檢查寫入是否成功 */
    if(ret==SD_NO_ERR)
    {
        /* read Card Status register to check write wheather sucessfully */
        ret=SD_ReadCard_Status(2,tmp);
        if(ret!=SD_NO_ERR)
            return ret ;
        /* 讀寄存器失敗 read register fail */
        
        if((tmp[0]!=0)||(tmp[1]!=0))
        ret=SD_ERR_WRITE_BLK ;
        /* 響應指示寫失敗 response indicate write fail */
    }
    return ret ;/* 返回寫入結果 return the result of writing */
}

/*******************************************************************************
** 函數名稱: INT8U SD_WriteMultiBlock()				
** 功能描述: 向SD卡中寫入多個塊						
** 輸   入: INT32U blockaddr: 塊地址				
	     INT32U blocknum : 塊數量					
	     INT8U *sendbuf  : 發送緩沖區每塊512字節    	
** 輸   出: 0:   正確    >0:   錯誤碼		  		
*******************************************************************************/
#if SD_WriteMultiBlock_EN 
INT8U SD_WriteMultiBlock(INT32U blockaddr,INT32U blocknum,INT8U *sendbuf)
{
    INT32U i ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲婷婷免费| 91精品国产综合久久久久久| 国产女人18水真多18精品一级做| 老司机午夜精品| 久久综合一区二区| 国产精品一二三四五| 久久久久久毛片| 99久精品国产| 亚洲国产精品一区二区www在线| 欧美日韩精品综合在线| 奇米精品一区二区三区四区| 欧美精品一区二区在线观看| 国产成人免费在线观看不卡| 成人免费在线视频| 欧美美女直播网站| 精品一区二区日韩| 亚洲视频综合在线| 欧美一区二区私人影院日本| 国产乱人伦偷精品视频免下载 | 欧美日韩大陆一区二区| 日本伊人精品一区二区三区观看方式| 亚洲精品一区二区三区在线观看| 国产成人啪免费观看软件| 亚洲裸体xxx| 日韩精品最新网址| 97se亚洲国产综合自在线观| 蜜臀精品久久久久久蜜臀| 国产日韩欧美一区二区三区乱码 | 日本v片在线高清不卡在线观看| 久久综合色之久久综合| 91麻豆精品秘密| 精品午夜一区二区三区在线观看| 18欧美亚洲精品| 精品粉嫩超白一线天av| 91电影在线观看| 国产精品资源站在线| 亚洲国产婷婷综合在线精品| 国产亚洲自拍一区| 欧美日韩精品二区第二页| 成人性视频网站| 日本人妖一区二区| 亚洲伦在线观看| 国产区在线观看成人精品| 欧美美女网站色| 97se亚洲国产综合自在线不卡| 精品一区二区三区视频在线观看 | 国产精品乱人伦| 欧美一区二区女人| 欧美亚洲国产一区二区三区va| 国产精品一区二区在线看| 偷拍一区二区三区四区| 自拍偷拍亚洲综合| 国产日韩精品久久久| 日韩欧美一区二区视频| 色婷婷久久一区二区三区麻豆| 国产成人精品影视| 美女网站视频久久| 日韩精品午夜视频| 亚洲一二三四区不卡| 亚洲乱码国产乱码精品精小说 | 亚洲精品日韩一| 日本一区二区成人| 久久伊99综合婷婷久久伊| 91精品国产色综合久久不卡电影| 欧美最猛黑人xxxxx猛交| www.欧美日韩| 国产精品1区2区3区在线观看| 欧美性猛片xxxx免费看久爱| 欧美私模裸体表演在线观看| 国产99久久精品| 国产不卡一区视频| 麻豆国产精品视频| 久久久久久电影| 欧美猛男男办公室激情| 免费美女久久99| 一区二区在线看| 日韩一区二区三区四区五区六区| 日产国产高清一区二区三区| 久久久久99精品一区| 日本丶国产丶欧美色综合| 免费人成在线不卡| 亚洲精品中文在线影院| 国产精品毛片久久久久久| 欧美sm美女调教| 欧美国产精品v| 亚洲成人中文在线| 久久 天天综合| 天天操天天色综合| 午夜精品久久久久久久| 国产精品美女www爽爽爽| 日韩精品一区二区三区视频| 欧美精品三级在线观看| 在线中文字幕一区| 欧美视频在线一区| 午夜精品免费在线| 精品一区二区三区免费| 日本亚洲电影天堂| 夜夜嗨av一区二区三区中文字幕| 亚洲欧洲精品一区二区精品久久久| 88在线观看91蜜桃国自产| 欧美日本韩国一区| 日韩一区二区免费高清| 欧美成人video| 久久伊99综合婷婷久久伊| 国产亚洲一二三区| 亚洲精品v日韩精品| 一区二区高清免费观看影视大全 | 精一区二区三区| 视频一区视频二区中文| 激情六月婷婷久久| 国产成人无遮挡在线视频| 91社区在线播放| 一本色道综合亚洲| 精品视频在线看| 精品国产百合女同互慰| 国产精品美女久久久久久久久| 国产精品激情偷乱一区二区∴| 亚洲综合另类小说| 91蝌蚪porny九色| 蜜桃一区二区三区四区| 国产福利91精品| 成人手机电影网| 欧美视频中文一区二区三区在线观看| 欧美精品乱码久久久久久| 欧美一区三区二区| 久久精品在这里| 无码av中文一区二区三区桃花岛| 午夜亚洲福利老司机| 国内久久精品视频| 在线免费观看日韩欧美| 日韩精品一区二区三区中文不卡| 26uuuu精品一区二区| 夜夜嗨av一区二区三区四季av| 轻轻草成人在线| 欧洲生活片亚洲生活在线观看| 日韩欧美一区在线| 午夜视频一区二区三区| 91麻豆精品一区二区三区| 精品日本一线二线三线不卡| 亚洲资源在线观看| 色狠狠综合天天综合综合| 国产日韩精品视频一区| 香蕉成人伊视频在线观看| 欧美怡红院视频| 精品国产乱码久久久久久牛牛 | 视频在线观看一区| 91精品国产综合久久小美女| 国产麻豆精品视频| 亚洲日本青草视频在线怡红院| 国产丝袜美腿一区二区三区| 午夜精品在线看| 色猫猫国产区一区二在线视频| 国产亚洲欧美中文| 麻豆精品久久精品色综合| 欧美欧美午夜aⅴ在线观看| 中文字幕人成不卡一区| 国产成人亚洲精品青草天美| 欧美第一区第二区| 蜜芽一区二区三区| 欧美高清视频不卡网| 一区二区三区在线视频播放 | 国产一区二区三区免费看| 日韩视频一区二区在线观看| 日韩在线a电影| 欧美猛男超大videosgay| 亚洲国产一区二区在线播放| 色狠狠色噜噜噜综合网| 悠悠色在线精品| 97久久久精品综合88久久| 国产精品久久久久天堂| 成人国产精品免费观看动漫| 亚洲国产高清在线| 不卡一区中文字幕| 国产精品嫩草影院com| 不卡大黄网站免费看| 综合av第一页| 欧美影视一区在线| 亚洲国产日产av| 在线观看91精品国产麻豆| 日韩国产精品久久久| 日韩精品一区二| 国产很黄免费观看久久| 欧美经典一区二区| 99精品视频一区二区三区| 一区二区三区在线影院| 欧美色倩网站大全免费| 日韩av网站免费在线| 亚洲精品在线免费观看视频| 成人一区二区三区中文字幕| 亚洲日本一区二区三区| 欧美老女人第四色| 韩国女主播一区二区三区| 国产精品系列在线| 色播五月激情综合网| 免费欧美日韩国产三级电影| 国产三级精品三级在线专区| 色先锋aa成人| 免费成人小视频| 国产精品久久夜| 91麻豆精品国产91久久久|