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

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

?? mmc_spi.c

?? 提供Sd卡驅動(spi模式)程序
?? 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一区二区三区免费野_久草精品视频
一区二区三区产品免费精品久久75| 免费欧美高清视频| 丝袜诱惑制服诱惑色一区在线观看 | a亚洲天堂av| 欧美电影免费观看高清完整版在线| 国产精品高潮呻吟| 精品一区二区三区的国产在线播放| 91丨九色丨尤物| 国产午夜精品一区二区| 麻豆国产欧美一区二区三区| 在线亚洲精品福利网址导航| 中文av一区特黄| 国产精品一区二区91| 国产偷国产偷精品高清尤物 | 亚洲永久精品国产| 国产经典欧美精品| 精品国产伦一区二区三区观看体验 | 97se亚洲国产综合自在线| 久久综合成人精品亚洲另类欧美| 丝袜美腿成人在线| 欧美午夜片在线看| 亚洲欧美另类久久久精品| 成人深夜在线观看| 国产欧美一区二区精品忘忧草| 美女性感视频久久| 日韩欧美电影一二三| 蜜桃av一区二区| 日韩一区二区在线免费观看| 日韩成人免费看| 宅男噜噜噜66一区二区66| 亚洲在线视频免费观看| 色婷婷av久久久久久久| 亚洲主播在线播放| 欧美色电影在线| 同产精品九九九| 日韩一区二区在线观看视频 | 亚洲综合视频在线观看| 色哟哟欧美精品| 亚洲欧洲日产国产综合网| 成人美女视频在线看| 国产精品毛片久久久久久| 99久久免费精品高清特色大片| 中文字幕成人网| 色哦色哦哦色天天综合| 亚洲国产综合人成综合网站| 欧美日韩国产片| 精品一区二区三区在线观看国产| 久久中文娱乐网| 9i看片成人免费高清| 亚洲一区二区三区四区在线| 欧美精品久久天天躁| 精品一区二区精品| 国产精品久久久久久久久免费丝袜| 97久久超碰精品国产| 亚洲va欧美va天堂v国产综合| 欧美一区二区人人喊爽| 国产成人免费视频网站| 亚洲另类在线视频| 日韩一区二区麻豆国产| 成人综合激情网| 亚洲高清免费观看| 久久嫩草精品久久久精品| 91香蕉视频在线| 麻豆久久久久久| 亚洲天堂2016| 欧美不卡一区二区| 91丨porny丨首页| 伦理电影国产精品| 亚洲欧美日韩一区| 精品卡一卡二卡三卡四在线| 99久久精品国产观看| 免费不卡在线视频| 亚洲色图欧美激情| 26uuu色噜噜精品一区二区| 91免费版pro下载短视频| 蜜臀a∨国产成人精品| 中文字幕亚洲电影| 精品va天堂亚洲国产| 欧美视频自拍偷拍| 成人网在线播放| 久久国产尿小便嘘嘘尿| 亚洲精品国产高清久久伦理二区| 精品国产乱码久久久久久老虎| 色综合 综合色| 成人动漫视频在线| 精品一区二区在线看| 午夜精品久久久久久久久| 国产精品女同一区二区三区| 欧美mv日韩mv亚洲| 欧美日韩国产首页在线观看| 99精品国产99久久久久久白柏| 久久99久久99小草精品免视看| 一区二区三区四区不卡在线| 欧美国产激情二区三区| 亚洲精品一区二区三区蜜桃下载| 欧美日韩一区久久| 在线视频一区二区三| 99国产精品一区| 成人av网址在线观看| 国产精品一区二区免费不卡| 久久99热这里只有精品| 欧美bbbbb| 日日摸夜夜添夜夜添亚洲女人| 亚洲免费在线看| 欧美国产精品v| 欧美韩国日本一区| 欧美激情一区二区三区全黄| 国产亚洲精品bt天堂精选| 精品国产乱码久久久久久影片| 欧美一区二区在线播放| 欧美日本免费一区二区三区| 欧美日韩精品久久久| 欧美三级蜜桃2在线观看| 欧美系列在线观看| 欧美三区在线观看| 欧美丰满一区二区免费视频| 欧美乱熟臀69xxxxxx| 欧美日韩不卡在线| 91精品国产一区二区三区蜜臀| 91精品国产免费久久综合| 欧美一区二区在线视频| 精品国产一区二区三区久久久蜜月 | 2019国产精品| 久久一日本道色综合| 久久精品人人做人人综合 | 国产麻豆一精品一av一免费| 国产在线精品不卡| 懂色av一区二区三区蜜臀| 99精品视频在线观看| 欧美色手机在线观看| 欧美一区二区三区的| 精品国产乱码久久久久久老虎| 国产午夜精品久久久久久免费视 | 日一区二区三区| 毛片基地黄久久久久久天堂| 精品一区二区三区在线观看国产| 久久99国产精品免费| 粉嫩绯色av一区二区在线观看 | 韩日av一区二区| 国产成人精品亚洲777人妖| fc2成人免费人成在线观看播放| 色久综合一二码| 91麻豆精品国产91久久久久久久久 | 99vv1com这只有精品| 欧美性猛片aaaaaaa做受| 日韩精品一区二区三区视频在线观看| 久久色视频免费观看| 亚洲免费观看高清| 伦理电影国产精品| 91免费国产视频网站| 精品精品国产高清a毛片牛牛| 国产精品日韩精品欧美在线| 五月天网站亚洲| 成人小视频免费观看| 欧美精品在线观看一区二区| 久久久一区二区三区| 亚洲一区视频在线观看视频| 狠狠色综合色综合网络| 欧美曰成人黄网| 久久久不卡影院| 日韩电影免费在线| 99精品视频在线观看| 久久亚洲精华国产精华液| 亚洲一区免费在线观看| 国产精品18久久久久久久久| 欧美亚洲综合一区| 国产精品欧美久久久久无广告| 丝袜脚交一区二区| 色视频一区二区| 欧美激情综合五月色丁香小说| 午夜影院久久久| 94-欧美-setu| 欧美激情一区二区在线| 日本aⅴ亚洲精品中文乱码| 色老汉av一区二区三区| 欧美激情一区三区| 国产精品一区二区在线观看不卡| 91精品一区二区三区久久久久久 | 日韩欧美亚洲另类制服综合在线 | 欧美亚洲综合另类| 国产精品久久一卡二卡| 国产主播一区二区| 欧美一级日韩免费不卡| 亚洲1区2区3区4区| 欧美午夜精品久久久| 亚洲免费在线视频| 91在线观看下载| 中文字幕在线不卡视频| 国产精品资源站在线| 2欧美一区二区三区在线观看视频| 日韩**一区毛片| 欧美一级搡bbbb搡bbbb| 日韩av中文字幕一区二区三区| 欧美性一区二区| 夜夜爽夜夜爽精品视频| 在线免费观看日本欧美| 亚洲午夜久久久久久久久电影网| 色噜噜狠狠成人中文综合| 亚洲久草在线视频| 日本韩国精品在线|