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

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

?? mmc_spi.c

?? 來自網上好心人的好東東,關于SD卡讀寫的,內附protel原理圖
?? C
字號:
//###########################################################
// File: mmc_spi.c
//
// Read-/Writeroutines for MMC MultiMedia cards and
// SD SecureDigital cards in SPI mode.
//
// This will work only for MMC cards with 512 bytes block length !
// This will work only for MMC cards with a partition table !
//
//
//#########################################################################
// Last change: 21.05.2004
//#########################################################################
// holger.klabunde@t-online.de
// http://home.t-online.de/home/holger.klabunde/homepage.htm
//#########################################################################
// Compiler: AVR-GCC 3.2
//#########################################################################

#include <io.h>

#include "dos.h"

#ifdef MMC_CARD_SPI

//######################################################
unsigned char MMCCommand(unsigned char command, unsigned long adress)
//######################################################
{

 SPI_WRITE(0xFF); 			 //Dummy write
 SPI_WRITE(command);
 SPI_WRITE((unsigned char)(adress>>24)); //MSB of adress
 SPI_WRITE((unsigned char)(adress>>16));
 SPI_WRITE((unsigned char)(adress>>8));
 SPI_WRITE((unsigned char)adress);       //LSB of adress
 SPI_WRITE(0xFF); 			 //dummy checksum
 SPI_WRITE(0xFF); 			 //16 bit response
 SPI_WRITE(0xFF);

 return SPDR;      			 // only last 8 bits used
}

//######################################################
unsigned char MMCReadSector(unsigned long sector, unsigned char *buf)
//######################################################
{
 unsigned int i;
 unsigned char *p;
 unsigned long startadr;
 
 if(sector>=maxsect) return 1; //sectornumber too big

 p=buf; //using a pointer is much faster than indexing buf[i]
 
 MMC_CS_OFF();

//calculate startadress of the sector
 startadr=sector * (unsigned long)BYTE_PER_SEC;

 MMCCommand(MMC_READ_BLOCK,startadr);

 do
  {
   SPI_WRITE(0xFF);
  }while(SPDR!=0xFE); // wait for card response
  
 
 for(i=0; i<BYTE_PER_SEC; i++)
  {
   SPI_WRITE(0xFF); // shift out a byte into SPDR
   *p++=SPDR;       // store byte in buffer
  } 

 SPI_WRITE(0xFF); // 16 bit crc follows data
 SPI_WRITE(0xFF);

 MMC_CS_ON();

 return 0;
}

#ifdef DOS_WRITE
//######################################################
unsigned char MMCWriteSector(unsigned long sector, unsigned char *buf)
//######################################################
{
 unsigned int i;
 unsigned char *p, by;
 unsigned long startadr;

 if(sector>=maxsect) return 1; //sectornumber too big
 
 p=buf; //using a pointer is much faster than indexing buf[i]

 MMC_CS_OFF();

//calculate startadress
 startadr=sector * (unsigned long)BYTE_PER_SEC;

 MMCCommand(MMC_WRITE_BLOCK,startadr);

 SPI_WRITE(0xFF); // do we need this TWO dummy writes ?
 SPI_WRITE(0xFF);

 SPI_WRITE(0xFE); // start block token

 for(i=0; i<BYTE_PER_SEC; i++)
  {
   SPI_WRITE(*p++);
  }

 SPI_WRITE(0xFF); // 16 bit crc follows data
 SPI_WRITE(0xFF);

 SPI_WRITE(0xFF); // read response
 by=SPDR & 0x1F;
 if(by != 0x05)   // data block accepted ?
  {
   MMC_CS_ON();
   return 1;
  }

 do
  {
   SPI_WRITE(0xFF);
  }while(SPDR !=0xFF); // wait til busy is gone

 MMC_CS_ON();

 return 0;
}
#endif //DOS_WRITE

//######################################################
unsigned char MMCIdentify(void)
//######################################################
{
 unsigned char by;
 unsigned int i;
 unsigned int c_size, c_size_mult, read_bl_len;
 unsigned long drive_size;

//Init SPI with a very slow transfer rate first !

//SPCR SPI Controlregister
// SPIE=0; //No SPI Interrupt
// SPE=1;  //SPI Enable
// DORD=0; //Send MSB first
// MSTR=1; //I am the master !
// CPOL=0; //SCK low if IDLE
// CPHA=0; //SPI Mode 0
// SPR1=1; //SPI Clock = f/128 = 125kHz @16MHz Clock
// SPR0=1; //or f/64 if SPI2X = 1 in SPSR register
 SPCR=0x53;

//SPSR SPI Statusregister
// SPI2X=1; //Double speed for SPI = 250kHz @16MHz Clock
// SPSR=0x01;
 SPSR=0x00;

 for(i=0; i<10; i++) SPI_WRITE(0xFF); // give min 74 clock pulses before
                                      // sending commands
 
 MMC_CS_OFF();

//send CMD0 for RESET
 SPI_WRITE(MMC_RESET); //command code CMD0
 SPI_WRITE(0x00);
 SPI_WRITE(0x00);
 SPI_WRITE(0x00);
 SPI_WRITE(0x00);
 SPI_WRITE(0x95); // CMD0 needs a checksum !
 SPI_WRITE(0xFF); // get 16 bit response high
 SPI_WRITE(0xFF); // get 16 bit response low
 by=SPDR;         // only last 8 bits neccessary

//repeat CMD1 til result=0
 do
  {
   by=MMCCommand(MMC_INIT,0);
  }while(by!=0);

//read CID
// MMCCommand(MMC_READ_CID,0); // nothing really interesting here

//read CSD Card Specific Data
 MMCCommand(MMC_READ_CSD,0);
 SPI_WRITE(0xFF); // ignore response 0xFE

 for(i=0; i<16; i++) //CSD has 128 bits -> 16 bytes
  {
   SPI_WRITE(0xFF);
   by=SPDR;
//   ShowHex(by);
   iob[i]=by;
  }

 SPI_WRITE(0xFF); // 16 bit crc follows data
 SPI_WRITE(0xFF);

 c_size=iob[6] & 0x03; //bits 1..0
 c_size<<=10;
 c_size+=(unsigned int)iob[7]<<2;
 c_size+=iob[8]>>6;

 by= iob[5] & 0x0F;
 read_bl_len=1;
 read_bl_len<<=by;

 by=iob[9] & 0x03;
 by<<=1;
 by+=iob[10] >> 7;
 
 c_size_mult=1;
 c_size_mult<<=(2+by);

 drive_size=(unsigned long)(c_size+1) * (unsigned long)c_size_mult * (unsigned long)read_bl_len;
 maxsect= drive_size / BYTE_PER_SEC;

 MMC_CS_ON();

//switch to high speed SPI
// SPR1=0; //SPI Clock = f/4 = 4MHz @16MHz Clock
// SPR0=0; //or f/2 if SPI2X = 1 in SPSR register
 SPCR=0x50;

//SPSR SPI Statusregister
// SPI2X=1; //Double speed for SPI = 8MHz @16MHz Clock
 SPSR=0x01;

 return 0;
}


#endif //MMC_CARD_SPI

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美经典一区二区| 亚洲小说春色综合另类电影| 最近中文字幕一区二区三区| 亚洲成a人片综合在线| 国产成人在线观看免费网站| 欧美人与z0zoxxxx视频| 国产精品素人视频| 久久激情五月婷婷| 欧美日韩黄色一区二区| 国产精品美女久久久久高潮| 欧美一级黄色片| 在线欧美一区二区| 欧美精品久久99久久在免费线 | 日韩一区二区三区在线视频| 91精品久久久久久蜜臀| 欧美变态tickling挠脚心| 精品成人在线观看| 日本道免费精品一区二区三区| 日韩欧美一级精品久久| 亚洲成人av电影| 免费人成网站在线观看欧美高清| 中文字幕综合网| 亚洲午夜激情网站| 蜜臀久久99精品久久久画质超高清| 欧美精品一区在线观看| 久久爱www久久做| 日韩三级视频在线观看| 蜜臀久久久99精品久久久久久| 欧美日韩mp4| 亚洲成人黄色小说| 91超碰这里只有精品国产| 亚洲一区二区欧美激情| 欧美色窝79yyyycom| 亚洲福利一区二区三区| 欧美少妇bbb| 五月激情综合网| 9191国产精品| 成人精品鲁一区一区二区| 亚洲精品一区二区三区99| 精品在线一区二区| 久久久久久影视| 成人一级视频在线观看| 综合网在线视频| 欧美中文字幕不卡| 日产国产欧美视频一区精品| 日韩一级黄色大片| 国内精品伊人久久久久av一坑 | 国产午夜精品久久久久久久| 国产乱理伦片在线观看夜一区| 久久精品亚洲精品国产欧美| 成人av小说网| 亚洲国产成人va在线观看天堂| 在线成人午夜影院| 久久国产精品一区二区| 国产亚洲综合在线| 91免费精品国自产拍在线不卡| 亚洲综合在线第一页| 欧美一区二区三区在线| 国产一区二区不卡| 亚洲精品久久久蜜桃| 91精品久久久久久久99蜜桃| 国产精品一色哟哟哟| 亚洲精品国产视频| 欧美大片顶级少妇| 99久久国产综合精品麻豆| 性感美女久久精品| 国产亚洲午夜高清国产拍精品| 色婷婷综合久久久中文一区二区 | 激情综合五月婷婷| 最新高清无码专区| 日韩限制级电影在线观看| 99麻豆久久久国产精品免费| 图片区日韩欧美亚洲| 国产精品污www在线观看| 欧美老肥妇做.爰bbww视频| 丁香天五香天堂综合| 青青草成人在线观看| 国产精品大尺度| 精品少妇一区二区三区日产乱码 | 日韩欧美国产精品| 成人午夜私人影院| 奇米777欧美一区二区| 日韩一区中文字幕| 精品国产第一区二区三区观看体验| 一本大道久久a久久综合| 国产精品一区二区久久精品爱涩| 亚洲午夜日本在线观看| 国产精品女人毛片| 日韩欧美中文字幕一区| 欧美丰满一区二区免费视频| 成人av手机在线观看| 久草中文综合在线| 婷婷综合五月天| 一区二区三区四区亚洲| 国产精品久久久久一区| 久久免费偷拍视频| 日韩一区二区三区四区五区六区 | 国产99久久久国产精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区在线免费观看 | 成人久久久精品乱码一区二区三区| 日日夜夜一区二区| 亚洲电影你懂得| 一区二区三区在线视频播放| 亚洲欧洲日韩综合一区二区| 日本一区二区免费在线观看视频 | 中文字幕一区二区三区不卡 | 亚洲品质自拍视频网站| 国产色91在线| 国产偷v国产偷v亚洲高清| 精品国产一区二区三区不卡| 欧美一区二区久久| 91麻豆精品国产91久久久久久久久 | 成人免费小视频| 91.xcao| av在线综合网| 国内一区二区在线| 亚洲小少妇裸体bbw| 久久久久国色av免费看影院| 欧美丝袜丝nylons| 国产宾馆实践打屁股91| 亚洲成av人片一区二区梦乃| 久久久国产一区二区三区四区小说| 亚洲小少妇裸体bbw| 国产精品久久久久影院亚瑟 | va亚洲va日韩不卡在线观看| 成人高清免费在线播放| 97se亚洲国产综合自在线观| 91麻豆免费看片| 欧美日韩一区不卡| 日韩视频国产视频| 国产欧美日韩三区| 亚洲人成网站色在线观看| 一区二区三区在线视频播放| 日韩va欧美va亚洲va久久| 久久av老司机精品网站导航| 国产成人在线看| 在线视频你懂得一区| 91精品国产入口在线| 久久久久久久久久久电影| 日韩一区中文字幕| 日韩国产精品久久久| 国产精品123区| 91蝌蚪国产九色| 日韩一级片网站| 青青草91视频| 国产美女精品人人做人人爽| 99re热这里只有精品视频| 欧美美女一区二区在线观看| 久久精品人人爽人人爽| 夜夜爽夜夜爽精品视频| 国产曰批免费观看久久久| 色婷婷精品大在线视频| 日韩欧美一区电影| 亚洲视频一区二区在线观看| 日韩精品免费视频人成| 成人av在线电影| 日韩欧美国产三级| 亚洲综合成人网| 国产成人精品www牛牛影视| 欧美日韩极品在线观看一区| 国产亲近乱来精品视频| 视频一区二区三区入口| 岛国精品在线观看| 欧美一区二区三区视频免费 | 亚洲成在线观看| 国产凹凸在线观看一区二区| 911精品产国品一二三产区| 国产精品三级av| 精品写真视频在线观看 | 亚洲欧美日韩一区| 精品一区二区影视| 欧美日韩三级一区二区| 国产精品国产三级国产a| 美女视频一区二区三区| 欧美三级韩国三级日本三斤| 中文字幕成人在线观看| 久久福利视频一区二区| 欧美在线高清视频| 亚洲欧洲三级电影| 成人午夜在线免费| 国产日韩欧美高清在线| 麻豆久久久久久久| 制服丝袜中文字幕一区| 亚洲成人免费看| 在线亚洲一区二区| 亚洲人成影院在线观看| 99re亚洲国产精品| 国产精品久久毛片a| 国产精品亚洲一区二区三区在线| 日韩一区二区视频| 日韩高清在线观看| 911精品国产一区二区在线| 亚洲第一久久影院| 欧美日韩国产高清一区二区 | 国产精品久久久久久久久图文区| 国内精品久久久久影院一蜜桃| 日韩欧美一区二区免费| 蜜桃精品视频在线| 亚洲手机成人高清视频|