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

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

?? sd-51.c

?? 51控制SD卡
?? C
?? 第 1 頁 / 共 2 頁
字號:
		SD_UN();											//釋放SD卡
		SD_QReadByte();										//最后8個CLOCK
		return SD_ERR_CMD_ERASEBLOCK_A;						//發送設置擦除起始地址指令錯誤
	}
	SD_UN();												//釋放SD卡
	SD_QReadByte();											//卡響應與下一指令時鐘間隔
	SD_EN();												//SD卡使能
	i=0;													//初始化變量
	do
	{
		ret=SD_SendCmd(CMD33,AdB0,AdB1,AdB2,AdB3,CMD33_R);	//發送設置塊擦除終止地址
		i++;												//變量+1
	}while((ret!=0x00)&&(i<10));							//設置循環條件
	if(i>=10)
	{
		SD_UN();											//釋放SD卡
		SD_QReadByte();										//最后8個CLOCK
		return SD_ERR_CMD_ERASEBLOCK_B;						//發送設置擦除起始地址指令錯誤
	}
	SD_UN();												//釋放SD卡
	SD_QReadByte();											//卡響應與下一指令時鐘間隔
	SD_EN();												//SD卡使能
	SD_QWriteByte(CMD38);									//寫指令
	SD_QWriteByte(0xFF);									//帶入參數
	SD_QWriteByte(0xFF);									//帶入參數
	SD_QWriteByte(0xFF);									//帶入參數
	SD_QWriteByte(0xFF);									//帶入參數
	SD_QWriteByte(0x95);									//發送統一CRC碼
	e=0;													//
	while(ret=SD_QReadByte())								//設置循環條件
	{
		e++;												//變量+1
		if((ret==0xFF)&&(e<0xFFFFFFFE))
		{
			SD_UN();										//釋放SD卡
			SD_QReadByte();									//發送時鐘
			return SD_ERR_NO;								//返回無錯誤
		}
		if(e>=0xFFFFFFFE)
		{
			SD_UN();										//釋放SD卡
			SD_QReadByte();									//發送時鐘
			return SD_ERR_ERASEBLOCKS;						//發送擦除多塊指令錯誤
		}
	}
}

/*=========================================================
函數名:SD_ReadBlock()
功能:SD卡塊讀函數
入口參數:塊讀地址(4)
出口參數:操作返回信號(1)
=========================================================*/
Uchar SD_ReadBlock(Ulong Addrs)
{
	Uchar ret,Ad0,Ad1,Ad2,Ad3;								//臨時變量
	Uint i;													//臨時變量
	Ad0=((Addrs&0xFF000000)>>24);							//
	Ad1=((Addrs&0x00FF0000)>>16);							//
	Ad2=((Addrs&0x0000FF00)>>8);							//
	Ad3=(Addrs&0x000000FF);									//
	SD_UN();												//SD卡禁止
	for(i=0;i<100;i++)
	{
		SD_QReadByte();										//填充時鐘
	}
	SD_EN();												//SD卡使能
	for(i=0;i<100;i++)
	{
		SD_QReadByte();										//送空時鐘
	}
	i=0;													//初始化變量
	do
	{
		ret=SD_SendCmd(CMD17,Ad0,Ad1,Ad2,Ad3,CMD17_R);		//發送塊讀指令
		i++;												//變量+1
	}while((ret!=0x00)&&(i<10));							//設置循環條件
	if(i>=10)
	{
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		SD_UN();											//釋放SD卡
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}		
		return SD_ERR_CMD_READBLOCK;						//返回塊讀錯誤
	}
	i=0;													//初始化寄存器
	do
	{
		ret=SD_QReadByte();									//讀起始字節0xEF
		i++;												//時間限制
	}while((ret!=0xFE)&&(i<10));							//設置循環條件
	if(i>=10)
	{
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		SD_UN();											//釋放SD卡
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}				
		return SD_ERR_DATA_READBLOCK;						//返回塊讀錯誤
	}
	for(i=0;i<514;i++)
	{
		D[i]=SD_QReadByte();								//讀取SD卡指定地址數據
	}
	SD_UN();												//釋放SD卡
	return SD_ERR_NO;										//否則返回無錯誤
}

/*=========================================================
函數名:SD_WritBlock()
功能:SD卡塊寫函數
入口參數:
出口參數:
=========================================================*/
Uchar SD_WriteBlock(Ulong Addrs)
{
	Uchar ret,Ad0,Ad1,Ad2,Ad3;								//臨時變量
	Uint i;													//臨時變量
	Ad0=((Addrs&0xFF000000)>>24);							//
	Ad1=((Addrs&0x00FF0000)>>16);							//
	Ad2=((Addrs&0x0000FF00)>>8);							//
	Ad3=(Addrs&0x000000FF);									//
	SD_UN();												//SD卡禁止
	for(i=0;i<100;i++)
	{
		SD_WriteByte(0xFF);
	}
	SD_EN();												//SD卡使能
	for(i=0;i<100;i++)
	{
		SD_ReadByte();
	}
	i=0;													//初始化變量
	do
	{
		ret=SD_SendCmd(CMD24,Ad0,Ad1,Ad2,Ad3,CMD24_R);		//發送塊讀指令
		i++;												//變量+1
	}while((ret!=0x00)&&(i<10));							//設置循環條件
	if(i>=10)
	{
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		SD_UN();											//釋放SD卡
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		return SD_ERR_CMD_WRITEBLOCK;						//返回塊寫錯誤
	}
	for(i=0;i<8;i++)
	{
		SD_QWriteByte(0xFF);
	}
	i=0;													//初始化寄存器
	do
	{
		SD_QWriteByte(0xFF);								//發送時鐘
		i++;												//時間限制
	}while(i<10);											//設置循環條件
	SD_QWriteByte(0xFE);									//寫入起始字節
	for(i=0;i<514;i++)
	{
		SD_QWriteByte(D[i]);								//讀取SD卡指定地址數據
	}
	ret=SD_QReadByte();										//忽略一個字節xxx00101b
	if((ret&0x1F)!=0x05)
	{
		for(i=0;i<100;i++)
		{
			SD_QReadByte();
		}
		SD_UN();											//釋放SD卡
		for(i=0;i<100;i++)
		{
			SD_QWriteByte(0xFF);
		}
		return SD_ERR_WAIT_WRITEBLOCK;						//返回等待錯誤信號
	}
	i=0;													//初始化變量
	do
	{
		ret=SD_QReadByte();									//讀SD卡狀態
		i++;												//變量+1
	}while((ret==0x00)&&(i<100));							//設置循環條件
	if(i>=100)
	{
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		SD_UN();											//釋放SD卡
		for(i=0;i<100;i++)
		{
			SD_QReadByte();									//送空時鐘
		}
		return SD_ERR_DATA_WRITEBLOCK;						//返回塊寫錯誤
	}
	for(i=0;i<100;i++)
	{
		SD_QReadByte();										//送空時鐘
	}
	SD_UN();												//釋放SD卡
	for(i=0;i<100;i++)
	{
		SD_QWriteByte(0xFF);
	}
	return SD_ERR_NO;										//否則返回無錯誤
}

/*=========================================================
函數名:SD_InitDate1()
功能:SD卡初始化時間表通用函數
入口參數:存放抄表數據首地址、存放時間日期數據地址、數據存放天數值
出口參數:操作信息(1個字節)
=========================================================*/
Uchar SD_InitDate1(Ulong adf,Ulong adg,Uchar j)
{
	Uint i,x;												//變量聲明
	for(i=0;i<512;i++)
	{
		D[i]=0;												//數組清零
	}
	if(j>128)
	{
		x=496;
	}
	else
	{
		x=512;
	}
	for(i=0;i<x;i+=8)
	{
		D[i]=j;												//計算天數
		j++;												//天數+1
	}
	for(i=4;i<x;i+=8)
	{
		D[i]=(Uchar)((adf&0xFF000000)>>24);					//賦值地址
		D[i+1]=(Uchar)((adf&0x00FF0000)>>16);				//賦值地址
		D[i+2]=(Uchar)((adf&0x0000FF00)>>8);				//賦值地址
		D[i+3]=(Uchar)(adf&0x000000FF);						//賦值地址
		adf+=0x0003C000;									//地址+1
	}
	i=0;
	while(SD_ERR_NO!=SD_WriteBlock(adg))
	{
		i++;												//變量+1
		if(i>5)
		{
			LCM_ClearRegistryERR();							//清除注冊表失敗
			LCM_DispDelay();								//延時1s顯示
			return SD_ERR_CLEARREGISTRY;					//返回注冊初始化失敗信息
		}
	}
	return SD_ERR_NO;										//返回無錯誤
}

/*=========================================================
函數名:SD_InitDate()
功能:SD卡初始化時間表函數
入口參數:無
出口參數:操作信息(1個字節)
=========================================================*/
Uchar SD_InitDate(void)
{
	Uchar t;												//聲明變量
	t=SD_InitDate1(0x00010000,0x00003000,1);				//寫入第一組時間表
	if(t!=SD_ERR_NO)
	{
		return SD_ERR_CLEARREGISTRY;						//返回錯誤信息
	}
	t=SD_InitDate1(0x00F10000,0x00003200,65);				//寫入第二組時間表
	if(t!=SD_ERR_NO)
	{
		return SD_ERR_CLEARREGISTRY;						//返回錯誤信息
	}
	t=SD_InitDate1(0x01E10000,0x00003400,129);				//寫入第三組時間表
	if(t!=SD_ERR_NO)
	{
		return SD_ERR_CLEARREGISTRY;						//返回錯誤信息
	}
	return SD_ERR_NO;										//返回無錯誤
}

/*=========================================================
函數名:SD_InitRegistry()
功能:SD卡初始化注冊表函數
入口參數:無
出口參數:操作信息(1個字節)
=========================================================*/
Uchar SD_InitRegistry(void)
{
	Uint p,i,j;												//聲明變量
	Ulong ae;												//聲明變量
	for(p=0;p<512;p++)
	{
		D[p]=0;												//數組賦值
	}
	for(i=0;i<4;i++)
	{
		for(p=i;p<512;p+=64)
		{
			D[p]=0x55;										//區域管理器空
		}
	}
	ae=0x00002000;											//變量賦值
	for(i=0;i<8;i++)
	{
		j=0;
		while(SD_ERR_NO!=SD_WriteBlock(ae))					//設置循環變量
		{
			j++;											//變量+1
			if(j>5)
			{
				LCM_ClearRegistryERR();						//清除注冊表失敗
				LCM_DispDelay();							//延時1s顯示
				return SD_ERR_CLEARREGISTRY;				//返回注冊初始化失敗信息
			}
		}
		ae+=0x00000200;										//下一塊
	}
	i=0;													//
	while(SD_ERR_NO!=SD_InitDate())
	{
		i++;
		if(i>5)
		{
			LCM_ClearRegistryERR();							//清除注冊表失敗
			LCM_DispDelay();								//延時1s顯示
			return SD_ERR_CLEARREGISTRY;					//返回注冊初始化失敗信息
		}
	}
	for(i=0;i<0x0100;i++)
	{
		D[i]=i;												//數組賦值
	}
	p=0x0200;												//
	for(i=0;i<0x0100;i++)
	{
		p--;												//
		D[p]=i;												//循環寫入
	}
	i=0;
	while(SD_ERR_NO!=SD_WriteBlock(0x00001000))				//設置循環變量
	{
		i++;												//變量+1
		if(i>5)
		{
			LCM_ClearRegistryERR();							//清除注冊表失敗
			LCM_DispDelay();								//延時1s顯示
			return SD_ERR_CLEARREGISTRY;					//返回注冊初始化失敗信息
		}
	}
	return SD_ERR_NO;										//操作正確
}

/*=========================================================
函數名:SD_CheckRegistry()
功能:SD卡注冊表檢測函數
入口參數:無
出口參數:操作信息(1個字節)
=========================================================*/
Uchar SD_CheckRegistry(void)
{
	Uint i,j;												//聲明變量
	i=0;													//變量賦值
	while(SD_ERR_NO!=SD_ReadBlock(0x00001000))
	{
		i++;												//變量+1
		if(i>5)
		{
			LCM_SD_CheckRegistryERR();						//調顯注冊表檢測錯誤
			LCM_DispDelay();								//延時1s顯示
			return SD_ERR_CHECKREGISTRY;					//返回注冊表檢測錯誤信息
		}
	}
	for(i=0;i<0x0100;i++)
	{
		if(D[i]!=i)
		{
			if(SD_ERR_NO!=SD_InitRegistry())
			{
				return SD_ERR_INITREGISTRY;					//返回初始化注冊表失敗信息
			}
		}
	}
	j=0x0100;
	for(i=0x0100;i<0x0200;i++)
	{
		j--;												//從0xFF開始遞減
		if(D[i]!=j)
		{
			if(SD_ERR_NO!=SD_InitRegistry())
			{
				return SD_ERR_INITREGISTRY;					//返回初始化注冊表失敗信息
			}
		}
	}
	return SD_ERR_NO;										//返回操作信息
}

/*=========================================================
函數名:SD_Check()
功能:SD卡檢測函數
入口參數:無
出口參數:無
=========================================================*/
void SD_Check(void)
{
	Uchar y;												//聲明變量
	y=0;													//初始化變量
	while(0x01!=SD_Rest())
	{
		y++;												//條件+1
		if(y>20)											//如果在該條件下SD卡沒有完成復位
		{
			LCM_SDOVER();									//調顯SD卡連接失敗信息
			LCM_DispDelay();								//延時1s顯示
			goto sd_over;									//跳轉過SD卡初始化過程
		}
	}
	y=0;													//初始化變量
	while(0x00!=SD_ActInit())
	{
		y++;												//條件+1
		if(y>20)											//如果在該條件下SD卡沒有完成初始化
		{
			LCM_SDOVER();									//調顯SD卡連接失敗信息
			LCM_DispDelay();								//延時1s顯示
			goto sd_over;									//跳轉過SD卡初始化過程
		}
	}
	SD_UN();
	for(y=0;y<10;y++)
	{
		SD_QReadByte();
	}
	y=0;													//初始化變量
	while(0x00!=SD_SetBlockLen(0x00000200))
	{
		y++;												//條件+1
		if(y>20)											//如果在該條件下SD卡沒有完成初始化
		{
			LCM_SDOVER();									//調顯SD卡連接失敗信息
			LCM_DispDelay();								//延時1s顯示
			goto sd_over;									//跳轉過SD卡初始化過程
		}
	}
	if(SD_ERR_NO!=SD_CheckRegistry())
	{
		LCM_SD_CheckRegistryERR();							//讀取檢查注冊表失敗
		LCM_DispDelay();									//延時1s顯示
		goto sd_over;										//跳轉
	}
	sd_over:
	_nop_();												//空操作
}

//=======================================================//
/*******************SD卡函數結束**************************/
//=======================================================//

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线免费观看| 夜夜嗨av一区二区三区网页| 91精品福利在线| av一区二区三区四区| 成人午夜又粗又硬又大| 国产成人a级片| 成人av网站免费| 91免费看`日韩一区二区| 不卡影院免费观看| 一本大道久久a久久综合| 91色九色蝌蚪| 欧美日韩精品一区二区天天拍小说| 欧美在线制服丝袜| 欧美视频三区在线播放| 5858s免费视频成人| 欧美精品一区男女天堂| 国产亚洲成av人在线观看导航| 久久久午夜电影| 日本一区二区三区久久久久久久久不 | 欧美日韩高清不卡| 91.麻豆视频| 久久新电视剧免费观看| 国产精品人成在线观看免费| 亚洲人成影院在线观看| 五月综合激情婷婷六月色窝| 日韩电影一区二区三区四区| 国产一区二区免费在线| 99re亚洲国产精品| 欧美精品18+| 国产精品―色哟哟| 香蕉成人啪国产精品视频综合网| 看电影不卡的网站| 99热99精品| 欧美一区二区三区精品| 中文字幕 久热精品 视频在线| 亚洲男人的天堂av| 九九精品视频在线看| 日本丶国产丶欧美色综合| 欧美成人一区二区三区在线观看| 国产欧美一区二区三区在线老狼 | 8v天堂国产在线一区二区| 久久久久综合网| 亚洲国产综合色| 成人综合婷婷国产精品久久蜜臀 | 欧美一区二区精品久久911| 国产偷国产偷亚洲高清人白洁| 一区二区三区四区不卡在线| 加勒比av一区二区| 欧美变态凌虐bdsm| 亚洲自拍与偷拍| 国产成人午夜精品5599| 欧美日韩国产综合一区二区三区 | 高清国产一区二区| 正在播放一区二区| 亚洲视频在线观看三级| 韩国精品一区二区| 欧美日韩精品欧美日韩精品| 亚洲日本乱码在线观看| 国产电影精品久久禁18| 精品sm在线观看| 奇米影视一区二区三区| 欧美午夜免费电影| 中文字幕中文字幕一区| 国产a级毛片一区| 欧美精品一区二区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 欧美亚洲免费在线一区| 亚洲精品久久7777| 一本大道久久a久久综合婷婷 | 日韩视频免费观看高清完整版在线观看 | 99视频在线精品| 国产精品色婷婷| 成人av网站在线| 国产精品国产三级国产aⅴ入口| 国产综合一区二区| 久久欧美一区二区| 国产精品一品二品| 亚洲国产精品传媒在线观看| 国产精品1区2区| 欧美国产精品一区二区三区| 国产成人啪午夜精品网站男同| www久久久久| 国产·精品毛片| 日韩理论片网站| 欧美性大战久久久久久久| 亚洲另类一区二区| 欧美日韩国产天堂| 秋霞影院一区二区| 欧美精品一区二区三| 国产精品一区三区| 国产精品乱人伦| 一本大道综合伊人精品热热| 亚洲h在线观看| 欧美成人a在线| 成人免费毛片嘿嘿连载视频| 亚洲欧美日韩小说| 欧美一级午夜免费电影| 国产精品一区三区| 亚洲精品国产无套在线观| 欧美一级淫片007| 国产激情91久久精品导航| 伊人婷婷欧美激情| 欧美α欧美αv大片| 成人国产在线观看| 婷婷综合在线观看| 欧美韩日一区二区三区| 欧美日韩免费观看一区三区| 国产一区二区三区在线看麻豆| 国产精品激情偷乱一区二区∴| 欧美在线观看你懂的| 国产呦精品一区二区三区网站| 亚洲手机成人高清视频| 欧美一区二区福利视频| 99精品在线观看视频| 手机精品视频在线观看| 国产精品人人做人人爽人人添| 欧美日本一道本| 成人精品一区二区三区中文字幕 | 欧美丰满少妇xxxbbb| 国产一区二区免费视频| 亚洲高清免费观看| 中文字幕一区av| 精品日产卡一卡二卡麻豆| 91在线观看视频| 国产激情精品久久久第一区二区 | 福利电影一区二区| 午夜久久电影网| 国产精品久久久久久久久图文区 | 国产剧情av麻豆香蕉精品| 亚洲电影第三页| 国产精品福利一区| 26uuuu精品一区二区| 7777女厕盗摄久久久| 色综合天天综合网天天看片 | 亚洲男同性视频| 亚洲国产高清不卡| 精品国产伦一区二区三区观看方式 | 日本特黄久久久高潮| 一区二区在线看| 亚洲欧美日韩久久| 日韩美女精品在线| 亚洲欧洲成人精品av97| 国产无遮挡一区二区三区毛片日本| 欧美一区二区视频免费观看| 欧美天天综合网| 欧美日韩在线直播| 欧美三级日韩三级| 欧美天堂亚洲电影院在线播放| 色网综合在线观看| 欧美在线观看一区| 欧美二区在线观看| 欧美一区三区二区| 日韩精品中文字幕一区二区三区| 欧美男人的天堂一二区| 337p亚洲精品色噜噜噜| 欧美一区二区黄色| 亚洲精品一区二区精华| 久久久久久亚洲综合影院红桃| 亚洲精品一区二区三区蜜桃下载 | 专区另类欧美日韩| 亚洲精品免费视频| 亚洲国产综合在线| 蜜臂av日日欢夜夜爽一区| 久久国产综合精品| 粉嫩绯色av一区二区在线观看| 成人性生交大片免费| 色噜噜狠狠一区二区三区果冻| 欧美在线999| 欧美mv和日韩mv国产网站| 国产日韩欧美精品电影三级在线| 国产午夜精品美女毛片视频| 亚洲欧洲日韩在线| 亚洲午夜成aⅴ人片| 久久激情综合网| 99视频一区二区| 欧美日韩国产小视频| 久久综合九色综合97_久久久 | 欧美日韩一区二区在线视频| 91麻豆精品国产自产在线| www国产成人免费观看视频 深夜成人网| 日本一区二区成人在线| 亚洲女同女同女同女同女同69| 污片在线观看一区二区| 国内欧美视频一区二区| 日本韩国精品一区二区在线观看| 在线不卡的av| 国产精品伦理在线| 日韩不卡在线观看日韩不卡视频| 国产高清视频一区| 欧美三级电影精品| 国产偷国产偷精品高清尤物 | 国产最新精品免费| 91国在线观看| 久久久国产午夜精品| 一区二区三区在线播放| 国产剧情一区二区| 欧美日韩成人在线| 亚洲人成伊人成综合网小说| 久久精品国产秦先生| 色婷婷综合激情|