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

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

?? sddriver.c

?? 周立功公司為LPC213X ARM7 編寫的SD卡讀寫模塊
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			sddriver.c
** Last modified Date:	2005-1-6
** Last Version:		V1.0
** Descriptions:		sd 卡驅動軟件包: SD卡物理層 用戶API函數
**						Soft Packet of SD Card Driver: user API funciton
**
**------------------------------------------------------------------------------------------------------
** Created by:			Ming Yuan Zheng
** Created date:		2005-1-6
** Version:				V1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			
** Modified date:		
** Version:				
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/

#include "config.h"
#include "sdconfig.h"
#include "sdhal.h"
#include "SDCmd.h"
#include "sddriver.h"

/* SD卡信息結構體變量 the information structure variable of SD Card */
sd_struct sds;			

/* 超時時間單位表(單位: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卡  User API Function: Initialize,read,write,erase SD Card 
				
	***************************************************************************************************
	*/

				
/*******************************************************************************************************************
** 函數名稱: INT8U SD_Initialize()				Name:	  INT8U SD_Initialize()
** 功能描述: 初始化SD卡							Function: initialize sd card
** 輸   入: 無									Input:	  NULL
** 輸   出: 0:   正確    >0:   錯誤碼		  	Output:	  0:  right		>0:  error code
********************************************************************************************************************/
INT8U SD_Initialize(void)
{
	INT8U recbuf[4],ret;
    
    SD_HardWareInit();					    		/* 初始化讀寫SD卡的硬件條件 Initialize the hardware that access SD Card */
    
    if (SD_ChkCard() != 1)							/* 檢查卡是否插入 check weather card is inserted */
    	return SD_ERR_NO_CARD;   
         
    SPI_CS_Assert();								/* 1. 置CS為低 assert CS */  
	SD_SPIDelay(25);								/* 2. 至少延時 74 clock delay more than 74 clock */
    SPI_CS_Deassert();								/* 3. 置CS為高 dessert CS */
    SD_SPIDelay(2);									/* 4. 延時2(8 clock) delay 2(8 clock) */
    
    ret = SD_ResetSD();								/* 5. 發出CMDO命令復位SD卡 send CMD0 command to reset sd card */
    if (ret != SD_NO_ERR)
        return ret;									
 	
 	ret = SD_ActiveInit();							/* 6. 激活卡進入初始化過程. 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,返回錯誤碼  not support 3.3V,return error code */
    
    SPI_ClkToMax();									/* 8. 設置SPI時鐘到最大值 set SPI clock to maximum */
        
#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 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 */
}

/********************************************************************************************************************
** 函數名稱: INT8U SD_ReadBlock()					Name:	  INT8U SD_ReadBlock()
** 功能描述: 從SD卡中讀一個塊						Function: read a single block from sd card
** 輸   入: INT32U blockaddr: 塊地址				Input:    INT32U blockaddr: address of block
			 INT8U *recbuf   : 接收緩沖區,長度512Bytes	 	  INT8U *recbuf   : the buffer of receive,length is 512Bytes
** 輸   出: 0:   正確    >0:   錯誤碼		  		Output:	  0:  right		>0:  error code
*********************************************************************************************************************/
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 */	
}

/********************************************************************************************************************
** 函數名稱: INT8U SD_ReadMultiBlock()				Name:	  INT8U SD_ReadMultiBlock()
** 功能描述: 從SD卡中讀多個塊						Function: read multi blocks from sd card
** 輸   入: INT32U blockaddr: 塊地址				Input:	  INT32U blockaddr: address of block
			 INT32U blocknum : 塊數量						  INT32U blocknum : the numbers of block
			 INT8U *recbuf   : 接收緩沖區,每塊512字節		  INT8U *recbuf   : the buffer of receive,each block length is 512Bytes
** 輸   出: 0:   正確    >0:   錯誤碼		  		Output:	  0:  right		>0:  error code
*********************************************************************************************************************/
#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()					Name:	  INT8U SD_WriteBlock()
** 功能描述: 向SD卡中寫入一個塊						Function: write a block to sd card
** 輸   入: INT32U blockaddr: 塊地址				Input: 	  INT32U blockaddr: address of block
			 INT8U *sendbuf  : 發送緩沖區,長度512Bytes	  	  INT8U *sendbuf  : the buffer of send,length is 512Bytes
** 輸   出: 0:   正確    >0:   錯誤碼		  		Output:	  0:  right		>0:  error code
*********************************************************************************************************************/
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 */
 	if (ret == SD_NO_ERR)										/* 讀Card Status寄存器, 檢查寫入是否成功 */
 	{															/* 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()				Name:	  INT8U SD_WriteMultiBlock()
** 功能描述: 向SD卡中寫入多個塊						Function: write multi blocks to sd card
** 輸   入: INT32U blockaddr: 塊地址				Input:	  INT32U blockaddr: address of block
			 INT32U blocknum : 塊數量						  INT32U blocknum : the numbers of block
			 INT8U *sendbuf  : 發送緩沖區每塊512字節    	  INT8U *sendbuf  : the send buffer,each block length is 512Bytes
** 輸   出: 0:   正確    >0:   錯誤碼		  		Output:	  0:  right		>0:  error code
***********************************************************************************************************************/
#if SD_WriteMultiBlock_EN
INT8U SD_WriteMultiBlock(INT32U blockaddr, INT32U blocknum, INT8U *sendbuf)
{
	INT32U i;
	INT8U ret;
	
	if ((blockaddr + blocknum) > sds.block_num)	
		return SD_ERR_OVER_CARDRANGE;							/* 操作超出卡容量范圍 operate over the card range */
		
	if (SD_ChkCardWP() == 1)
		return SD_ERR_WRITE_PROTECT;							/* 卡有寫保護 */
	
	ret = SD_WriteMultipleBlock(blockaddr);						/* 寫多塊命令 write multiple blocks command */
	if (ret != SD_NO_ERR)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美视频| 国产成人超碰人人澡人人澡| 日韩va亚洲va欧美va久久| 狠狠网亚洲精品| 欧美精品在欧美一区二区少妇| 国产视频一区不卡| 日韩国产一区二| 日本精品免费观看高清观看| 一区二区三区在线高清| 国内精品伊人久久久久av一坑| 欧洲日韩一区二区三区| 国产拍欧美日韩视频二区| 美腿丝袜亚洲色图| 欧美理论在线播放| 伊人性伊人情综合网| 成人a级免费电影| 精品少妇一区二区三区视频免付费 | 日本女人一区二区三区| 91福利国产成人精品照片| 中文字幕第一区| 国产精品综合网| 精品国产乱码久久久久久1区2区| 日韩福利电影在线观看| 欧美在线999| 亚洲三级小视频| 成人av免费在线| 欧美国产日韩精品免费观看| 国产精品影视天天线| 日韩一区二区三区在线视频| 午夜久久久影院| 欧美高清精品3d| 天堂在线亚洲视频| 91精品国产日韩91久久久久久| 午夜久久久久久久久| 欧美日韩一区不卡| 日韩精品高清不卡| 欧美一级精品大片| 九九视频精品免费| 久久精品视频一区二区| 在线不卡中文字幕播放| 婷婷一区二区三区| 日韩一区二区在线观看视频 | 制服丝袜亚洲精品中文字幕| 亚洲第一在线综合网站| 69精品人人人人| 国产一区二区主播在线| 国产精品水嫩水嫩| 色先锋资源久久综合| 亚洲成人午夜电影| 欧美一级久久久久久久大片| 国产精品资源在线看| 中文字幕一区二区在线观看| 在线一区二区观看| 免费看黄色91| 国产精品三级视频| 欧美三级电影在线看| 久久99精品国产.久久久久久| 久久精品一区二区三区av| 99re这里都是精品| 亚洲无线码一区二区三区| 日韩一级成人av| 成人永久aaa| 亚洲四区在线观看| 这里只有精品电影| 成人国产精品免费网站| 亚洲成人1区2区| 久久久久久毛片| 欧美专区亚洲专区| 国产原创一区二区三区| 一区二区三区精品视频在线| 日韩精品在线看片z| 91色|porny| 久久se精品一区精品二区| 中文字幕一区二区三区蜜月| 3d动漫精品啪啪1区2区免费 | 亚洲成人免费视| 国产午夜三级一区二区三| 欧美亚洲国产一区在线观看网站| 国产一区二区伦理片| 亚洲午夜一区二区| 国产精品国产自产拍在线| 欧美一区二区三区四区五区| 99在线精品免费| 国产中文字幕精品| 丝瓜av网站精品一区二区| 综合av第一页| 国产女主播视频一区二区| 日韩欧美国产小视频| 91福利视频网站| 97精品久久久午夜一区二区三区| 美国毛片一区二区三区| 亚洲成人av福利| 一区二区三区在线观看网站| 亚洲国产精品t66y| 337p日本欧洲亚洲大胆精品| 91精品久久久久久蜜臀| 色噜噜狠狠成人中文综合| 成人精品免费视频| 国产精品夜夜爽| 精品夜夜嗨av一区二区三区| 日韩精品午夜视频| 午夜精品久久久久久久久久 | 麻豆高清免费国产一区| 亚洲第一电影网| 一区二区三区在线视频免费观看| 国产亚洲欧美激情| 久久久久久久久岛国免费| 欧美xxxxx牲另类人与| 在线综合+亚洲+欧美中文字幕| 欧亚洲嫩模精品一区三区| 成人福利视频网站| 成人精品视频一区| 白白色 亚洲乱淫| eeuss鲁片一区二区三区 | 久久精品网站免费观看| 久久欧美一区二区| 久久精品免费在线观看| 国产亚洲欧美日韩日本| 国产视频一区二区在线| 国产精品三级在线观看| 国产精品视频yy9299一区| 国产精品色婷婷久久58| 中文字幕在线播放不卡一区| ...中文天堂在线一区| 亚洲美女免费在线| 亚洲综合久久av| 日韩av中文字幕一区二区 | 亚洲一区在线观看免费观看电影高清| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲免费观看高清完整版在线观看| 国产精品日韩精品欧美在线| 国产精品国产三级国产aⅴ无密码| 亚洲色图色小说| 亚洲v精品v日韩v欧美v专区| 免费人成在线不卡| 国产一区二区视频在线播放| 成人免费高清在线| 欧美色涩在线第一页| 欧美一区二区久久| 欧美极品另类videosde| 亚洲精品一二三四区| 日韩国产欧美一区二区三区| 国产在线不卡一区| 在线视频综合导航| 欧美大片在线观看| 亚洲欧美在线高清| 毛片av一区二区| 成人高清视频在线| 91精品国产品国语在线不卡| 国产欧美视频在线观看| 亚洲一区二区视频| 国产精品一区2区| 欧美日韩专区在线| 国产视频一区二区三区在线观看 | 色婷婷国产精品久久包臀| 欧美一区二区日韩一区二区| 国产欧美综合在线| 日本午夜精品视频在线观看 | 韩国欧美一区二区| 色香色香欲天天天影视综合网| 欧美r级电影在线观看| 亚洲视频一二三区| 国产精品一区二区视频| 欧美三级在线视频| 国产精品美女久久久久aⅴ | 国产乱码精品一区二区三区av | 26uuu亚洲综合色欧美 | 久久福利资源站| 色婷婷狠狠综合| 中文成人综合网| 精品在线亚洲视频| 欧美日韩精品久久久| 日韩一区欧美一区| 国产精品中文字幕日韩精品 | 欧美亚州韩日在线看免费版国语版| 久久综合av免费| 天天综合天天综合色| 91猫先生在线| 国产精品久久一级| 丁香天五香天堂综合| 久久青草国产手机看片福利盒子| 五月天丁香久久| 在线视频国产一区| 亚洲欧美日韩在线播放| 成人精品电影在线观看| 26uuu色噜噜精品一区| 老司机免费视频一区二区| 欧美综合久久久| 亚洲精选免费视频| 色综合网站在线| 亚洲人123区| www.日韩精品| 中文字幕一区av| 波多野结衣亚洲一区| 国产精品乱人伦中文| 成人免费黄色大片| 中文字幕日韩一区二区| av在线播放一区二区三区| 国产精品天天看| 99久久99久久精品免费看蜜桃|