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

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

?? sd.c

?? avr+TFT+SD卡實現數碼相框功能
?? C
字號:
//*****************************************************************************
//
// File Name	: 'sd.c'
// Title		: SD Flash Card Interface
// Author		: Andy Zhu - Copyright (C) 2008.7
// Created		: 2008.07.20
// Revised		: 2008.07.20
// Version		: 0.1
// Target MCU	: Atmel AVR mega128
//
//*****************************************************************************
#include <avr/io.h>
#include <stdint.h>
#include "sd.h"
#include "spi.h"


//CID_Reg *pCID;
//pCID = &SD_CID_infor;
//-----------------------------------
void SD_Init(void)
{
	
	SPI_init();
	SD_CS_PORT |= (1<<SD_CS_PIN);	//cs=1
	SD_CS_DDR |= (1<<SD_CS_PIN);	//cs pin output	
}
//------------------------------------
uint8_t SD_Reset(void)
{
	uint8_t retry = 0;
	uint8_t temp ,i;

	for (i=0; i<12; i++)
	{
		spiTransferByte(0xFF);
	}
	do
	{
		temp = SD_SendCommand(SD_GO_IDLE_STATE, 0);
		retry++;
		if(retry>200)
		{
			return ERROR;
		}
	}while(temp != SD_R1_IDLE_STATE);

	retry = 0;
	do
	{
		// initializing card for operation
		temp = SD_SendCommand(SD_SEND_OP_COND, 0);
		
		retry++;	// do retry counter
		if(retry>100) return ERROR;		
	}while(temp);
	return 0;	//初始化成功,返回0
}
//------------------------------------
uint8_t SD_SendCommand(uint8_t cmd, uint32_t arg)
{
	uint8_t temp;

	spiTransferByte(0xff);

	// assert chip select
	SD_CS_SELECT();

	// issue the command
	temp = SD_Command(cmd, arg);

	// release chip select
	SD_CS_RELEASE();

	spiTransferByte(0xff);	// extra 8 CLK
	return temp;
}

//--------------------------------------------
uint8_t SD_Command(uint8_t cmd, uint32_t arg)
{
	uint8_t temp;
	uint8_t retry=0;

	// send command,every command is 6 bytes long
	//|<---BYTE1---->|<------BYTE2~5------>|<----BYTE6------>|
	//|7 6|5        0|31                  0|7             1|0|
	//|0 1|-COMMAND--|---Command Argument--|----- CRC------|1|

	spiTransferByte(cmd | 0x40);	//send command
	spiTransferByte(arg>>24);
	spiTransferByte(arg>>16);
	spiTransferByte(arg>>8);
	spiTransferByte(arg);
	spiTransferByte(0x95);			//crc valid only for SD_GO_IDLE_STATE

	// end command
	// wait for response
	// if more than 8 retries, card has timed-out
	// return the received 0xFF
	while((temp = spiTransferByte(0xff)) == 0xff)
		if(retry++ > 8) break;

	// return response
	return temp;
}
//-------------------------------------------

uint8_t Read_SD_Reg(uint8_t *buffer,uint8_t CMD,uint8_t length)
{
	uint8_t temp,i;
	uint8_t retry;

	retry = 0;
	spiTransferByte(0xff);

	// assert chip select
	SD_CS_SELECT();
	do
	{
		temp = SD_Command(CMD, 0);	//read CID Register
		//temp = SD_Command(SD_SEND_CSD, 0);
		retry++;
		if (retry >200)
		{
		 	SD_CS_RELEASE();
			return ERROR;
		}
	}while(temp != 0x00);
	//--------------------------------
	if (CMD == SD_APP_CMD)
	{
		return 0;
	}
	//-------------------------------
	if (CMD != SD_READ_OCR)
		while((temp = spiTransferByte(0xff)) != 0xfe);	//wait for start byte

	for (i=0; i<length ;i++)
   	{
      	*buffer++ = spiTransferByte(0xff);
   	}
   	temp = spiTransferByte(0xff);	//crc1
   	temp = spiTransferByte(0xff);	//crc0

	// release chip select
	SD_CS_RELEASE();

	spiTransferByte(0xff);	// extra 8 CLK
	return 0;
}

uint8_t SD_ReadSingleBlock(uint32_t sector, uint8_t *buffer)
{
	uint16_t retry,i;
	uint8_t temp;
	retry = 0;
	spiTransferByte(0xff);

	// assert chip select
	SD_CS_SELECT();
	do
	{
		temp = SD_Command(SD_READ_SINGLE_BLOCK, (sector << 9));	//read singblock
		retry++;
		if (retry >200)
		{
		 	SD_CS_RELEASE();
			return ERROR;
		}
	}while(temp != 0x00);	//讀到正確的回應

	retry = 0;
	while((temp = spiTransferByte(0xff)) != 0xfe)	//wait for start byte
	{
		if (retry++ >= 200)
		{
			SD_CS_RELEASE();
			return ERROR;
		}
	}

	for (i=0; i<512 ;i++)
   	{
      	*buffer++ = spiTransferByte(0xff);
	}
   	temp = spiTransferByte(0xff);	//crc1
   	temp = spiTransferByte(0xff);	//crc0

	// release chip select
	SD_CS_RELEASE();

	spiTransferByte(0xff);	// extra 8 CLK
	return 0;
}

//-----------------------------------------

void Get_SD_card_CID_Infor(unsigned char *tag_buf)
{
	SD_CID_infor.MID = tag_buf[0];
	SD_CID_infor.OID |= tag_buf[1];
	SD_CID_infor.OID <<= 8;
	SD_CID_infor.OID |= tag_buf[2];
	SD_CID_infor.PNM[0] = tag_buf[3];
	SD_CID_infor.PNM[1] = tag_buf[4];
	SD_CID_infor.PNM[2] = tag_buf[5];
	SD_CID_infor.PNM[3] = tag_buf[6];
	SD_CID_infor.PNM[4] = tag_buf[7];
	SD_CID_infor.PRV = tag_buf[8];
	SD_CID_infor.PSN[0] = tag_buf[9];
	SD_CID_infor.PSN[1] = tag_buf[10];
	SD_CID_infor.PSN[2] = tag_buf[11];
	SD_CID_infor.PSN[3] = tag_buf[12];
	SD_CID_infor.MDT |= tag_buf[13];
	SD_CID_infor.MDT <<= 8;
	SD_CID_infor.MDT |= tag_buf[14];
	SD_CID_infor.CID_CRC7 = tag_buf[15] & 0XFE;
}
//------------------------------------------
void Get_SD_card_CSD_Infor(unsigned char *tag_buf)
{
	SD_CSD_infor.CSD_STRUCTURE = tag_buf[0] >> 6;
	SD_CSD_infor.TAAC = tag_buf[1];
	SD_CSD_infor.NSAC = tag_buf[2];
	SD_CSD_infor.TRAN_SPEED = tag_buf[3];
	SD_CSD_infor.CCC |= tag_buf[4];
	SD_CSD_infor.CCC <<= 4;
	SD_CSD_infor.CCC |= (tag_buf[5] & 0XF0) >> 4;
	SD_CSD_infor.READ_BL_LEN = tag_buf[5] & 0X0F;
	SD_CSD_infor.READ_BL_PARTIAL = (tag_buf[6] & 0X80) >> 7;
	SD_CSD_infor.WRITE_BLK_MISALIGN = (tag_buf[6] & 0X40) >> 6;
	SD_CSD_infor.READ_BLK_MISALIGN = (tag_buf[6] & 0X20) >> 5;
	SD_CSD_infor.DSR_IMP = (tag_buf[6] & 0X10) >> 4;
	SD_CSD_infor.C_SIZE |= tag_buf[6];
	SD_CSD_infor.C_SIZE <<= 8;
	SD_CSD_infor.C_SIZE |= tag_buf[7];
	SD_CSD_infor.C_SIZE <<= 2;
	SD_CSD_infor.C_SIZE |= (tag_buf[8] >> 6) & 0x03;
	SD_CSD_infor.C_SIZE &= 0x0fff;
	SD_CSD_infor.VDD_R_CURR_MIN = (tag_buf[8] & 0x3f) >> 3;
	SD_CSD_infor.VDD_R_CURR_MAX = tag_buf[8] & 0x07;
	SD_CSD_infor.VDD_W_CURR_MIN = (tag_buf[9] & 0xe0) >> 5;
	SD_CSD_infor.VDD_W_CURR_MAX = (tag_buf[9] & 0x1f) >> 2;
	SD_CSD_infor.C_SIZE_MULT = (tag_buf[9] & 0x03) << 1;
	SD_CSD_infor.C_SIZE_MULT |= (tag_buf[10] & 0x80) >> 7;
	SD_CSD_infor.ERASE_BLK_EN = (tag_buf[10] & 0x40) >> 6;
	SD_CSD_infor.SECTOR_SIZE = (tag_buf[10] & 0x3f) << 1;
	SD_CSD_infor.SECTOR_SIZE |= (tag_buf[11] & 0x80) >> 7;
	SD_CSD_infor.WP_GRP_SIZE = tag_buf[11] & 0x7f;
	SD_CSD_infor.WP_GRP_ENABLE = (tag_buf[12] & 0x80) >> 7;
	SD_CSD_infor.R2W_FACTOR = (tag_buf[12] & 0x1f) >> 2;
	SD_CSD_infor.WRITE_BL_LEN = (tag_buf[12] & 0x03) << 2;
	SD_CSD_infor.WRITE_BL_LEN |= (tag_buf[13] & 0xc0) >> 6;
	SD_CSD_infor.WRITE_BL_PARTIAL = (tag_buf[13] & 0x20) >> 5;
	SD_CSD_infor.FILE_FORMAT_GRP = (tag_buf[14] & 0x80) >> 7;
	SD_CSD_infor.COPY = (tag_buf[14] & 0x40) >> 6;
	SD_CSD_infor.PERM_WRITE_PROTECT = (tag_buf[14] & 0x20) >> 5;
	SD_CSD_infor.TMP_WRITE_PROTECT = (tag_buf[14] & 0x10) >> 4;
	SD_CSD_infor.FILE_FORMAT = (tag_buf[14] & 0x0c) >> 2;
	SD_CSD_infor.CSD_CRC7 = tag_buf[15] & 0XFE;
}
//------------------------------------------
void Get_SD_card_OCR_Infor(unsigned char *tag_buf)
{
	SD_OCR_infor.OCR_3 = tag_buf[0];
	SD_OCR_infor.OCR_2 = tag_buf[1];
	SD_OCR_infor.OCR_1 = tag_buf[2];
	SD_OCR_infor.OCR_0 = tag_buf[3];
}
//-------------------------------------------
void Get_SD_card_SCR_Infor(unsigned char *tag_buf)
{
	SD_SCR_infor.SCR_STRUCTURE = (tag_buf[0] & 0Xf0) >> 4;
	SD_SCR_infor.SD_SPEC = tag_buf[0] & 0x0f;
	SD_SCR_infor.DATA_STAT_AFTER_ERASE = (tag_buf[1] & 0X80) >> 7;
	SD_SCR_infor.SD_SECURITY = (tag_buf[1] & 0X70) >> 4;
	SD_SCR_infor.SD_BUS_WIDTHS = tag_buf[1] & 0X0f;
}
//-------------------------------------------
void Get_SD_card_Volume_Infor(void)
{
	SD_CAPACITY_infor.Capacity = (((unsigned long int)SD_CSD_infor.C_SIZE+1) \
	<< (SD_CSD_infor.READ_BL_LEN + 2)) << SD_CSD_infor.C_SIZE_MULT;
	SD_CAPACITY_infor.size_MB = (unsigned int)(SD_CAPACITY_infor.Capacity >> 20);
}
//---------------------------------------------





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片基地黄久久久久久天堂| 亚洲免费在线视频| 精品一区二区三区免费视频| 日韩精品中文字幕在线一区| 九九视频精品免费| 久久婷婷成人综合色| 成人免费黄色大片| 亚洲黄色片在线观看| 欧美一区二区私人影院日本| 久久99久久99精品免视看婷婷 | 国产精品污网站| 91免费视频网| 免费成人在线观看| 久久久精品一品道一区| 99免费精品视频| 亚洲国产欧美日韩另类综合| 日韩欧美一区二区久久婷婷| 国产v综合v亚洲欧| 亚洲综合在线视频| 欧美成人video| 91免费国产视频网站| 日韩高清国产一区在线| 国产日产精品一区| 欧美日韩免费电影| 国产成人免费在线视频| 亚洲mv在线观看| 久久九九久精品国产免费直播| 在线免费观看一区| 麻豆国产91在线播放| 亚洲欧美中日韩| 日韩欧美色综合网站| 成人精品亚洲人成在线| 亚洲成av人片一区二区三区| 欧美激情艳妇裸体舞| 欧美日韩国产一区二区三区地区| 国产老肥熟一区二区三区| 一区二区三区日韩在线观看| 精品对白一区国产伦| 欧美午夜精品久久久| 成人国产电影网| 久久精品二区亚洲w码| 亚洲一区二区三区在线| 国产情人综合久久777777| 欧美视频一二三区| 99综合影院在线| 精品一区二区三区久久久| 亚洲激情中文1区| 国产三区在线成人av| 欧美一区二区视频观看视频| 日本道色综合久久| 成人动漫av在线| 国内不卡的二区三区中文字幕 | 一区二区三区色| 中日韩免费视频中文字幕| 日韩免费观看高清完整版在线观看| 色94色欧美sute亚洲13| 成人一区二区视频| 国产精一区二区三区| 狠狠色丁香久久婷婷综| 蜜桃一区二区三区在线观看| 天天免费综合色| 亚洲主播在线播放| 一区二区三区中文字幕电影 | 亚洲午夜私人影院| 亚洲精品成a人| 亚洲美女屁股眼交| ㊣最新国产の精品bt伙计久久| 国产视频一区不卡| 久久精品视频免费| 久久精品一区四区| 亚洲国产高清在线观看视频| 日本一区二区三级电影在线观看 | 一区二区在线观看视频在线观看| 中文一区一区三区高中清不卡| 久久午夜电影网| 国产欧美日韩三级| 国产欧美精品在线观看| 日本一区二区不卡视频| 亚洲国产精品av| 亚洲色图清纯唯美| 有码一区二区三区| 亚洲大片一区二区三区| 日韩不卡一区二区三区| 美女性感视频久久| 国产乱子伦一区二区三区国色天香| 激情五月激情综合网| 国产在线不卡视频| 丁香网亚洲国际| 99re8在线精品视频免费播放| 不卡的看片网站| 91在线观看美女| 欧美亚洲动漫另类| 日韩一区二区电影网| 精品动漫一区二区三区在线观看| 国产亚洲欧美一区在线观看| 国产精品女同互慰在线看 | 亚洲观看高清完整版在线观看| 亚洲午夜激情av| 久久国产精品72免费观看| 国产麻豆视频精品| 色综合天天综合网国产成人综合天| 欧美在线免费观看亚洲| 日韩视频免费观看高清完整版在线观看| 精品国精品自拍自在线| 中文字幕一区二区三| 日日夜夜一区二区| 国产盗摄视频一区二区三区| 91福利小视频| 精品久久久三级丝袜| 国产精品视频看| 五月天视频一区| 国产乱码字幕精品高清av| 色欧美88888久久久久久影院| 91精品综合久久久久久| 中文字幕不卡一区| 日韩精品福利网| 成人免费毛片片v| 欧美一级欧美三级在线观看| 成人欧美一区二区三区小说| 日本不卡中文字幕| 99久久婷婷国产综合精品电影| 欧美日韩一级二级| 国产亚洲成aⅴ人片在线观看 | 欧美日韩午夜在线| 国产色产综合产在线视频| 亚洲bt欧美bt精品| av亚洲产国偷v产偷v自拍| 日韩一级在线观看| 亚洲免费毛片网站| 粉嫩久久99精品久久久久久夜| 欧美日韩在线三级| 亚洲婷婷综合色高清在线| 精品一区二区三区欧美| 欧美日韩黄色一区二区| 中文字幕五月欧美| 久久99最新地址| 欧美麻豆精品久久久久久| 国产精品激情偷乱一区二区∴| 精品午夜久久福利影院| 欧美蜜桃一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 欧美日韩视频在线一区二区| 中文字幕在线不卡一区二区三区| 国产一区二区精品久久99| 欧美肥妇bbw| 亚洲国产精品久久人人爱蜜臀| 成人免费黄色大片| 国产欧美综合在线| 国产很黄免费观看久久| 欧美电影免费观看高清完整版在线观看| 亚洲一区影音先锋| 色综合久久久久综合体 | 一区二区三区不卡视频在线观看| 成人免费视频免费观看| 日本一区二区三区电影| 国产成人aaaa| 国产网站一区二区| 国产精品夜夜爽| 久久精品一区二区三区不卡| 国产乱子伦视频一区二区三区| 欧美精品一区男女天堂| 精品中文字幕一区二区小辣椒| 欧美一区二区视频观看视频| 青青草一区二区三区| 欧美一二三区在线观看| 青青草97国产精品免费观看无弹窗版 | 蜜桃精品视频在线| 91精品免费观看| 男男gaygay亚洲| 欧美不卡在线视频| 久久99国产精品久久| 久久免费看少妇高潮| 国产精品91一区二区| 日本一区二区三区电影| aaa国产一区| 亚洲专区一二三| 91精品午夜视频| 国产一区二区看久久| 国产精品麻豆欧美日韩ww| 99视频精品在线| 亚洲一区二区三区四区五区中文| 欧美日韩电影一区| 黄色资源网久久资源365| 国产欧美日韩在线看| 色视频成人在线观看免| 日韩国产在线观看一区| 精品不卡在线视频| 成人午夜激情片| 亚洲永久免费视频| 日韩精品一区二区三区视频在线观看 | 波多野结衣亚洲一区| 一区二区三区色| 日韩欧美亚洲国产精品字幕久久久| 国产一区二区久久| 亚洲精品精品亚洲| 日韩欧美一二区| 99久久精品国产一区| 天堂资源在线中文精品| 国产人妖乱国产精品人妖| 在线观看免费亚洲|