⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdcmd.c

📁 atmel de booloader 内有源代码 用blb编译
💻 C
📖 第 1 页 / 共 3 页
字号:
** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_GetRCA(INT8U card_type, INT16U *RCA){	INT32U param = *RCA << 16;	INT8U response[6],tmp;				tmp = SD_SendCommand(CMD3, param, CMD3_R, response); /* 向卡获取RCA命令 command that get RCA from card */	if (tmp != SD_NO_ERR)     	return tmp;        if (card_type == 0)					    /* SD card */ 	        *RCA = ((response[4] << 8) + response[3]);			 /* 取得响应中的RCA域 get RCA fields from response */        return SD_NO_ERR;}/*********************************************************************************************************** Function name: SD_SelectCard** Descriptions:  select card**                选择卡** Input: 		  INT16U RCA   : 卡的RCA				INPUT:	  INT16U RCA  : the RCA of card** Output: 		  0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_SelectCard(INT16U RCA){	INT32U param;	INT8U response[6], tmp;		param = (INT32U)RCA << 16; 	tmp = SD_SendCommand(CMD7, param, CMD7_R, response);  /* 选择卡命令 command that select card */	if (tmp != SD_NO_ERR)     	return tmp;    return SD_NO_ERR;}/*********************************************************************************************************** Function name: SD_DeSelectCard** Descriptions:  deselect card**                不选择卡** Input: 		  NULL** Output: 		  0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_DeSelectCard(void){	INT32U param = 0;	INT8U response[6], tmp;		tmp = SD_SendCommand(CMD7, param, CMD0_R, response);   /* 不选择卡命令 command that deselect card */	if (tmp != SD_NO_ERR)     	return tmp;         return SD_NO_ERR;}/*********************************************************************************************************** Function name: SD_ReadCSD** Descriptions:  read CSD register of card **                读卡的CSD寄存器** Input: 		  INT8U csdlen  : 寄存器长度(固定为16)	INT8U csdlen  : len of register (fixed,is 16)				  INT8U *recbuf : 接收缓冲区			INT8U *recbuf : recbuffer** Output: 		  0:   正确    >0:   错误码		  		0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_ReadCSD(INT16U RCA, INT8U csdlen, INT8U *recbuf){	INT32U param;    INT8U response[17], tmp;        param = (INT32U)RCA << 16;              tmp = SD_SendCommand(CMD9, param, CMD9_R, response);    /* 读CSD寄存器命令 command that read CSD register */    if (tmp != SD_NO_ERR) 									        return tmp;									  	 	for (tmp = 0; tmp < csdlen; tmp++)						/* 从响应中取得CSD get CSD from response */ 		recbuf[tmp] = response[tmp];  	          return SD_NO_ERR; }/*********************************************************************************************************** Function name: SD_ReadCID** Descriptions:  read CID register of card**                读卡的CID寄存器** Input: 		  INT16U RCA    : 卡RCA地址				INT16U RCA	  : the card RCA				  INT8U cidlen  : 寄存器长度(固定为16)	INT8U cidlen  : len of register (fixed,is 16)				  INT8U *recbuf : 接收缓冲区			INT8U *recbuf : recbuffer	** Output: 		  0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_ReadCID(INT16U RCA, INT8U cidlen, INT8U *recbuf){    INT32U param;    INT8U response[17], tmp;  	param = (INT32U)RCA << 16;     	tmp = SD_SendCommand(CMD10, param, CMD10_R, response);	 /* 读CID寄存器命令 command that read CID register */ 	if (tmp != SD_NO_ERR)     	return tmp;  	for (tmp = 0; tmp < 16; tmp++) 		recbuf[tmp] = response[tmp];						 /* 从响应中取得CID get CID from response */		return SD_NO_ERR;}/*********************************************************************************************************** Function name: SD_StopTransmission** Descriptions:  stop data transmission**                停止数据传输** Input: 		  NULL** Output: 		  0:   正确    >0:   错误码		  		0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_StopTransmission(void){	INT32U param = 0;	INT8U response[6];	 	return (SD_SendCommand(CMD12, param, CMD12_R, response)); /* 结束数据传输命令失败 stop transmission command fail */}/*********************************************************************************************************** Function name: SD_ReadCard_Status** Descriptions:  read Card Status register of sd card**                读SD卡的 Card Status 寄存器** Input: 		  INT16U RCA    : 卡RCA地址				INT16U RCA	  : the card RCA				  INT8U len  	: 寄存器长度(固定为4)	INT8U len     : len of register (fixed,is 4)				  INT8U *recbuf : 接收缓冲区			INT8U *recbuf : recbuffer	** Output: 		  0:   正确    >0:   错误码		  		 0:  right		>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_ReadCard_Status(INT16U RCA, INT8U len, INT8U *buffer){	INT32U param;    INT8U response[6],tmp;        param = (INT32U)RCA << 16;       tmp = SD_SendCommand(CMD13, param, CMD13_R, response);    /* 读 Card_Status 寄存器   read register of Card Status */ 	if (tmp != SD_NO_ERR) 		return tmp;        for (tmp = 0; tmp < 4; tmp++)							  /* 从响应中取得Card_Status read Card_Status from response */ 		buffer[tmp] = response[tmp + 1];			  	return SD_NO_ERR;  	}/*********************************************************************************************************** Function name: SD_GoInactive** Descriptions:  forbid card into inactive state**                使卡进入停止状态** Input: 		  INT16U RCA    : 卡RCA地址				INT16U RCA	   : the card RCA** Output: 		  0:   正确    >0:   错误码		  		0:  right		>0:  error code** Created by:    Ming Yuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_GoInactive(INT16U RCA){	INT32U param;    INT8U response[6], tmp;        param = (INT32U)RCA << 16;        tmp = SD_SendCommand(CMD15, param, CMD15_R, response);  /* 使卡进入停止状态 forbid card into inactive state */ 	return tmp;	}/*********************************************************************************************************** Function name: SD_SetBlockLen** Descriptions:  set a block len of card**                设置卡一个块的长度** Input: 		  INT32U length	: 块的长度值			INT32U length	: the length of a block** Output: 		  0:   正确    >0:   错误码		  		0:  right		>0:  error code** Created by:    Ming Yuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_SetBlockLen(INT16U RCA, INT32U length){	INT8U response[6],ret;		ret = SD_SelectCard(RCA);					/* CMD7, 进入传输状态 */
    if (ret != SD_NO_ERR)
    	return ret;			         												    ret = SD_SendCommand(CMD16, length, CMD16_R, response);    if (ret != SD_NO_ERR) 		return ret;									/* 设置块的长度为length失败 set the length of block to length fail */	ret = SD_JudgeResult(&response[1]);			/* 返回执行结果 return perform result */	
	if  (ret != SD_NO_ERR)
		return ret;
	
	return (SD_DeSelectCard());	//return (SD_JudgeResult(&response[1]));			/* 返回执行结果 return perform result */	}/*********************************************************************************************************** Function name: SD_ReadSingleBlock** Descriptions:  read single block command**                读单块命令** Input: 		  INT32U blockaddr: 块地址				INT32U blockaddr: block address** Output: 		  0:   正确    >0:   错误码		  		0:  right	>0:  error code** Created by:    MingYuan Zheng 郑明远 ** Created Date:  2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/INT8U SD_ReadSingleBlock(INT32U blockaddr){	return (SD_BlockCommand(CMD17, CMD17_R, blockaddr)); /* 读单块命令 command that read single block */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -