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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sddriver.c

?? SD卡詳細(xì)使用說明資料
?? C
字號(hào):
/*******************************************************************************************************
** Descriptions:		sd 卡驅(qū)動(dòng)軟件包: SD卡物理層 用戶API函數(shù)
********************************************************************************************************/
#include    "define.h"


/* SD卡信息結(jié)構(gòu)體變量 the information structure variable of SD Card */
sd_struct sds;			

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

/* 超時(shí)時(shí)間表 timeout value table */							 
const uint8 time_value[16] = { 0,10,12,13,15,20,25,30,
                              35,40,45,50,55,60,70,80};
 
/* 超時(shí)時(shí)間因數(shù)表 timeout factor table */                              
const uint8 r2w_fator[6] = {1,2,4,8,16,32};                           
    
/********************************************************************************************
		
用戶API函數(shù):  初始化,讀,寫,擦 SD卡  User API Function: Initialize,read,write,erase SD Card 
				
********************************************************************************************/

				
/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_Initialize()				Name:	  INT8U SD_Initialize()
** 功能描述: 初始化SD卡							Function: initialize sd card
** 輸   入: 無									Input:	  NULL
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  	Output:	  0:  right		>0:  error code
********************************************************************************************************************/
uint8 SD_Initialize(void)
{
	uint8 recbuf[4],ret;
    
    SD_HardWareInit();					    		/* 初始化讀寫SD卡的硬件條件 Initialize the hardware that access SD Card */

    SPI_CS_Assert();								/* 1. 置CS為低 assert CS */  
	SD_SPIDelay(30);								/* 2. 至少延時(shí) 74 clock delay more than 74 clock */
    SPI_CS_Deassert();								/* 3. 置CS為高 dessert CS */
    SD_SPIDelay(3);									/* 4. 延時(shí)2(8 clock) delay 2(8 clock) */
    
    ret = SD_ResetSD();								/* 5. 發(fā)出CMDO命令復(fù)位SD卡 send CMD0 command to reset sd card */
    if (ret != SD_NO_ERR)
        return ret;									
 	
 	ret = SD_ActiveInit();							/* 6. 激活卡進(jìn)入初始化過程. active card initialize process */
 	if (ret != SD_NO_ERR)
 		return ret;
        
   	ret = SD_ReadOCR(4, recbuf);  					/* 7. 讀OCR寄存器,查詢卡支持的電壓值 read OCR register,get the supported voltage */
    if (ret != SD_NO_ERR)
        return ret;
    
    if ((recbuf[1] & MSK_OCR_33) != MSK_OCR_33)
        return SD_ERR_VOL_NOTSUSP;					/* 不支持3.3V,返回錯(cuò)誤碼  not support 3.3V,return error code */
    
    SPI_ClkToMax();									/* 8. 設(shè)置SPI時(shí)鐘到最大值 set SPI clock to maximum */
        
#if SD_CRC_EN        
    ret = SD_EnableCRC(1);							/* 使能CRC校驗(yàn) enable CRC check */
	if (ret != SD_NO_ERR)  
	  	return ret;
#endif

    ret = SD_SetBlockLen(SD_BLOCKSIZE);				/* 9. 設(shè)置塊的長(zhǎng)度: 512Bytes Set the block length: 512Bytes */
    if (ret != SD_NO_ERR)  
        return ret;
        
	return (SD_GetCardInfo());						/* 10. 讀CSD寄存器,獲取SD卡信息 read CSD register, get the information of SD card */
}

/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_GetCardInfo()				Name:	  INT8U SD_GetCardInfo()
** 功能描述: 獲得SD卡的信息						Function: get the information of SD card
** 輸   入: INT8U cardtype: 卡類型				Input:    INT8U cardtype: card type	
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  	Output:	  0:  right		>0:  error code
*******************************************************************************************************************/
uint8 SD_GetCardInfo()
{
	uint32 tmp;
	uint8 csdbuf[16],ret;
		
	ret = SD_ReadCSD(16,csdbuf);	 								    		/* 讀CSD寄存器    read CSD register */
	if (ret != SD_NO_ERR)	
		return ret;	
		
	SD_CalTimeout(csdbuf);														/* 計(jì)算超時(shí)時(shí)間值 calculate timeout value */
		
	/* 計(jì)算塊的最大長(zhǎng)度  */														/* calculate the size of a sector */
	sds.block_len = 1 << (csdbuf[READ_BL_LEN_POS] & READ_BL_LEN_MSK);  			/* (2 ^ READ_BL_LEN) */
	
	/* 計(jì)算卡中塊的個(gè)數(shù) */														/* calculate the sector numbers of the SD Card */
	sds.block_num = ((csdbuf[C_SIZE_POS1] & C_SIZE_MSK1) << 10) +
	      			 (csdbuf[C_SIZE_POS2] << 2) +
	 	 			((csdbuf[C_SIZE_POS3] & C_SIZE_MSK3) >> 6) + 1;				/* (C_SIZE + 1)*/
		 	  															
	tmp = ((csdbuf[C_SIZE_MULT_POS1] & C_SIZE_MULT_MSK1) << 1) +   
	      ((csdbuf[C_SIZE_MULT_POS2] & C_SIZE_MULT_MSK2) >> 7) + 2;				/* (C_SIZE_MULT + 2) */
    	
    /* 獲得卡中塊的數(shù)量 */														/* get the block numbers in card */
	sds.block_num = sds.block_num * (1 << tmp);									/* (C_SIZE + 1) * 2 ^ (C_SIZE_MULT + 2) */
																			
	/* 計(jì)算扇區(qū)大小 */															/*calculate the size of sector */
	sds.erase_unit = ((csdbuf[SECTOR_SIZE_POS1] & SECTOR_SIZE_MSK1) << 1) +  			
	                 ((csdbuf[SECTOR_SIZE_POS2] & SECTOR_SIZE_MSK2) >> 7) + 1; /* SD (SECTOR_SIZE + 1) */
	    			
	return SD_NO_ERR;															/* 返回執(zhí)行成功 return perform sucessfully */
}


/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_CalTimeout()				Name:	  INT8U SD_CalTimeout()
** 功能描述: 計(jì)算讀/寫/擦超時(shí)時(shí)間				Function: get the information of SD card
** 輸   入: INT8U cardtype: 卡類型				Input:    INT8U cardtype: card type	
			 INT8U *csdbuf : CSD寄存器內(nèi)容		 	      INT8U *csdbuf : CSD register content
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  	Output:	  0:  right		>0:  error code
*******************************************************************************************************************/
void SD_CalTimeout(uint8 *csdbuf)
{
	uint32 tmp;
	uint8 time_u,time_v,fator;
	
	sds.timeout_read = READ_TIMEOUT_100MS;								/* 默認(rèn)讀超時(shí)為100ms */
	sds.timeout_write = WRITE_TIMEOUT_250MS;							/* 默認(rèn)寫超時(shí)為250ms */
	sds.timeout_erase = WRITE_TIMEOUT_250MS;
		
	time_u = (csdbuf[TAAC_POS] & TAAC_MSK);								/* 讀超時(shí)時(shí)間單位 read timeout unit */
	time_v = (csdbuf[TAAC_POS] & NSAC_MSK) >> 3;						/* 讀超時(shí)時(shí)間值   read timeout value */
	fator = (csdbuf[R2WFACTOR_POS] & R2WFACTOR_MSK) >> 2;				/* 寫超時(shí)時(shí)間因數(shù) write timeout factor */
	
	if(time_v == 0)	return;
	if(fator >= 6) return;
	
	tmp = SPI_CLOCK * time_value[time_v] / 10 / time_unit[time_u];		/* TACC * f (單位 unit: clock) */
	tmp = tmp + csdbuf[NSAC_POS] * 100;									/* TACC * f + NSAC * 100 (單位 unit: clock) */
	
	/* 計(jì)算得到的超時(shí)值 the timeout value of being calculated */
	sds.timeout_read = tmp;
	sds.timeout_write = tmp * r2w_fator[fator];							/* (TACC * f + NSAC * 100) * R2WFACTOR (單位 unit:clock)*/
	
	sds.timeout_read  = sds.timeout_read * 100 / 8;						/* 實(shí)際值為計(jì)算值的100倍 */
	sds.timeout_write = sds.timeout_write * 100 / 8;
	
	if (sds.timeout_read > READ_TIMEOUT_100MS)							/* 取計(jì)算值與默認(rèn)值中的最小值 */
		sds.timeout_read = READ_TIMEOUT_100MS;
	
	if (sds.timeout_write > WRITE_TIMEOUT_250MS)
		sds.timeout_write = WRITE_TIMEOUT_250MS;

	sds.timeout_erase = sds.timeout_write;
}
/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_CalTimeout()				Name:	  INT8U SD_CalTimeout()
** 功能描述: 計(jì)算讀/寫/擦超時(shí)時(shí)間				Function: get the information of SD card
** 輸   入: INT8U *cardtype: 卡類型接收緩沖 	Input:    INT8U *cardtype: card type receive buff
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  	Output:	  0:  right		>0:  error code
** 函數(shù)說明: 該命令不斷重復(fù)發(fā)送到SD卡,直到響應(yīng)R1的Bit0(Idle)位為0,表示SD卡內(nèi)部初始化處理完成。
		     當(dāng)響應(yīng)的Idle位為0時(shí),SD卡就完全進(jìn)入SPI模式了。當(dāng)然重復(fù)發(fā)送命令CMD1是有次數(shù)限制的,
		     最大次數(shù)為宏定義SD_IDLE_WAIT_MAX.
*******************************************************************************************************************/
uint8 SD_ActiveInit(void)
{
	uint8 param[4] = {0,0,0,0},resp[5],ret;
	uint32 i = 0;

 	do 
    {													/* 發(fā)出CMD1, 查詢卡的狀態(tài), send CMD1 to poll card status */
        ret = SD_SendCmd(CMD1, param, CMD1_R, resp);
        if (ret != SD_NO_ERR)
       		return ret;
  
        i++;
    }
	while (((resp[0] & MSK_IDLE) == MSK_IDLE) && (i < SD_IDLE_WAIT_MAX));
														/* 如果響應(yīng)R1的最低位Idle位為1,則繼續(xù)循環(huán) */
														
    if (i >= SD_IDLE_WAIT_MAX)
        return SD_ERR_TIMEOUT_WAITIDLE;					/* 超時(shí),返回錯(cuò)誤 time out,return error */

	return SD_NO_ERR;
}










?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区国产豹纹内裤在线| 欧美天堂亚洲电影院在线播放| 欧美日韩一级二级三级| 亚洲欧美在线视频观看| 不卡av在线免费观看| 国产欧美一区二区精品久导航| 久久99精品视频| 久久九九国产精品| 成人午夜电影久久影院| 中文字幕在线播放不卡一区| www.欧美色图| 一区二区三区四区在线| 欧美日韩国产在线观看| 青青草91视频| 精品国产一区二区三区四区四| 精品无人区卡一卡二卡三乱码免费卡| 日韩亚洲欧美成人一区| 国产福利精品导航| 国产精品三级电影| 91久久精品一区二区三| 亚洲成人黄色小说| 日韩欧美在线一区二区三区| 精品在线一区二区三区| 中文在线一区二区| 91久久国产最好的精华液| 视频一区欧美日韩| 国产日韩成人精品| 欧美无砖专区一中文字| 国产一区二区视频在线播放| 亚洲女与黑人做爰| 日韩一区二区三区视频在线观看| 国产精品影视在线| 亚洲自拍偷拍麻豆| 秋霞午夜鲁丝一区二区老狼| 久久久不卡网国产精品二区| 日韩一区二区三区四区| 精品一区二区在线播放| 中文字幕一区二| 日韩一二在线观看| 国产成人av一区二区三区在线观看| 亚洲国产成人一区二区三区| 色综合久久久久网| 色欧美日韩亚洲| 久久国产尿小便嘘嘘尿| 色婷婷综合视频在线观看| 国产精品亚洲成人| 激情深爱一区二区| 性做久久久久久免费观看| 国产精品久久久久久久久免费丝袜 | 秋霞影院一区二区| 日韩三级在线免费观看| 国产精品亚洲第一| 国产白丝网站精品污在线入口| 中文字幕中文字幕一区二区| 欧美在线小视频| 国产大陆a不卡| 成人深夜在线观看| 成人av在线播放网站| 一本久久a久久免费精品不卡| 成人久久久精品乱码一区二区三区| 亚洲国产欧美在线| 亚洲一区二区三区爽爽爽爽爽| 日韩欧美国产综合| 色欧美乱欧美15图片| 亚洲一区二区三区爽爽爽爽爽| 精品国产免费人成在线观看| 激情另类小说区图片区视频区| 日韩黄色一级片| 婷婷丁香久久五月婷婷| 亚洲欧美激情插| 亚洲成a人片在线不卡一二三区| 亚洲人午夜精品天堂一二香蕉| 欧美日韩一区二区在线观看| 99久久免费视频.com| 国产精品亚洲午夜一区二区三区| 国产色产综合产在线视频| 99久久精品费精品国产一区二区| 亚洲一区在线观看视频| 久久国产综合精品| 亚洲成在人线在线播放| 日本乱人伦一区| 欧美最新大片在线看| 国产大陆亚洲精品国产| 国产福利一区在线观看| 国产很黄免费观看久久| 欧美丰满嫩嫩电影| 亚洲色图视频网站| 激情六月婷婷久久| 亚洲欧美二区三区| 久久久不卡影院| 亚洲人成7777| 日本不卡一区二区三区| 国产一区二区精品久久| 欧美三级中文字| 国产精品九色蝌蚪自拍| 国产精品久久久久影院老司| 日韩欧美三级在线| 欧美成人精品福利| 欧美一区2区视频在线观看| 色偷偷成人一区二区三区91| 欧美私模裸体表演在线观看| 色综合一个色综合| 欧美一级二级三级蜜桃| 亚洲天堂免费看| 国产在线国偷精品免费看| 色一情一伦一子一伦一区| 日韩欧美区一区二| 亚洲一二三四区| 成人avav影音| 久久综合丝袜日本网| 午夜国产精品一区| 91成人免费在线视频| 欧美极品aⅴ影院| 久草中文综合在线| 欧美日韩精品一区二区三区| 国产精品美女久久福利网站| 国产精品自在欧美一区| 日韩欧美一区二区视频| 中文字幕欧美区| 久久精品国产一区二区三区免费看| 另类小说一区二区三区| 青椒成人免费视频| 5月丁香婷婷综合| 亚洲婷婷综合色高清在线| 免费在线观看成人| 欧美一区二区三区成人| 亚洲高清免费观看| 91精品国产综合久久久久| 极品销魂美女一区二区三区| 日本一区中文字幕| 97久久精品人人做人人爽| 在线播放欧美女士性生活| 国产精品嫩草影院com| 激情综合网av| 日韩欧美一区二区不卡| 国产精品久久久久久久久免费樱桃 | 亚洲天堂网中文字| 色综合婷婷久久| 亚洲午夜日本在线观看| 欧美影视一区二区三区| 日韩精品色哟哟| 日韩欧美高清在线| 国产精品一区久久久久| 国产欧美精品一区二区三区四区| 国产高清精品久久久久| 亚洲精品欧美专区| 欧美一二三区精品| 国产老肥熟一区二区三区| 欧美激情在线一区二区| 91色乱码一区二区三区| 日韩高清电影一区| 久久久久久99精品| 欧美性受xxxx黑人xyx| 美国一区二区三区在线播放| 国产午夜亚洲精品理论片色戒 | 日韩激情在线观看| 久久精品一区八戒影视| 91麻豆成人久久精品二区三区| 亚洲mv在线观看| 欧美韩国日本不卡| 91精品国产综合久久久久久漫画 | 亚洲视频一二三区| av成人免费在线观看| 一区二区在线免费| 国产精品免费视频网站| 777xxx欧美| 色视频成人在线观看免| 国产精品99久| 久久电影网电视剧免费观看| 亚洲色图一区二区三区| 国产日韩欧美精品在线| 中文字幕一区免费在线观看| 日韩丝袜美女视频| 免费美女久久99| 中文字幕精品一区二区三区精品| 欧美日韩精品欧美日韩精品一综合| 国产成人精品免费| 激情图片小说一区| 麻豆91精品视频| 日韩—二三区免费观看av| 一区二区在线观看不卡| 国产精品女主播av| 国产日韩欧美精品一区| 欧美精品一区二| 精品国一区二区三区| 欧美成人a视频| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品二三区| 国产日本亚洲高清| 国产欧美精品一区| 亚洲欧美影音先锋| 一区二区三区在线影院| 一区二区三区四区高清精品免费观看 | 国产欧美精品区一区二区三区| 欧美精品一区二区高清在线观看 | 欧美一级在线免费| 日韩精品一区二区三区四区| 欧美大片在线观看一区二区| 欧美不卡一区二区三区| 久久在线观看免费|