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

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

?? sdcmd.c

?? 讀寫SD卡的驅(qū)動(dòng)程序,里面有使用說(shuō)明,大家自己看
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
    if (resp != 0)
    	return SD_ERR_CMD_RESP;    	
 											
   	ret = SD_SendCmd(ACMD22, tmp, ACMD22_R, &resp);  			/* 讀取正確寫入的塊數(shù)命令 */
   	if (ret != SD_NO_ERR)										/* command that read the numbers of block written correctly */
   		return ret;											    
   		 														
	if (resp != 0)
    	return SD_ERR_CMD_RESP;									/* 響應(yīng)錯(cuò)誤 response is error */
    		
    ret = SD_ReadBlockData(4, tmp);								/* 讀塊數(shù) read the numbvers of block */
    if (ret != SD_NO_ERR)
    	return ret;
    	
    *blocknum = (tmp[0] << 24) + (tmp[1] << 16) + (tmp[2] << 8) + tmp[3];	
    															/* 轉(zhuǎn)換為32位 change to 32 bits */

	return SD_NO_ERR;    										/* 返回執(zhí)行成功 return perform sucessfully */		
}
#endif

		/*********************************************************
		
		    			下面為一些數(shù)據(jù)傳輸函數(shù)
		
		**********************************************************/

/********************************************************************************************************************
** 函數(shù)名稱: INT8U SD_ReadRegister()				Name:	  INT8U SD_ReadRegister()
** 功能描述: 從SD卡讀取數(shù)據(jù)							Function: read data from SD card
** 輸   入: INT32U len	  : 長(zhǎng)度					Input:	  INT32U len   : length
			 INT8U *recbuf: 接收緩沖區(qū)					 	  INT8U *recbuf: receive buffer
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  		Output:	  0:  right		>0:  error code
*********************************************************************************************************************/
uint8 SD_ReadRegister(uint32 len, uint8 *recbuf)
{	
	uint32 i = 0;
	uint8 resp;

    SPI_CS_Assert();
    do{    											/* 等待數(shù)據(jù)起始令牌 wait for data start token */
        resp = SPI_RecByte();
    	i++;
    }while((resp == 0xFF) && (i < SD_READREG_TIMEOUT));    
    
    if (i >= SD_READREG_TIMEOUT)
    {
    	SPI_CS_Deassert();
    	return SD_ERR_TIMEOUT_READ;					/* 超時(shí), 返回錯(cuò)誤 timeout, return error */
  	}
  	
   	if (resp != SD_TOK_READ_STARTBLOCK)				
   	{												/* 不是收到數(shù)據(jù)起始令牌 not receive data start token */
		recbuf[0] = resp;							
		i = 1;										/* 還有l(wèi)en - 1個(gè)字節(jié)要接收 still len - 1 bytes will be received */
   	}
   	else
   		i = 0;										/* 收到數(shù)據(jù)起始令牌,還有l(wèi)en個(gè)字節(jié)要接收 received data start token,still len bytes will be received */
   	  	
    for (; i < len; i++)
   		recbuf[i] = SPI_RecByte();					/* 接收數(shù)據(jù) receive data */
   		
    i = SPI_RecByte();								
    i = (i << 8) + SPI_RecByte();    				/* 讀取16位CRC get 16-bit CRC */	

#if SD_CRC_EN 
   	if (i != SD_GetCRC16(recbuf, len))
   	{												/* CRC校驗(yàn)錯(cuò)誤 CRC check is error */
   		SPI_CS_Deassert();
   		SPI_SendByte(0xFF);    						
  		return SD_ERR_DATA_CRC16;					/* 返回RCR16錯(cuò)誤  return error of CRC16 */				
  	}    
#endif   
  
    SPI_SendByte(0xFF);								/* 返回之前發(fā)送8個(gè)clock  clock out 8 clk before return */
    SPI_CS_Deassert();	
    	
	return SD_NO_ERR;
}	

/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_ReadBlockData()			Name:	  INT8U SD_ReadBlockData()
** 功能描述: 從SD卡中讀取數(shù)據(jù)塊					Function: read block data from sd card
** 輸   入: INT32U len    : 長(zhǎng)度				Input:	  INT32U len    : length
			 INT8U *recbuf : 接收緩沖區(qū)					  INT8U *recbuf : the buffer of receive
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  	Output:	  0:  right		>0:  error code
*******************************************************************************************************************/
uint8 SD_ReadBlockData(uint32 len, uint8 *recbuf)
{
    uint8 tmp;
    uint32 i = 0;

    SPI_CS_Assert();    
    do
    { 											    /* 等待接收數(shù)據(jù)開(kāi)始令牌0xFE  wait for receiving data start token 0xFE */
        tmp = SPI_RecByte();
        i++;
     }while((tmp == 0xFF) && (i < sds.timeout_read));
	
	if (i >= sds.timeout_read)
	{
		SPI_CS_Deassert();
       	return SD_ERR_TIMEOUT_READ;					/* 返回讀超時(shí)錯(cuò)誤碼  return error timeout error code of reading */
	}
		
	if (tmp != SD_TOK_READ_STARTBLOCK)				/* 塊讀開(kāi)始令牌錯(cuò)誤 read start block token is error */
	{
		SPI_SendByte(0xFF);
		SPI_CS_Deassert();
		return SD_ERR_DATA_START_TOK;
	}
	
	for (i = 0; i < len; i++)
   		recbuf[i] = SPI_RecByte();					/* 接收數(shù)據(jù) receive data */
   		
    i = SPI_RecByte();								
    i = (i << 8) + SPI_RecByte();    				/* 讀取16位CRC get 16-bit CRC */	

#if SD_CRC_EN 
   	if (i != SD_GetCRC16(recbuf, len))
   	{												/* CRC校驗(yàn)錯(cuò)誤 CRC check is error */
   		SPI_SendByte(0xFF); 
   		SPI_CS_Deassert();  						
  		return SD_ERR_DATA_CRC16;					/* 返回CRC16錯(cuò)誤  return error of CRC16 */				
  	}    
#endif   

	SPI_SendByte(0xFF); 
	SPI_CS_Deassert();

  	return SD_NO_ERR;								/* 返回函數(shù)執(zhí)行成功 return function perform sucessfully */
}

/*******************************************************************************************************************
** 函數(shù)名稱: INT8U SD_WriteBlockData()				Name:	  INT8U SD_WriteBlockData()
** 功能描述: 向sd卡寫數(shù)據(jù)塊							Function: write block data to sd card
** 輸   入: INT8U bmulti  : 是否為多塊操作1:是0:否 Input:	  INT8U bmulti   : multi blocks operate 1:Y 0:N 
			 INT32U len    : 長(zhǎng)度						  	  INT32U len     : length
			 INT8U *sendbuf: 發(fā)送緩沖區(qū)					 	  INT8U *sendbuf : the buffer of send
** 輸   出: 0:   正確    >0:   錯(cuò)誤碼		  		Output:	  0:  right		>0:  error code
********************************************************************************************************************/
uint8 SD_WriteBlockData(uint8 bmulti, uint32 len, uint8 *sendbuf)
{
	uint16 i;
	uint8 tmp;

	SPI_CS_Assert();
		
    SPI_SendByte(0xFF);								/* 開(kāi)始發(fā)送數(shù)據(jù)之前發(fā)送8個(gè)clock clock out 8 clk before start */
    
    if (bmulti == 1)
        SPI_SendByte(SD_TOK_WRITE_STARTBLOCK_M);	/* 寫多塊開(kāi)始令牌 start token of write multi blocks */
	else
		SPI_SendByte(SD_TOK_WRITE_STARTBLOCK);		/* 寫單塊開(kāi)始令牌 start token of write single block */

	for (i = 0; i < len; i++)
        SPI_SendByte(sendbuf[i]);					/* 發(fā)送數(shù)據(jù) send data */

#if SD_CRC_EN	
	i = SD_GetCRC16(sendbuf,len);					/* 計(jì)算CRC16 calculate CRC16 */
#endif

	SPI_SendByte((i >> 8) & 0xFF);
	SPI_SendByte(i & 0xFF); 						/* 發(fā)送CRC16校驗(yàn)碼 send CRC16 check code */
			    
	tmp = SPI_RecByte();
  	if ((tmp & SD_RESP_DATA_MSK) != SD_RESP_DATA_ACCETPTED)	
  	{		
   		SPI_SendByte(0xFF);							/* 返回之前發(fā)送8個(gè)clock  clock out 8 clk before return */
   		SPI_CS_Deassert();
   		return SD_ERR_DATA_RESP;					/* 數(shù)據(jù)響應(yīng)錯(cuò)誤 data response error */
    }
        
    SPI_CS_Deassert();
     		
    if (SD_WaitBusy(SD_WAIT_WRITE) != SD_NO_ERR)			
    	return SD_ERR_TIMEOUT_WRITE;				/* 寫入超時(shí) write time out */
    else
    	return SD_NO_ERR; 							/* 寫入正確 write right */
 }

/*******************************************************************************************************************
** 函數(shù)名稱: void SD_StopMultiToken()				Name:	  void SD_StopMultiToken(void)
** 功能描述: 發(fā)送多塊寫停止令牌						Function: send the token that stop multiple block write
** 輸   入: 無(wú)									    Input:	  NULL
** 輸   出: 無(wú)										Output:	  NULL
********************************************************************************************************************/
void SD_StopMultiToken(void)
{
	SPI_CS_Assert();
	
	SPI_SendByte(0xFF);								/* 先發(fā)送8個(gè)clock send 8 clock first */
	SPI_SendByte(SD_TOK_STOP_MULTI);				/* 發(fā)送停止數(shù)據(jù)傳輸令牌 send stop transmission token */
	SPI_RecByte();
	
    SPI_CS_Deassert();
}


/********************************************************************************************************************
** 函數(shù)名稱: void SD_WaitBusy()						Name:	  void SD_WaitBusy()
** 功能描述: 查詢SD卡是否處于忙狀態(tài)					Function: poll SD Card wheather it is busy
** 輸   入: INT32U waittype: 超時(shí)類型				Input:	  INT32U timeout: time out type
** 輸   出: 0: 未超時(shí)  >0: 錯(cuò)誤碼					Output:	  0: not time out   > 0: error code
*********************************************************************************************************************/
uint8 SD_WaitBusy(uint8 waittype)
{
    uint32 timeout, i = 0;
    uint8 tmp;
    
    if (waittype == SD_WAIT_WRITE)
    	timeout = sds.timeout_write;
    else
    	timeout = sds.timeout_erase;

	SPI_CS_Assert();
   	do
   	{ 												/* 等待忙結(jié)束 wait for being busy end */
        tmp = SPI_RecByte();
        i++;
    }while ((tmp != 0xFF) && (i < timeout));		/* 忙時(shí)收到的值為0xFF always receive 0xFF when card is busy */    
	SPI_CS_Deassert();								/* 有錯(cuò) */
	
	if(i < timeout) 
		return SD_NO_ERR;							/* 返回0,表示沒(méi)超時(shí) return 0 indicate that operation is not time out */
	else 
		return SD_ERR_TIMEOUT_WAIT;					/* 返回錯(cuò)誤碼,表示超時(shí) return error code indicate that operation is time out */
}

/********************************************************************************************************************
** 函數(shù)名稱: void SD_SPIDelay()						Name:	  void SD_SPIDelay()
** 功能描述: SPI總線延時(shí)							Function: SPI Bus delay 
** 輸   入: INT8U value: 延時(shí)值,不超過(guò)255		    Input:	  INT8U value : delay value,do not beyond 255
** 輸   出: 無(wú)										Output:	  NULL
*********************************************************************************************************************/
void SD_SPIDelay(uint8 value)
{
    uint8 i;

    for (i = 0; i < value; i++)
        SPI_SendByte(0xFF);						 	/* 發(fā)送0xFF clock out 0xFF */
}








?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区在线看| 日韩美女久久久| 日本三级韩国三级欧美三级| 欧美色图在线观看| 一区二区三区四区不卡视频| av激情成人网| 亚洲精品视频一区二区| 91免费国产在线观看| 亚洲欧美另类综合偷拍| 97精品国产露脸对白| 久久久久久日产精品| 国产成人精品亚洲777人妖| 欧美精品一区二区三区四区| 国产精品自拍一区| 亚洲国产电影在线观看| 99久久精品国产网站| 亚洲欧美一区二区三区国产精品| 一本色道a无线码一区v| 一个色综合av| 中文字幕高清一区| 91免费观看视频| 亚洲自拍偷拍网站| 91 com成人网| 国产精品18久久久久久久网站| 久久久国产精品麻豆| 成人av在线播放网址| 亚洲乱码国产乱码精品精小说| 色久优优欧美色久优优| 日韩高清在线一区| 国产日韩欧美精品综合| 99久久精品国产毛片| 五月开心婷婷久久| 国产婷婷色一区二区三区四区| 91色婷婷久久久久合中文| 亚洲国产三级在线| 精品国产sm最大网站| 成人av电影在线网| 亚洲一区二区三区四区在线免费观看 | 欧美一a一片一级一片| 日韩av一区二区在线影视| 久久久噜噜噜久久人人看| 91麻豆精品视频| 日韩电影在线观看电影| 国产精品久久久久三级| 制服丝袜在线91| 国产成人av一区二区三区在线| 中文字幕一区av| 4438x亚洲最大成人网| 国产凹凸在线观看一区二区| 亚洲综合丝袜美腿| 久久久99精品免费观看| 色久优优欧美色久优优| 激情综合网av| 一区二区视频免费在线观看| 精品剧情在线观看| 欧日韩精品视频| 成人综合婷婷国产精品久久免费| 亚洲视频一二三| 日韩午夜激情免费电影| www.一区二区| 喷水一区二区三区| 国产精品国产自产拍高清av王其| 欧美一级黄色片| 日韩va亚洲va欧美va久久| 亚洲精品中文在线影院| 国产亚洲精品久| 91精品国产综合久久久久| 91麻豆.com| 国产成人精品在线看| 久久精品国产一区二区| 亚洲天堂精品在线观看| 亚洲国产高清在线| 精品国偷自产国产一区| 91麻豆精品国产91久久久资源速度| a级精品国产片在线观看| 国内成人自拍视频| 三级欧美在线一区| 亚洲一区二区高清| 综合欧美亚洲日本| 国产精品久久久久久久浪潮网站 | 91视频你懂的| caoporn国产精品| 国产精品一区二区91| 另类专区欧美蜜桃臀第一页| **网站欧美大片在线观看| 2023国产精品自拍| 欧美人妇做爰xxxⅹ性高电影| 91丝袜国产在线播放| www.久久精品| www.亚洲色图| 91片在线免费观看| 99国产欧美另类久久久精品| 国产99久久久国产精品潘金| 国产中文字幕精品| 国产精品一二三在| 国产一区二区中文字幕| 国产老女人精品毛片久久| 国产乱人伦偷精品视频免下载 | 亚洲免费视频成人| 亚洲免费色视频| 亚洲r级在线视频| 日本少妇一区二区| 久久精品国产99国产| 激情综合色播五月| 国产精品99久久久久久有的能看| 国产一二三精品| 成人在线综合网| caoporm超碰国产精品| 色狠狠一区二区三区香蕉| 欧美性videosxxxxx| 欧美挠脚心视频网站| 欧美一个色资源| 26uuu另类欧美| 中文字幕欧美三区| 亚洲自拍与偷拍| 六月丁香婷婷色狠狠久久| 国产jizzjizz一区二区| 一本色道久久综合亚洲91| 欧美日韩国产色站一区二区三区| 欧美一区二区三区在线视频| 久久久久久黄色| 亚洲品质自拍视频网站| 免费人成黄页网站在线一区二区| 国产精品综合一区二区三区| 91网站在线观看视频| 欧美高清精品3d| 久久蜜桃一区二区| 一区二区三区在线观看视频| 日本aⅴ亚洲精品中文乱码| 麻豆久久久久久| 97aⅴ精品视频一二三区| 一本色道久久综合狠狠躁的推荐| 欧美精三区欧美精三区| 久久影院电视剧免费观看| 18成人在线观看| 欧美aaa在线| 91无套直看片红桃| 精品欧美一区二区在线观看 | 久久久久久一二三区| 一区二区三区久久| 国产一区 二区 三区一级| 欧美又粗又大又爽| 精品日本一线二线三线不卡| 中文字幕中文乱码欧美一区二区 | 欧美综合天天夜夜久久| 欧美xxxx老人做受| 亚洲精品视频免费看| 国产mv日韩mv欧美| 欧美老女人在线| 综合久久久久久| 韩国v欧美v日本v亚洲v| 欧美日韩久久不卡| 亚洲特黄一级片| 国产精品伊人色| 日韩欧美国产小视频| 樱桃国产成人精品视频| 国产精品一品视频| 日韩欧美不卡在线观看视频| 亚洲免费观看高清完整版在线 | 一区二区在线看| 国产成人精品影视| 精品成人在线观看| 日韩国产欧美一区二区三区| 在线影院国内精品| 中文字幕亚洲成人| 懂色av一区二区三区免费观看| 欧美一区二区免费视频| 亚洲最大的成人av| 成人黄色在线看| 欧美精品一区二区三区蜜桃视频| 日韩高清不卡一区二区| 欧美中文字幕亚洲一区二区va在线| 欧美极品另类videosde| 国产麻豆成人传媒免费观看| 欧美成人女星排名| 肉色丝袜一区二区| 欧美猛男超大videosgay| 亚洲综合免费观看高清完整版在线 | 99久久免费视频.com| 国产午夜精品福利| 国产一区二区免费在线| 欧美精品一级二级| 国产精品大尺度| 成人丝袜高跟foot| 国产精品人妖ts系列视频| 国产99久久久国产精品潘金网站| 久久蜜桃av一区二区天堂| 韩日欧美一区二区三区| 久久综合网色—综合色88| 国产在线精品一区二区夜色 | 久草中文综合在线| 欧美大片顶级少妇| 国内不卡的二区三区中文字幕| 欧美不卡激情三级在线观看| 精品一区二区精品| 国产亚洲va综合人人澡精品| 国产精品 日产精品 欧美精品| 国产欧美一区二区精品秋霞影院| 国产成人av一区二区三区在线观看| 中文字幕乱码一区二区免费|