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

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

?? mmc_sd.c

?? U盤(實際是USB SD卡讀卡器)的制作方案。 硬件構成:ATmega168+PDIUSBD12+SD 內附GCC源碼和原理圖。 開發環境是AvrStudio4.13 b528 + WinAVR
?? 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<<=2;
	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[6]&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一区二区三区免费野_久草精品视频
99视频在线精品| 激情伊人五月天久久综合| 26uuu精品一区二区| 欧美高清视频不卡网| 在线观看日韩精品| 日韩午夜在线观看| 欧美一三区三区四区免费在线看| 色琪琪一区二区三区亚洲区| 色噜噜偷拍精品综合在线| 成人高清免费观看| 99久久99精品久久久久久| 99re66热这里只有精品3直播 | 亚洲第一av色| 亚洲一区二区三区爽爽爽爽爽| 一区二区成人在线观看| 亚洲国产综合色| 午夜激情综合网| 美女高潮久久久| 国产mv日韩mv欧美| 一本色道a无线码一区v| 欧美日韩在线一区二区| 欧美一卡二卡在线| 久久精品欧美日韩| 亚洲丝袜精品丝袜在线| 婷婷中文字幕一区三区| 免费在线视频一区| 国产成人免费高清| 在线观看一区二区视频| 国产日产精品1区| 中文字幕欧美激情| 亚洲综合色噜噜狠狠| 免费精品视频最新在线| 成人激情图片网| 欧美日韩中文一区| 国产欧美一区二区精品性| 一区二区三区欧美在线观看| 日韩福利视频导航| 91美女片黄在线观看| 日韩一区二区不卡| 一区二区中文视频| 青青草91视频| 99国产精品久久久久久久久久久| 欧美日本一区二区三区| 国产女人水真多18毛片18精品视频 | 91蜜桃传媒精品久久久一区二区| 欧美高清视频在线高清观看mv色露露十八 | 欧美美女直播网站| 在线亚洲欧美专区二区| 91精品国产综合久久久久久久| 久久综合网色—综合色88| 综合色天天鬼久久鬼色| 久久99国产精品久久99果冻传媒| 成人a区在线观看| 欧美一级午夜免费电影| 亚洲天堂福利av| 国产一区二区精品在线观看| 在线观看视频一区二区| 中文字幕av在线一区二区三区| 一区二区三区日韩欧美| 99久久亚洲一区二区三区青草| 欧美一区二区三区免费视频| 亚洲另类春色国产| 福利一区二区在线| 精品剧情在线观看| 日韩国产一二三区| 欧美色图天堂网| 一区二区三区四区激情| 白白色亚洲国产精品| 国产亚洲精品精华液| 国内精品国产成人| 精品国产麻豆免费人成网站| 日韩高清中文字幕一区| 91麻豆精品国产91久久久久久久久 | 亚洲一二三四区不卡| 成人国产精品免费观看动漫| 久久久久久久网| 国产乱妇无码大片在线观看| 精品免费视频一区二区| 久久爱另类一区二区小说| 日韩一区二区三区观看| 奇米影视7777精品一区二区| 日韩一区二区三区在线视频| 免费黄网站欧美| 欧美成人福利视频| 国产在线播放一区| 久久在线免费观看| 高清在线观看日韩| 国产精品久久久久桃色tv| 成人精品免费网站| 亚洲免费在线视频一区 二区| 色综合久久综合网| 亚洲一区二区高清| 欧美肥胖老妇做爰| 国产一区二区三区av电影| 精品国产乱码久久久久久老虎| 国产在线不卡一卡二卡三卡四卡| 国产亚洲综合av| 91九色最新地址| 日韩av成人高清| 久久九九全国免费| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲一区二区在线播放相泽| 日韩欧美在线综合网| 国产在线一区二区综合免费视频| 欧美高清在线一区二区| 91福利视频网站| 精一区二区三区| 亚洲乱码日产精品bd| 欧美一区在线视频| www.亚洲在线| 美女视频黄 久久| 中文字幕亚洲一区二区av在线| 欧美亚洲一区二区三区四区| 久久99精品久久久久婷婷| 国产精品不卡视频| 日韩欧美二区三区| 在线一区二区视频| 国产精品小仙女| 精品一区二区免费| 亚洲国产一区二区在线播放| 精品国产凹凸成av人导航| 色婷婷国产精品久久包臀| 麻豆精品久久精品色综合| 亚洲欧美日韩中文字幕一区二区三区 | 国产成人在线视频网址| 亚洲最色的网站| 欧美极品少妇xxxxⅹ高跟鞋| 制服.丝袜.亚洲.另类.中文| 成人黄色在线网站| 麻豆精品新av中文字幕| 亚洲国产另类av| 中文字幕视频一区| 久久亚区不卡日本| 91精品国产麻豆| 欧美三级中文字幕在线观看| 99久久精品一区二区| 国产成a人无v码亚洲福利| 亚洲成人在线网站| 一区二区三区四区亚洲| 亚洲人成影院在线观看| 国产欧美精品日韩区二区麻豆天美| 日韩欧美电影在线| 91精品国产高清一区二区三区| 欧美在线免费播放| 色老综合老女人久久久| 91免费观看视频| 色一情一乱一乱一91av| 成人黄色免费短视频| 成人精品小蝌蚪| 成人免费av网站| 成人国产精品免费网站| 99久久精品国产一区| 91丨porny丨蝌蚪视频| 99久久er热在这里只有精品15| 国产精品18久久久久久久久久久久 | 天天爽夜夜爽夜夜爽精品视频| 亚洲最大成人网4388xx| 一区二区国产盗摄色噜噜| 一区二区三区四区国产精品| 亚洲综合色视频| 婷婷激情综合网| 免费黄网站欧美| 国产精品综合网| 成人综合婷婷国产精品久久 | 欧美酷刑日本凌虐凌虐| 欧美视频完全免费看| 欧美午夜精品一区二区蜜桃| 欧美片在线播放| 精品福利av导航| 国产亚洲人成网站| 中文字幕一区二区三区视频| 亚洲男同1069视频| 图片区日韩欧美亚洲| 久久精品国产亚洲一区二区三区| 国产伦精一区二区三区| av福利精品导航| 欧美日韩三级一区二区| 日韩精品最新网址| 亚洲欧美综合另类在线卡通| 亚洲成av人片在线观看| 久久精品国产成人一区二区三区 | 麻豆成人综合网| 国产精品小仙女| 色婷婷激情久久| 日韩欧美第一区| 亚洲男女一区二区三区| 久国产精品韩国三级视频| 成人国产精品视频| 欧美放荡的少妇| 国产精品三级久久久久三级| 亚洲国产美女搞黄色| 国产不卡在线视频| 欧美美女黄视频| 国产精品久久久久婷婷| 免费高清成人在线| 在线一区二区三区四区五区| 精品久久人人做人人爰| 亚洲午夜精品一区二区三区他趣| 国产精品一区二区免费不卡| 欧美日韩一区视频|