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

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

?? sd.h

?? 本源碼是C51驅動SD卡的實例
?? H
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************************
//------------------ MMC/SD-Card Reading and Writing implementation -------------------
//FileName     : mmc.c
//Function     : Connect STC51 to MMC/SD 
//Created by   : ZHENNAN.YU
//Created date : 10/12/2007
//Version      : V1.2
//Last Modified: 19/08/2005
//Filesystem   : Read or Write MMC without any filesystem

//CopyRight (c) 2007 ZHENNAN.YU
//Email: yzn07@yahoo.com.cn
****************************************************************************************/
sbit SPI_DI =P1^1;
sbit SPI_DO =P1^3;
sbit SPI_SCL=P1^2;
sbit SPI_CS =P1^0;
sbit SPI_BY =P1^4;

//------------------------------------------------------------
// Error define
//-------------------------------------------------------------
#define INIT_CMD0_ERROR     0x01
#define INIT_CMD1_ERROR		0x02
#define WRITE_BLOCK_ERROR	0x03
#define READ_BLOCK_ERROR   	0x04 
//-------------------------------------------------------------

// data type
//-------------------------------------------------------------   
// this structure holds info on the MMC card currently inserted 

typedef struct MMC_VOLUME_INFO
{ //MMC/SD Card info
  unsigned int  size_MB;
  unsigned char sector_multiply;
  unsigned int  sector_count;
  unsigned char name[6];
} VOLUME_INFO_TYPE; 

typedef struct STORE 
{ 
  unsigned char dat[100]; 
} BUFFER_TYPE; //256 bytes, 128 words

BUFFER_TYPE sectorBuffer; //512 bytes for sector buffer

//--------------------------------------------------------------
unsigned int  readPos=0;
unsigned char sectorPos=0;
unsigned char LBA_Opened=0; //Set to 1 when a sector is opened.
unsigned char Init_Flag;    //Set it to 1 when Init is processing.
//---------------------------------------------------------------

void delay(unsigned int time)
{
 while(time--);
}

//****************************************************************************
// Port Init
void MMC_Port_Init()
//****************************************************************************
{
   SPI_SCL=1;
   SPI_DO =1;
   SPI_CS=1;
   send_s("Port Init!");
/*
   //Config ports 
   SPI_DI=1;          //Set Pin MMC_DI as Input
   SPI_SCL=1;         //Set Pin MMC_Clock as Output
   SPI_DO=1;          //Set Pin MMC_DO as Output
   SPI_CS=1;          //Set MMC_Chip_Select to High,MMC/SD Invalid.
   //busy led port init
   //SPI_BY=1;        //Set spi busy led port output
   //MMC_BUSY_LED=1;                      //busy led off     
   */               
}

//****************************************************************************
//Routine for sending a byte to MMC/SD-Card
void Write_Byte_MMC(unsigned char value)
//****************************************************************************
{ 
   unsigned char i; 
   
   SPI_BY=0; 
   //Software SPI
   for (i=0;i<8;i++) 
   {  //write a byte
      if (((value>>(7-i))&0x01)==0x01) 
	   SPI_DI=1; //Send bit by bit(MSB First)
      else SPI_DI=0;
       SPI_SCL=0; //set Clock Impuls low
      if(Init_Flag) 
	   delay(8); 
      SPI_SCL=1; //set Clock Impuls High
      if(Init_Flag) 
	   delay(8);     
   }//write a byte
   //MMC_BUSY_LED=1;
}

//****************************************************************************
//Routine for reading a byte from MMC/SD-Card
unsigned char Read_Byte_MMC()
//****************************************************************************
{ 
   unsigned char temp=0;
   unsigned char i;

   SPI_BY=0;
   //Software SPI
   for (i=0;i<8;i++) //MSB First
   {
      SPI_DO=1;
      SPI_SCL=0; //Clock Impuls (Low)
      if(Init_Flag)
	   delay(8);
      temp=(temp<<1)+(unsigned char)SPI_DO; //read mmc data out pin 
      SPI_SCL=1; //set Clock Impuls High
      if(Init_Flag) 
	   delay(8);	
   }
   SPI_BY=1;
   return (temp);
}

//****************************************************************************
//Send a Command to MMC/SD-Card
//Return: the second byte of response register of MMC/SD-Card
unsigned char Write_Command_MMC(unsigned char *CMD)
//****************************************************************************
{
   unsigned char tmp;
   unsigned char retry=0;
   unsigned char i;

   //set MMC_Chip_Select to high (MMC/SD-Card disable) 
   SPI_CS=1;
   //send 8 Clock Impulse
   Write_Byte_MMC(0xFF);
   //set MMC_Chip_Select to low (MMC/SD-Card active)
   SPI_CS=0;

   //send 6 Byte Command to MMC/SD-Card
   for (i=0;i<0x06;i++) 
   { 
      Write_Byte_MMC(*CMD++);
   }
   
   //get 16 bit response
   Read_Byte_MMC(); //read the first byte,ignore it. 
   do 
   {  //Only last 8 bit is used here.Read it out. 
      tmp = Read_Byte_MMC();
      retry++;
   }
   while((tmp==0xff)&&(retry<100)); 
   return(tmp);
}

//****************************************************************************
//Routine for Init MMC/SD card(SPI-MODE)
unsigned char MMC_Init()
//****************************************************************************
{  
   unsigned char retry,temp;
   unsigned char i;
   unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
   send_s("SD CARD Init!");
   MMC_Port_Init(); //Init SPI port  

   delay(200);
   
   Init_Flag=1; //Set the init flag

   for (i=0;i<0x0f;i++) 
   {
      Write_Byte_MMC(0xff); //send 74 clock at least!!!
   }
	
   //Send Command CMD0 to MMC/SD Card
   send_s("Send Command CMD0 to MMC/SD Card");
   retry=0;
   do
   { //retry 200 times to send CMD0 command 
     temp=Write_Command_MMC(CMD);
     retry++;
     if(retry==200) 
     { //time out
       return(INIT_CMD0_ERROR);//CMD0 Error!
     }
   } 
   while(temp!=1);
   
   //Send Command CMD1 to MMC/SD-Card
   send_s("Send Command CMD1 to MMC/SD-Card");
   CMD[0] = 0x41; //Command 1
   CMD[5] = 0xFF;
   retry=0;
   do
   { //retry 100 times to send CMD1 command 
     temp=Write_Command_MMC(CMD);
     retry++;
     if(retry==100) 
     { //time out
       return(INIT_CMD1_ERROR);//CMD1 Error!
     }
   } 
   while(temp!=0);
   
   Init_Flag=0; //Init is completed,clear the flag 
   
   SPI_CS=1;  //set MMC_Chip_Select to high 
   send_s("SD CARD Init Suc!!");
   return(0x55); //All commands have been taken.
} 

//****************************************************************************
//Routine for reading data Registers of MMC/SD-Card
//Return 0 if no Error.
unsigned char MMC_Read_Block(unsigned char *CMD,unsigned char *Buffer,unsigned int Bytes)
//****************************************************************************
{  
   unsigned int i; 
   unsigned retry,temp;
    
   //Send Command CMD to MMC/SD-Card
   retry=0;
   do
   {  //Retry 100 times to send command.
      temp=Write_Command_MMC(CMD);
      retry++;
      if(retry==100) 
      {
        return(READ_BLOCK_ERROR); //block write Error!
      }
   }
   while(temp!=0); 
   			
   //Read Start Byte form MMC/SD-Card (FEh/Start Byte)
   while (Read_Byte_MMC()!=0xfe);
	
   //Write blocks(normal 512Bytes) to MMC/SD-Card
   for (i=0;i<Bytes;i++)
   {
      *Buffer++ = Read_Byte_MMC();
   }
   
   //CRC-Byte
   Read_Byte_MMC();//CRC - Byte 
   Read_Byte_MMC();//CRC - Byte
	
   //set MMC_Chip_Select to high (MMC/SD-Card invalid)
   SPI_CS=1;
   return(0);
}

//***************************************************************************
//Routine for reading CSD Registers from MMC/SD-Card (16Bytes)
//Return 0 if no Error.
unsigned char Read_CSD_MMC(unsigned char *Buffer)
//***************************************************************************
{	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费日韩av| 国产精品嫩草影院av蜜臀| 久久久91精品国产一区二区三区| 蜜臀av在线播放一区二区三区| 欧美在线啊v一区| 五月激情六月综合| 日韩三区在线观看| 不卡一区在线观看| 亚洲伊人色欲综合网| 日韩久久久精品| 91美女片黄在线观看91美女| 日韩激情一二三区| 国产精品久99| 91 com成人网| 国产不卡在线视频| 亚洲综合清纯丝袜自拍| 亚洲综合成人在线| 日韩精品电影在线观看| 日日噜噜夜夜狠狠视频欧美人| 日本不卡免费在线视频| 亚洲视频一二三| 精品国产露脸精彩对白 | 午夜视频一区二区三区| 亚洲妇女屁股眼交7| 亚洲欧美日韩综合aⅴ视频| 精品福利一区二区三区免费视频| 亚洲精品在线一区二区| 日本一区二区三区视频视频| 精品国产自在久精品国产| 国产亚洲污的网站| 亚洲午夜免费福利视频| 久久99精品久久久久久动态图| 中文字幕中文字幕一区| 五月天国产精品| 成人午夜碰碰视频| 国产一区二区三区美女| 午夜伦理一区二区| 国产精品一区在线观看你懂的| 久久精品国产77777蜜臀| 亚欧色一区w666天堂| 亚洲精品国产a| 日韩美女啊v在线免费观看| 午夜a成v人精品| 国产乱子伦视频一区二区三区| 欧美在线免费播放| 国产欧美日韩三区| 美女国产一区二区| 欧美三级电影网| 欧美日韩日本视频| 日本一区二区视频在线| 日本在线不卡视频| 国产精品每日更新在线播放网址| 水野朝阳av一区二区三区| 91一区二区三区在线观看| 久久久久久久久久久久久久久99 | 亚洲精品在线电影| 亚洲地区一二三色| 91网上在线视频| 欧美韩国日本一区| 亚洲欧美激情小说另类| 国产91丝袜在线播放| 亚洲精品一区二区三区蜜桃下载| 亚洲成av人**亚洲成av**| 91在线播放网址| 国产精品蜜臀av| 丁香桃色午夜亚洲一区二区三区| 欧美大白屁股肥臀xxxxxx| 日韩制服丝袜先锋影音| 欧美日韩精品福利| 91麻豆精品国产自产在线观看一区| 亚洲欧洲综合另类| 99久久精品国产一区| 欧美日韩国产成人在线免费| 一区二区三区高清| 九色porny丨国产精品| 欧美精品第1页| 亚洲国产精品成人综合色在线婷婷 | 中文字幕一区二区日韩精品绯色| 国产精品久久福利| 成人国产视频在线观看| 久久九九99视频| 国产成人日日夜夜| 欧美日韩亚州综合| 亚洲国产成人91porn| 精品1区2区3区| 青椒成人免费视频| 久久这里都是精品| 亚洲日韩欧美一区二区在线| 成人黄色av电影| 亚洲精品亚洲人成人网在线播放| 欧洲一区二区av| 丝袜诱惑制服诱惑色一区在线观看 | 日韩在线一区二区三区| 欧美一区二区三区精品| 亚洲精品视频在线| 91精品办公室少妇高潮对白| 久久精品一区二区三区av| 粉嫩一区二区三区性色av| 中文字幕在线一区免费| 欧洲人成人精品| 强制捆绑调教一区二区| 久久久国际精品| 91国产精品成人| 久久国产剧场电影| 国产精品欧美综合在线| 欧美日韩你懂的| 国产精品18久久久久久久久久久久| 国产精品美女一区二区在线观看| 欧美色图天堂网| 26uuu久久天堂性欧美| 9l国产精品久久久久麻豆| 国产精品视频看| 3d动漫精品啪啪1区2区免费| 国产美女精品人人做人人爽| 一区二区三区四区不卡在线 | 99精品久久只有精品| 首页国产欧美日韩丝袜| 欧美—级在线免费片| 欧美日韩一区二区不卡| 国产成人午夜电影网| 欧美96一区二区免费视频| 国产精品成人一区二区三区夜夜夜| 日韩免费观看高清完整版 | 久久女同精品一区二区| 欧美日韩视频在线一区二区| fc2成人免费人成在线观看播放| 日韩中文字幕一区二区三区| 综合激情网...| 国产色综合一区| 精品国内二区三区| 欧美一级淫片007| 在线一区二区观看| 成人av免费在线观看| 国内外成人在线| 国产亚洲午夜高清国产拍精品| 欧美日韩中文另类| 成人黄色综合网站| 国产·精品毛片| 国产一区二区三区四区五区美女 | 国产福利精品一区二区| 美女网站视频久久| 日韩精品一二三区| 视频在线观看一区| 亚洲一区二区三区视频在线| 亚洲乱码中文字幕综合| 国产亚洲欧美日韩在线一区| 精品国产乱码久久久久久牛牛| 欧美精品久久久久久久久老牛影院| 在线免费视频一区二区| 一本久道久久综合中文字幕| 国产精品成人一区二区三区夜夜夜| 久久综合一区二区| 日韩欧美的一区二区| 欧美一区二区网站| 精品日韩在线一区| 久久综合精品国产一区二区三区 | 国产无人区一区二区三区| 精品国产在天天线2019| 精品乱码亚洲一区二区不卡| 欧美变态凌虐bdsm| 久久久激情视频| 成人欧美一区二区三区| 樱花草国产18久久久久| 性感美女久久精品| 美女看a上一区| 懂色av一区二区在线播放| 波多野结衣中文字幕一区 | 五月天网站亚洲| 全国精品久久少妇| 国产剧情av麻豆香蕉精品| 国产91高潮流白浆在线麻豆| 不卡一区二区中文字幕| 色噜噜狠狠成人中文综合| 67194成人在线观看| www久久久久| 亚洲最快最全在线视频| 日本不卡视频一二三区| 国产福利一区二区三区视频 | www.欧美日韩国产在线| 在线一区二区三区做爰视频网站| 91精品国产麻豆| 国产精品毛片大码女人| 亚洲一区二区三区四区在线观看| 日本欧美大码aⅴ在线播放| 国产成人自拍网| 在线观看欧美黄色| 久久综合色播五月| 亚洲国产精品一区二区久久| 美女视频一区二区三区| 99精品久久99久久久久| 欧美一级在线视频| 亚洲伦理在线免费看| 狠狠色丁香婷婷综合久久片| 色94色欧美sute亚洲线路一ni | 色网站国产精品| 日韩欧美国产综合| 一二三四社区欧美黄| 激情欧美一区二区| 欧美男人的天堂一二区| 国产精品久久久久久久久免费桃花 |