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

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

?? sddriver.c

?? 這是基于SPI接口的SD驅動接口程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
			SD_StopTransmission();								/* 停止數據傳輸 stop data transmission */	
			SD_WaitBusy(SD_WAIT_WRITE);							/* 等待 waiting */
			return ret;
		}
	}
   
    SD_StopMultiToken();										/* 發送數據停止令牌 send data stop token */
      
    ret = SD_WaitBusy(SD_WAIT_WRITE);							/* 等待寫入的完成 wait for finishing writing */
    if (ret != SD_NO_ERR)
    	return SD_ERR_TIMEOUT_WRITE;
    
   	ret = SD_GetNumWRBlcoks(&i);								/* 讀正確寫入的塊數 read the blocks that be written correctly */
   	if (ret != SD_NO_ERR)
   	  	return ret;
   	  	
   	if(i != blocknum) 
   	 	return SD_ERR_WRITE_BLKNUMS;							/* 正確寫入塊數錯誤 the blocks that be written correctly is error */
   	   	     
	return SD_NO_ERR;											/* 返回寫入成功 return write sucessfully */			
}
#endif

/*********************************************************************************************************************
** 函數名稱: INT8U SD_EraseBlock()					Name:	  INT8U SD_EraseBlock()
** 功能描述: 擦除SD卡中的塊							Function: Erase the block of sd card
** 輸   入: INT32U startaddr: 起始地址				Input:    INT32U startaddr: start address
			 INT32U endaddr  : 終止地址						  INT32U endaddr  : end address
** 輸   出: 0:   正確    >0:   錯誤碼		  		Output:	  0:  right		>0:  error code
** 注    意: startaddr 和 blocknum 建議為sds.erase_uint的整數倍, 因為有的卡只能以sds.erase_uint為單位進行擦除
*********************************************************************************************************************/
#if SD_EraseBlock_EN
INT8U SD_EraseBlock(INT32U startaddr, INT32U blocknum)
{
	INT32 tmp;
	INT8U ret;
	
	if ((startaddr + blocknum) > sds.block_num)	
		return SD_ERR_OVER_CARDRANGE;							/* 操作超出卡容量范圍 operate over the card range */
		
	if (SD_ChkCardWP() == 1)
		return SD_ERR_WRITE_PROTECT;							/* 卡有寫保護 */
		
	tmp = blocknum - sds.erase_unit;	
	while(tmp >= 0)												/* 每次擦除扇區大小 once erase is sector size */
	{	
		ret = SD_EraseStartBlock(startaddr);					/* 選擇起始塊地址 select start address */
		if (ret != SD_NO_ERR)
			return ret;
		
		ret = SD_EraseEndBlock(startaddr + sds.erase_unit - 1);	/* 選擇終止塊地址 select end address */
		if (ret != SD_NO_ERR)
			return ret;
			
		ret = SD_EraseSelectedBlock();							/* 擦除所選的塊 erase blocks selected */
		if (ret != SD_NO_ERR)
			return ret;

		startaddr += sds.erase_unit;							/* 起始地址遞增 */
		blocknum  -= sds.erase_unit;
		tmp = blocknum - sds.erase_unit;
	};		
	
	if (blocknum > 0)											/* 擦除不夠擦除扇區大小的塊 */
	{															/* erase blocks that numbers is not enough a sector */
		ret = SD_EraseStartBlock(startaddr);
		if (ret != SD_NO_ERR)
			return ret;
		
		ret = SD_EraseEndBlock(startaddr + blocknum - 1);
		if (ret != SD_NO_ERR)
			return ret;
			
		ret = SD_EraseSelectedBlock();
		if (ret != SD_NO_ERR)
			return ret;
	}

	return SD_NO_ERR;											/* 返回擦除成功 return erase sucessfully */
}
#endif


/*******************************************************************************************************************
** 函數名稱: INT8U SD_GetCardInfo()				Name:	  INT8U SD_GetCardInfo()
** 功能描述: 獲得SD卡的信息						Function: get the information of SD card
** 輸   入: INT8U cardtype: 卡類型				Input:    INT8U cardtype: card type	
** 輸   出: 0:   正確    >0:   錯誤碼		  	Output:	  0:  right		>0:  error code
*******************************************************************************************************************/
INT8U SD_GetCardInfo()
{
	INT32U tmp;
	INT8U csdbuf[16],ret;
		
	ret = SD_ReadCSD(16,csdbuf);	 								    		/* 讀CSD寄存器    read CSD register */
	if (ret != SD_NO_ERR)	
		return ret;	
		
	SD_CalTimeout(csdbuf);														/* 計算超時時間值 calculate timeout value */
		
	/* 計算塊的最大長度  */														/* calculate the size of a sector */
	sds.block_len = 1 << (csdbuf[READ_BL_LEN_POS] & READ_BL_LEN_MSK);  			/* (2 ^ READ_BL_LEN) */
	
	/* 計算卡中塊的個數 */														/* 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) */
    	
    /* 獲得卡中塊的數量 */														/* get the block numbers in card */
	sds.block_num = sds.block_num * (1 << tmp);									/* (C_SIZE + 1) * 2 ^ (C_SIZE_MULT + 2) */
																			
	/* 計算扇區大小 */															/*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;															/* 返回執行成功 return perform sucessfully */
}

/*******************************************************************************************************************
** 函數名稱: INT8U SD_CalTimeout()				Name:	  INT8U SD_CalTimeout()
** 功能描述: 計算讀/寫/擦超時時間				Function: get the information of SD card
** 輸   入: INT8U cardtype: 卡類型				Input:    INT8U cardtype: card type	
			 INT8U *csdbuf : CSD寄存器內容		 	      INT8U *csdbuf : CSD register content
** 輸   出: 0:   正確    >0:   錯誤碼		  	Output:	  0:  right		>0:  error code
*******************************************************************************************************************/
void SD_CalTimeout(INT8U *csdbuf)
{
	INT32U tmp;
	INT8U time_u,time_v,fator;
	
	sds.timeout_read = READ_TIMEOUT_100MS;								/* 默認讀超時為100ms */
	sds.timeout_write = WRITE_TIMEOUT_250MS;							/* 默認寫超時為250ms */
	sds.timeout_erase = WRITE_TIMEOUT_250MS;
		
	time_u = (csdbuf[TAAC_POS] & TAAC_MSK);								/* 讀超時時間單位 read timeout unit */
	time_v = (csdbuf[TAAC_POS] & NSAC_MSK) >> 3;						/* 讀超時時間值   read timeout value */
	fator = (csdbuf[R2WFACTOR_POS] & R2WFACTOR_MSK) >> 2;				/* 寫超時時間因數 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) */
	
	/* 計算得到的超時值 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;						/* 實際值為計算值的100倍 */
	sds.timeout_write = sds.timeout_write * 100 / 8;
	
	if (sds.timeout_read > READ_TIMEOUT_100MS)							/* 取計算值與默認值中的最小值 */
		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;
}

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

 	do 
    {													/* 發出CMD1, 查詢卡的狀態, 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));
														/* 如果響應R1的最低位Idle位為1,則繼續循環 */
														
    if (i >= SD_IDLE_WAIT_MAX)
        return SD_ERR_TIMEOUT_WAITIDLE;					/* 超時,返回錯誤 time out,return error */

	return SD_NO_ERR;
}

/*******************************************************************************************************************
** 函數名稱: INT16U SD_GetZLGSDVer()			Name:	  INT16U SD_GetZLGSDVer()
** 功能描述: 得到ZLG/SD的版本號					Function: get the version of ZLG/SD
** 輸   入: 無									Input:    NULL
** 輸   出: 版本號								Output:	  Version
*******************************************************************************************************************/
INT16U SD_GetZLGSDVer(void)
{
	return 0x0100;						/* 版本號為 1.00 */
}










?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网页版在线| 久久97超碰国产精品超碰| 国产欧美一区二区精品婷婷| 欧美一级欧美三级| 欧美在线观看视频在线| 在线精品视频免费观看| 欧洲视频一区二区| 欧美嫩在线观看| 精品美女一区二区| 国产午夜精品福利| 亚洲欧洲成人精品av97| 亚洲激情欧美激情| 亚洲成人免费av| 免费成人结看片| 懂色av一区二区在线播放| 91免费在线视频观看| 欧美亚洲高清一区二区三区不卡| 欧美日韩高清一区| 精品动漫一区二区三区在线观看| 国产偷国产偷精品高清尤物| 中文字幕在线不卡视频| 亚洲国产日韩精品| 久久国产婷婷国产香蕉| 国产精品一区二区不卡| 91福利视频在线| 日韩一级片在线播放| 亚洲国产精品激情在线观看| 亚洲男人的天堂网| 免费欧美日韩国产三级电影| 国产一区二区三区免费在线观看| 成人福利在线看| 欧美精品色一区二区三区| 久久精品视频免费| 一级特黄大欧美久久久| 精品一区二区三区免费毛片爱 | 久久亚洲综合色| 国产精品久久久久久久久免费樱桃 | 欧美在线一二三| 日韩精品影音先锋| 中文字幕日韩av资源站| 日本午夜精品视频在线观看| 成人免费毛片app| 欧美一级二级三级蜜桃| 国产精品黄色在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 99久久国产综合精品女不卡| 日韩欧美你懂的| 亚洲一区在线看| 国产精品主播直播| 欧美巨大另类极品videosbest| 日本一区二区三区久久久久久久久不| 亚洲一二三区在线观看| 成人免费看黄yyy456| 日韩美女视频在线| 午夜一区二区三区视频| 91麻豆免费看片| 国产清纯在线一区二区www| 青草国产精品久久久久久| 色老头久久综合| 国产精品色哟哟网站| 国产一区二区三区免费观看| 欧美一区二区视频网站| 亚洲成人av中文| 色综合天天天天做夜夜夜夜做| 精品成a人在线观看| 六月丁香婷婷色狠狠久久| 在线播放日韩导航| 亚洲国产乱码最新视频| 91麻豆文化传媒在线观看| 中文字幕一区二区三区在线观看| 国产馆精品极品| 久久精品人人爽人人爽| 国产精品性做久久久久久| 久久免费看少妇高潮| 激情小说欧美图片| 久久一区二区三区四区| 国产精品中文有码| 欧美激情自拍偷拍| 成人午夜视频福利| 国产精品九色蝌蚪自拍| 色香蕉成人二区免费| 亚洲另类春色国产| 欧美日韩一区 二区 三区 久久精品 | 久久精品999| 国产丝袜美腿一区二区三区| 国产91在线观看丝袜| 国产精品麻豆久久久| a4yy欧美一区二区三区| 一区二区三区在线看| 欧美日韩精品高清| 美女精品一区二区| 精品国产91亚洲一区二区三区婷婷| 国产在线一区二区综合免费视频| 国产女人18毛片水真多成人如厕 | 天堂资源在线中文精品| 日韩色视频在线观看| 国产精品亚洲午夜一区二区三区| 中文字幕国产一区| 欧美少妇一区二区| 久久99热这里只有精品| 欧美激情一区二区三区不卡| 色吧成人激情小说| 美女网站色91| 国产精品剧情在线亚洲| 欧美色综合久久| 狠狠狠色丁香婷婷综合激情| 国产精品传媒入口麻豆| 欧美男人的天堂一二区| 国产一区久久久| 亚洲精品视频一区二区| 精品国产麻豆免费人成网站| av激情综合网| 免费成人性网站| 亚洲三级在线免费观看| 日韩小视频在线观看专区| 成人av资源网站| 久久国产欧美日韩精品| 亚洲激情第一区| 国产日韩在线不卡| 欧美乱妇一区二区三区不卡视频| 粉嫩aⅴ一区二区三区四区| 免费的国产精品| 一区二区三区丝袜| 国产午夜三级一区二区三| 欧美一区二区三区四区高清| 91在线云播放| 成人福利电影精品一区二区在线观看| 三级影片在线观看欧美日韩一区二区| 亚洲国产成人在线| 亚洲精品一区二区三区蜜桃下载| 91精彩视频在线观看| 高清av一区二区| 韩国av一区二区三区在线观看| 一区二区三区视频在线看| 成人免费小视频| 国产性做久久久久久| 精品国产制服丝袜高跟| 欧美乱妇20p| 欧美色老头old∨ideo| 色哟哟日韩精品| 91亚洲精品久久久蜜桃网站| 风间由美一区二区三区在线观看| 奇米影视7777精品一区二区| 天天影视网天天综合色在线播放| 一区二区高清免费观看影视大全| 亚洲三级小视频| 国产精品久久二区二区| **网站欧美大片在线观看| 欧美激情在线看| 国产精品私人影院| 国产精品亲子伦对白| 欧美国产精品一区二区三区| 2017欧美狠狠色| 久久久久高清精品| 欧美激情一区二区三区不卡| 国产精品天干天干在观线| 国产精品青草综合久久久久99| 国产精品福利影院| 1024精品合集| 亚洲综合色成人| 婷婷开心激情综合| 蜜臀av性久久久久蜜臀aⅴ| 蜜臀av性久久久久av蜜臀妖精| 久久99日本精品| 高清不卡一区二区| 91国内精品野花午夜精品| 欧美色图在线观看| 欧美一区二区观看视频| 久久综合九色欧美综合狠狠| 日本一区二区三区四区| 1024国产精品| 日韩精品欧美成人高清一区二区| 六月婷婷色综合| 99久久久国产精品免费蜜臀| 在线视频中文字幕一区二区| 欧美精品vⅰdeose4hd| 精品国产在天天线2019| 亚洲欧洲日韩女同| 午夜久久久影院| 久久精品国产久精国产| 丁香婷婷深情五月亚洲| 91麻豆高清视频| 日韩精品中文字幕一区二区三区| 久久久久久99精品| 亚洲亚洲精品在线观看| 韩国三级电影一区二区| 色欲综合视频天天天| 欧美成人性福生活免费看| 国产精品国产三级国产普通话99 | 免费成人在线观看视频| 成人福利电影精品一区二区在线观看| 欧美日韩亚洲国产综合| 欧美成人猛片aaaaaaa| 最新不卡av在线| 美日韩黄色大片| 在线观看av不卡| 中文字幕av不卡| 韩日av一区二区| 在线不卡一区二区| 亚洲香肠在线观看|