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

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

?? mmc_sd.c

?? 我的小作品--U盤(實際是USB SD卡讀卡器) ATmega168+PDIUSBD12+SD (內含GCC源碼和原理圖)
?? C
字號:
/*************************************************************/
/*                   SD/MMC操作函數庫                        */
/*  環境WinAVR 20060421                                      */
/*  作者:Bozai(章其波)                                    */
/*  E-mail:sudazqb@163.com                                  */
/*  2006年11月26日                                           */
/*************************************************************/
/*          FAT diriver for  MiniMP3 Player                        */
/*                                                                 */
/* Platform   : AVRStudio4.12 sp4 + WinAVR20060421                 */
/*              optimize -0s                                       */
/* Author     : bozai(Zhang Qibo)                                  */
/* E-mail     : sudazqb@163.com                                    */
/* MSN        : zhangqibo_1985@hotmail.com                         */
/* Date       : 2006-12-26                                         */
/*******************************************************************/




#include <avr/io.h>
#include "MMC_SD.h"




//低速模式  //spi low speed
void SPI_Low(void)
{
	SPCR =   _BV(SPE)|_BV(MSTR)|_BV(SPR1)|_BV(SPR0);
	SPSR &= ~_BV(SPI2X);
}

//高速模式	//spi full speed
void SPI_High(void)
{
	SPCR =  _BV(SPE)|_BV(MSTR);
	SPSR |= _BV(SPI2X);
}

//端口初始化,模式初始化  //port initialize
void SPI_Init(void)
{
	DDR_INI();
	SPI_Low();
}

//寫讀一個字節			//read and write one byte
uint8 SPI_WriteByte(uint8 val)
{
	SPDR = val;
	while(!(SPSR & _BV(SPIF)));
	return SPDR;
}

/*uint8 SPI_ReadByte(void)
{
	SPDR = 0xff;
	while(!(SPSR & _BV(SPIF)));
	return SPDR;
}*/
//sd卡初始化		//sd card initialize
void MMC_SD_Init(void)
{
	SPI_Init();
	SPI_CS_Deassert();
}

//sd卡寫命令		//sd send command
uint8 MMC_SD_SendCommand(uint8 cmd, uint32 arg)
{
	uint8 r1;
	uint8 retry=0;
	
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);

	SPI_CS_Assert();
	
	SPI_WriteByte(cmd | 0x40);//分別寫入命令	//send command
	SPI_WriteByte(arg>>24);
	SPI_WriteByte(arg>>16);
	SPI_WriteByte(arg>>8);
	SPI_WriteByte(arg);
	SPI_WriteByte(0x95);
	
	while((r1 = SPI_WriteByte(0xff)) == 0xff)//等待響應,	//wait response
		if(retry++ > 100) break;//超時退出					//time out error

	SPI_CS_Deassert();

	return r1;//返回狀態值					//return state
}

//sd卡復位		//reset sd card (software)
uint8 MMC_SD_Reset(void)
{
	uint8 i;
	uint8 retry;
	uint8 r1=0;
	retry = 0;
	SPI_Low();

	do
	{
		for(i=0;i<100;i++) SPI_WriteByte(0xff);
		r1 = MMC_SD_SendCommand(0, 0);//發idle命令	//send idle command
		retry++;
		if(retry>10) return 1;//超時退出		//time out
	} while(r1 != 0x01);	


	retry = 0;
	do
	{
		r1 = MMC_SD_SendCommand(1, 0);//發active命令	//send active command
		retry++;
		if(retry>100) return 1;//超時退出		//time out
	} while(r1);
	SPI_High();
	r1 = MMC_SD_SendCommand(59, 0);//關crc		//disable CRC

	r1 = MMC_SD_SendCommand(16, 512);//設扇區大小512	//set sector size to 512
	return 0;//正常返回		//normal return
}

//讀一個扇區		//read one sector
uint8 MMC_SD_ReadSingleBlock(uint32 sector, uint8* buffer)
{
	uint8 r1;
	uint16 i;
	uint8 retry=0;

	do
	{
		r1 = MMC_SD_SendCommand(17, sector<<9);//讀命令	//read command
		retry++;
		if(retry>10) return 1;//超時退出		//time out
	} while(r1 != 0x00);	


	SPI_CS_Assert();
	//等數據的開始	//wait to start recieve data
	while(SPI_WriteByte(0xff) != 0xfe);//if(retry++ > 50){SPI_CS_Deassert();return 1;}

	for(i=0; i<512; i++)//讀512個數據	//read 512 bytes
	{
		*buffer++ = SPI_WriteByte(0xff);
	}

	SPI_WriteByte(0xff);//偽crc
	SPI_WriteByte(0xff);
	
	SPI_CS_Deassert();

	return 0;
}


//寫一個扇區		//wirite one sector //not used in this application
uint8 MMC_SD_WriteSingleBlock(uint32 sector, uint8* buffer)
{
	uint8 r1;
	uint16 i;
	uint8 retry=0;

	do
	{
		r1 = MMC_SD_SendCommand(24, sector<<9);//寫命令	//send command
		retry++;
		if(retry>10) return 1;//超時退出		//time out
	} while(r1 != 0x00);	



	SPI_CS_Assert();
	
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);

	SPI_WriteByte(0xfe);//發開始符			//send start byte
	
	for(i=0; i<512; i++)//送512字節數據		//send 512 bytes data
	{
		SPI_WriteByte(*buffer++);
	}
	
	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	
	r1 = SPI_WriteByte(0xff);
	
	if( (r1&0x1f) != 0x05)//等待是否成功	//judge if it successful
	{
		SPI_CS_Deassert();
		return r1;
	}
	//等待操作完		//wait no busy
	while(!SPI_WriteByte(0xff));//if(retry++ > 50){SPI_CS_Deassert();return 1;}

	SPI_CS_Deassert();

	return 0;
}

uint32 MMC_SD_ReadCapacity()
{
	uint8 r1;
	uint16 i;
	uint16 temp;
	uint8 buffer[16];
	uint32 Capacity;
	//uint8 retry=0;

	r1 = MMC_SD_SendCommand(9, 0);//寫命令	//send command  //READ CSD
	if(r1 != 0x00)
		return r1;

	SPI_CS_Assert();
	while(SPI_WriteByte(0xff) != 0xfe);
	
	for(i=0;i<16;i++)
	{
		buffer[i]=SPI_WriteByte(0xff);
	}	

	SPI_WriteByte(0xff);
	SPI_WriteByte(0xff);
	
	SPI_WriteByte(0xff);
	
	SPI_CS_Deassert();

/*********************************/
//	C_SIZE
	i = buffer[6]&0x03;
	i<<=8;
	i += buffer[7];
	i<<=2;
	i += ((buffer[8]&0xc0)>>6);

/**********************************/
//  C_SIZE_MULT

	r1 = buffer[9]&0x03;
	r1<<=1;
	r1 += ((buffer[10]&0x80)>>7);


/**********************************/
// BLOCKNR

	r1+=2;

	temp = 1;
	while(r1)
	{
		temp*=2;
		r1--;
	}
	
	Capacity = ((uint32)(i+1))*((uint32)temp);

/////////////////////////
// READ_BL_LEN

	i = buffer[5]&0x0f;

/*************************/
//BLOCK_LEN

	temp = 1;
	while(i)
	{
		temp*=2;
		i--;
	}
/************************/


/************** formula of the capacity ******************/
//
//  memory capacity = BLOCKNR * BLOCK_LEN
//	
//	BLOCKNR = (C_SIZE + 1)* MULT
//
//           C_SIZE_MULT+2
//	MULT = 2
//
//               READ_BL_LEN
//	BLOCK_LEN = 2
/**********************************************/

//The final result
	
	Capacity *= (uint32)temp;	 
	return Capacity;		
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本乱码高清不卡字幕| 久久人人97超碰com| 日韩精品一区二区三区中文不卡 | 欧美一级淫片007| 中文字幕成人在线观看| 日韩电影免费在线看| 色综合天天做天天爱| 国产日韩精品一区二区三区| 五月婷婷综合激情| 一本色道久久综合亚洲91| 国产午夜精品美女毛片视频| 日韩国产精品久久| 91成人免费在线| 国产精品福利一区| 成人丝袜视频网| 久久久久国产精品人| 免费在线成人网| 欧美男人的天堂一二区| 亚洲精品免费视频| bt欧美亚洲午夜电影天堂| 精品国产一区久久| 精品一区二区三区影院在线午夜| 欧美精品xxxxbbbb| 亚洲一区二区欧美日韩| 日本电影欧美片| 蜜臂av日日欢夜夜爽一区| 色欲综合视频天天天| 亚洲天堂成人在线观看| 成人精品一区二区三区四区| 日本一区二区免费在线| 国产成人av电影| 国产日产精品一区| 风间由美性色一区二区三区| 国产日韩欧美a| 不卡在线观看av| 亚洲欧洲另类国产综合| 97久久精品人人做人人爽| 亚洲视频一二区| 色噜噜夜夜夜综合网| 亚洲综合色视频| 欧美日本一区二区三区四区| 图片区小说区区亚洲影院| 在线综合亚洲欧美在线视频| 青青国产91久久久久久| 久久久久久久久久久99999| 国产精品一区在线观看你懂的| 久久久蜜桃精品| av一区二区三区四区| 亚洲色图视频免费播放| 精品视频1区2区| 久久97超碰色| 一区免费观看视频| 欧美日韩三级视频| 精彩视频一区二区三区| 国产精品九色蝌蚪自拍| 欧美影片第一页| 久久99久久久久| 国产精品理论片在线观看| 欧美视频你懂的| 美女性感视频久久| 中文字幕乱码日本亚洲一区二区| 在线免费观看日本欧美| 久久国产精品72免费观看| 国产精品久线在线观看| 欧美日韩你懂得| 成人综合在线网站| 日韩和欧美的一区| 国产精品久久久久久福利一牛影视| 欧美综合一区二区三区| 黄一区二区三区| 一区二区三区在线视频免费观看| 日韩欧美成人午夜| 色8久久精品久久久久久蜜| 久久99精品一区二区三区三区| 亚洲色图色小说| 久久亚区不卡日本| 在线观看国产精品网站| 国产一区二区伦理片| 亚洲国产欧美一区二区三区丁香婷| 久久久综合网站| 欧美精品丝袜中出| 91在线视频免费91| 国产一区二区在线影院| 亚洲一区欧美一区| 国产精品久久久一本精品| 日韩欧美专区在线| 欧美午夜免费电影| 99国产欧美另类久久久精品| 国内精品不卡在线| 日本成人中文字幕| 亚洲欧美国产高清| 日本一区二区三区dvd视频在线| 91麻豆精品久久久久蜜臀| 91久久精品日日躁夜夜躁欧美| 国产一区福利在线| 黑人巨大精品欧美黑白配亚洲| 视频一区二区三区在线| 夜夜精品视频一区二区| 亚洲视频一二三区| 国产精品久久久99| 国产日产欧美一区二区视频| 精品国产精品网麻豆系列| 在线播放一区二区三区| 欧美日韩精品欧美日韩精品一综合 | 国产寡妇亲子伦一区二区| 老司机免费视频一区二区| 日韩精品国产欧美| 日本伊人精品一区二区三区观看方式 | 欧美在线视频你懂得| 一本到不卡免费一区二区| 99热这里都是精品| 91九色02白丝porn| 欧美日韩日本视频| 宅男在线国产精品| 精品捆绑美女sm三区| 精品av久久707| 久久嫩草精品久久久久| 国产日韩三级在线| 日韩一区欧美小说| 亚洲乱码精品一二三四区日韩在线| 国产精品久久久久毛片软件| 中文字幕制服丝袜成人av| 国产精品久久久久久久久搜平片| 欧美激情一区在线观看| 一区在线中文字幕| 亚洲综合网站在线观看| 亚洲成a人v欧美综合天堂| 日本美女一区二区三区| 国产米奇在线777精品观看| 国产91对白在线观看九色| 91在线丨porny丨国产| 欧美伦理影视网| xf在线a精品一区二区视频网站| 久久蜜桃av一区精品变态类天堂 | 99在线精品视频| 欧美色综合久久| 日韩写真欧美这视频| 久久久久九九视频| 一区二区三区91| 久久99热99| 日本高清无吗v一区| 精品国精品自拍自在线| 亚洲人成影院在线观看| 日韩主播视频在线| 成人理论电影网| 欧美三级乱人伦电影| 精品国产免费久久| 亚洲日本护士毛茸茸| 蜜臀av性久久久久蜜臀aⅴ| 高清国产一区二区| 欧美老女人在线| 国产精品久久久久永久免费观看 | 亚洲精品成人天堂一二三| 日本一区中文字幕| 波多野结衣中文字幕一区二区三区| 欧美日韩亚洲不卡| 国产欧美一区二区精品性| 亚洲第一电影网| 不卡区在线中文字幕| 精品粉嫩超白一线天av| 亚洲欧美偷拍三级| 国产精品资源网| 欧美精品123区| 亚洲色图清纯唯美| 国产成人av电影在线| 欧美一级专区免费大片| 亚洲一区二区三区四区五区中文| 国产乱人伦偷精品视频免下载| 欧美精品tushy高清| 亚洲精品中文在线| 国产91露脸合集magnet| 精品国产一区二区三区忘忧草 | 亚洲色图清纯唯美| 国产成都精品91一区二区三| 在线成人av网站| 亚洲成人动漫av| 在线免费观看一区| 亚洲你懂的在线视频| 成人高清视频免费观看| 日本一区二区三区在线观看| 青青草成人在线观看| 欧美日韩一区二区三区四区五区| 亚洲欧洲99久久| 不卡的av中国片| 亚洲欧美一区二区在线观看| 国产成人精品亚洲777人妖| 久久综合av免费| 九九九久久久精品| 日韩欧美高清在线| 免费成人性网站| 91精品啪在线观看国产60岁| 亚洲成人一二三| 欧美在线一二三四区| 一区二区三区日韩精品| 在线观看日韩电影| 亚洲一区二区三区三| 欧美色欧美亚洲另类二区| 亚洲国产日韩在线一区模特| 欧美手机在线视频| 爽好久久久欧美精品|