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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sd卡單片機(jī)驅(qū)動程序.txt

?? 這是比較通用的單片機(jī)SPI讀寫SD卡的程序
?? TXT
字號:
//--------SD_MMC.H------------------------ 

#ifndef __SD_MMC_H__ 
#define __SD_MMC_H__ 

// 數(shù)據(jù)宏定義 
#define uint8  unsigned char 
#define  int8    signed char 
#define uint16 unsigned int 
#define  int16   signed int 
#define uint32 unsigned long 
#define  int32   signed long 
  
// C8051F015與SD_MMC 的接口定義 
sbit SDCS        = P3^0; 
sbit SDDET        = P3^1; 
sbit SDWP        = P3^2; 


void SPI_SendWreit(uchar temp);        // VS1003B DATA發(fā)送 
uint8 SPI_SendByte(uint8 val);        // SPI傳送一個字節(jié) 
uint8 MMC_SD_SendCmd(uint8 Cmd, uint32 arg);        //發(fā)送卡命令 
uint8 MMC_SD_ReadSingleBlock(uint32 sector, uint8 *buffer);        //讀一個扇區(qū) 
uint8 MMC_SD_WriteSingleBlock(uint32 sector, uint8 *buffer);        //寫一個扇區(qū) 
uint8 MMC_SD_init();        //mmc_sd卡初始化 

#endif 
//---------SD_MMC.C----------------- 

//--------------------------------------------------------- 
//        SD_MMC  底層驅(qū)動函數(shù)庫 
//        編譯環(huán)境:Keil C V2.40 
//        編寫日期:2008-04-07 
//        最后更新:2008-05-04 
//--------------------------------------------------------- 
#include "main.h" 
#include "sd_mmc.h" 

//--------------------------------------------------- 
//        函數(shù)名:SPI_SendByte 
//        功  能:SPI 數(shù)據(jù)發(fā)送 
//        參  數(shù):uchar 
//        返回值: 
//--------------------------------------------------- 

void SPI_SendWreit(uchar temp) 
{ 
        SPI0DAT=temp; 
        while(TXBSY);        // 查詢發(fā)送標(biāo)志位 
} 

//--------------------------------------------------- 
//        函數(shù)名:SPI_SendByte 
//        功  能:SPI傳送一個字節(jié) 
//        參  數(shù):uchar 
//        返回值:uchar 
//--------------------------------------------------- 

uint8 SPI_SendByte(uint8 val)        // uint8= uchar 
{ 
        SPI0DAT = val; 
        while(TXBSY); 
        return SPI0DAT; 
} 

//--------------------------------------------------- 
//        函數(shù)名:MMC_SD_SendCmd 
//        功  能:發(fā)送卡命令 
//        參  數(shù):uint8,uint32 
//        返回值:uint8 
//--------------------------------------------------- 

uint8 MMC_SD_SendCmd(uint8 Cmd, uint32 arg) 
{ 
        uint8 r1; 
        uint8 retry=0; 
         
        SPI_SendWreit(0xFF);        //發(fā)命令前先發(fā)送8個時鐘 
         
        SPI_SendWreit(Cmd | 0x40);        //分別寫入命令 
        SPI_SendWreit(arg>>24); 
        SPI_SendWreit(arg>>16); 
        SPI_SendWreit(arg>>8); 
        SPI_SendWreit(arg); 
        SPI_SendWreit(0x95);                //僅本次有效的 CRC值         
         
        while((r1 = SPI_SendByte(0xFF)) == 0xFF)        //等待響應(yīng) 
                if(retry++ > 8) break;        //超時退出 

        return r1;        //返回狀態(tài)值 
} 

//--------------------------------------------------- 
//        函數(shù)名:MMC_SD_ReadSingleBlock 
//        功  能:讀一個扇區(qū) 
//        參  數(shù):扇區(qū),數(shù)據(jù)緩沖區(qū) 
//        返回值: 
//--------------------------------------------------- 

uint8 MMC_SD_ReadSingleBlock(uint32 sector,uint8 *buffer) 
{ 
        uint8 r1; 
        uint16 i; 

        SDCS=0;                // 使能Card 

        r1 = MMC_SD_SendCmd(17, sector<<9);        // 發(fā)讀扇區(qū)命令 
         
        if(r1 != 0x00) return r1; 

        while(SPI_SendByte(0xFF) != 0xFE);        //--等待數(shù)據(jù)的起始令牌號-- 

        for(i=0; i<512; i++)        //讀512個數(shù)據(jù) 
        { 
                *buffer++ = SPI_SendByte(0xFF); 
        } 

        SPI_SendWreit(0xFF);        // 發(fā)送偽CRC 
        SPI_SendWreit(0xFF); 
        SDCS=1;                        // 關(guān)閉Card 
        return 0; 
} 

//--------------------------------------------------- 
//        函數(shù)名:MMC_SD_WriteSingleBlock 
//        功  能:寫一個扇區(qū) 
//        參  數(shù):扇區(qū),數(shù)據(jù)緩沖區(qū) 
//        返回值: 
//--------------------------------------------------- 

uint8 MMC_SD_WriteSingleBlock(uint32 sector, uint8 *buffer) 
{ 
        uint8 r1; 
        uint16 i; 

        SDCS=0;                // 使能Card 

        r1 = MMC_SD_SendCmd(24, sector<<9);        //寫命令 
        if(r1 != 0x00) 
                return r1; 

        SPI_SendWreit(0xFF); 
        SPI_SendWreit(0xFF); 
        SPI_SendWreit(0xFF); 

        SPI_SendWreit(0xFE);        //發(fā)送數(shù)據(jù)起始令牌號 
         
        for(i=0; i<512; i++)        //以扇區(qū)為單位寫入數(shù)據(jù) 
        { 
                SPI_SendWreit(*buffer++); 
        } 
         
        SPI_SendWreit(0xFF);        // 發(fā)送偽CRC 
        SPI_SendWreit(0xFF); 
         
        r1 = SPI_SendByte(0xFF);        // 讀數(shù)據(jù)應(yīng)答令牌號 
         
        if( (r1&0x1F) != 0x05)        //等待是否成功 
        { 
                SDCS=1; 
                return r1; 
        } 

        while(!SPI_SendByte(0xFF));         //--等待操作完成-- 

        SDCS=1;                        // 關(guān)閉Card 

        return 0; 
} 

//--------------------------------------------------- 
//        函數(shù)名:MMC_SD_Init 
//        功  能:sd卡初始化 
//        參  數(shù):無 
//        返回值:uint8 type        // 卡類型返回值: 0x10 SD, 0x20 MMC 
//--------------------------------------------------- 

uint8 MMC_SD_init() 
{ 
        uint8 i; 
        uint8 retry; 
        uint8 r1=0; 
        uint8 type=0;        // 卡類型返回值:0xA0 SD 0xB0 MMC 
        SDCS = 0;                // 使能Card 

        SPI_speed=0x13;        //低速 SPI=300k   Fsystem=12Mhz 
        retry = 0; 

        do 
        { 
                for(i=0;i<10;i++) SPI_SendByte(0xFF);   //發(fā)送80個時鐘,使卡同步 
                r1 = MMC_SD_SendCmd(0, 0);        //發(fā)Cmd0(復(fù)位)命令 
                retry++; 
                if(retry > 30) return (type=0x01); //超時退出,個別卡需要更多次循環(huán)才有反應(yīng) 
        } while(r1 != 0x01);                // MMC、SD卡成功轉(zhuǎn)到SPI模式 

        retry = 0; 

//****** SD卡在進(jìn)入SPI模式后,激活命令和MMC卡一樣為Cmd1,同時Cmd55+Cmd41 仍然有效******// 

/*        do 
        { 
                r1 = MMC_SD_SendCmd(1, 0);        //發(fā)Cmd1(active激活)命令 
                retry++; 
                if(retry > 100) return 1;        //超時退出 
        } while(r1);*/ 
        do 
        { 
                r1 = MMC_SD_SendCmd(55, 0);        // 先發(fā)送 Cmd55 
                if(r1 == 0x01)                        // 如果有反應(yīng) 
                { 
                        r1 = MMC_SD_SendCmd(41,0);        // 再發(fā)送 Cmd41 進(jìn)行激活 
                        if(r1 == 0x00) type = 0x10;        // 激活成功就是SD卡 
                } 

                else {                                   // 如果發(fā)送 Cmd55無反應(yīng),改發(fā)送 Cmd1 
                                r1 = MMC_SD_SendCmd(1,0); 
                                if(r1 == 0x00) type = 0x20;        // 激活成功就是MMC卡 
                         } 

                retry++; 
                if(retry > 255) return (type=0x01);        // 超時退出, 個別卡需要更多次循環(huán)才有反應(yīng) 
        } while(r1 != 0x00);                // MMC、SD卡激活后的返回值均為0x00*/ 

//        SPI_SendByte(0xFF);        // 高速SPI前先發(fā)送8個時鐘 
//        SPI_speed = 0x07;        // 切換到高速 SPI 

        r1 = MMC_SD_SendCmd(59, 0);        //關(guān)CRC 
        r1 = MMC_SD_SendCmd(16, 512);        //設(shè)置讀取一次的字節(jié)數(shù) 

        SDCS = 1;                        // 關(guān)閉Card 
//        SPI_speed=0x07;        //切換到高速 SPI 

        return type;        //參數(shù)返回,1為初始化錯誤,10為SD卡,20為MMC卡 
} 

//----------------------------------------------------------- 
//        End of File 
//----------------------------------------------------------- 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777色狠狠一区二区三区| 777色狠狠一区二区三区| eeuss鲁片一区二区三区| 成人一区二区三区中文字幕| 欧美日产在线观看| 亚洲欧美一区二区三区国产精品 | 欧美人妖巨大在线| 国产在线精品不卡| 在线免费观看日韩欧美| 91欧美一区二区| 欧美一级精品大片| 亚洲国产另类av| 日本高清不卡在线观看| 欧美国产精品劲爆| 国产乱淫av一区二区三区| 欧美一级黄色大片| 亚洲成av人片在线| 欧美性猛片xxxx免费看久爱| 亚洲色图色小说| eeuss鲁片一区二区三区| 久久久av毛片精品| 九色综合狠狠综合久久| 日韩一级片在线观看| 三级在线观看一区二区| 欧美日韩一区二区在线视频| 一区二区三区在线免费播放 | 成人免费小视频| 国产suv精品一区二区6| 久久九九久久九九| 国产精品69毛片高清亚洲| 国产亚洲欧美在线| 丰满白嫩尤物一区二区| 中文字幕免费不卡| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩一级视频| 午夜不卡av在线| 欧美老人xxxx18| 日韩高清不卡一区二区| 91麻豆精品国产自产在线| 日本午夜精品视频在线观看| 日韩欧美在线网站| 国产一区在线视频| 国产精品丝袜久久久久久app| 国产乱码精品一区二区三| 国产欧美一区二区在线观看| 成熟亚洲日本毛茸茸凸凹| 国产精品护士白丝一区av| 99国产一区二区三精品乱码| 亚洲小少妇裸体bbw| 91精品国产免费| 精品一区二区久久久| 久久久久久久久久久99999| 高清成人在线观看| 亚洲人妖av一区二区| 欧美日本国产视频| 国产乱码精品一区二区三区五月婷| 中文字幕高清不卡| 欧美最猛黑人xxxxx猛交| 日韩av不卡一区二区| 久久久久久久久99精品| 色呦呦网站一区| 日韩专区中文字幕一区二区| 久久久久久久电影| 91在线视频免费观看| 日韩激情视频在线观看| 久久久一区二区三区捆绑**| 日本精品一区二区三区高清| 免费三级欧美电影| 中文字幕亚洲区| 日韩一区二区三区在线观看| 成人免费视频网站在线观看| 午夜精品福利一区二区三区av| 精品少妇一区二区三区在线播放| 99精品视频在线播放观看| 日产欧产美韩系列久久99| 国产精品丝袜在线| 6080亚洲精品一区二区| av电影在线观看完整版一区二区| 蜜臀久久久99精品久久久久久| 日韩伦理av电影| 欧美va亚洲va国产综合| 欧美性猛交xxxx黑人交| 狠狠色丁香婷婷综合| 亚洲成人免费视| 欧美韩国一区二区| 欧美成人精品二区三区99精品| 一本一道久久a久久精品综合蜜臀| 免费欧美日韩国产三级电影| 精品999久久久| 欧美亚洲愉拍一区二区| 久久影音资源网| 一本久久综合亚洲鲁鲁五月天| 免费在线成人网| 一区二区三区日本| 久久久久久久久久久久久夜| 日韩欧美中文字幕公布| 91麻豆精品国产91久久久| 日日噜噜夜夜狠狠视频欧美人| 婷婷一区二区三区| 中文字幕av免费专区久久| 日本一区二区免费在线观看视频| 日韩激情一区二区| 亚洲一区二三区| 欧美一级日韩免费不卡| 成人午夜视频在线观看| 亚洲高清在线视频| 一区二区激情小说| 亚洲人成7777| 一区二区三区四区中文字幕| 亚洲区小说区图片区qvod| 中文字幕亚洲一区二区av在线| 亚洲国产精品国自产拍av| 久久久久一区二区三区四区| 日韩精品一区在线| 日韩一区二区三区四区| 欧美日韩成人一区二区| 欧美巨大另类极品videosbest| 91看片淫黄大片一级| 99视频精品在线| 99在线热播精品免费| 99久久精品国产观看| 91丝袜美女网| 在线精品视频免费播放| 欧美在线免费观看亚洲| 欧美日韩亚洲另类| 4438x亚洲最大成人网| 欧美一区二区视频网站| 日韩欧美一区二区不卡| 久久精品欧美一区二区三区麻豆| 久久欧美中文字幕| 国产精品乱码一区二区三区软件| 中文字幕在线不卡| 一区二区三区不卡在线观看 | 欧美日韩国产一级二级| 91精选在线观看| 久久久欧美精品sm网站| 中文字幕不卡三区| 亚洲国产精品一区二区久久 | 日韩在线一区二区| 久久成人久久鬼色| 东方aⅴ免费观看久久av| 99精品黄色片免费大全| 欧美日韩综合不卡| 欧美精品一区男女天堂| 国产精品三级久久久久三级| 亚洲一区精品在线| 美女网站视频久久| 成人午夜在线视频| 欧美视频在线一区| 精品国产髙清在线看国产毛片| 国产精品区一区二区三| 亚洲一区二区三区精品在线| 色美美综合视频| 日韩欧美国产小视频| 国产亚洲精品久| 亚洲一区二区三区国产| 美腿丝袜一区二区三区| 成人福利视频在线| 欧美影院一区二区三区| 欧美日韩精品欧美日韩精品一 | 菠萝蜜视频在线观看一区| 欧美色综合久久| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品欧美久久久久无广告| 日韩制服丝袜av| 成人毛片视频在线观看| 日韩欧美国产一区在线观看| 亚洲女女做受ⅹxx高潮| 美女视频一区二区| 在线欧美日韩精品| 国产欧美日韩一区二区三区在线观看| 亚洲精品欧美激情| 精品一区二区在线观看| 欧美性猛片aaaaaaa做受| 日本一区二区成人| 性感美女极品91精品| av激情综合网| 国产欧美日韩精品一区| av在线播放一区二区三区| 91精品福利在线一区二区三区| 国产精品久久久久久久久快鸭 | 国产精品入口麻豆原神| 老司机精品视频线观看86| 精品视频1区2区3区| 亚洲色图一区二区| 国产91综合网| www一区二区| 国产在线不卡一区| 日韩一区二区不卡| 蜜乳av一区二区| 日韩一区二区免费在线观看| 午夜亚洲国产au精品一区二区| 99久久精品一区| 亚洲区小说区图片区qvod| heyzo一本久久综合| 国产精品久久久久影院老司| 国产不卡在线播放| 久久久91精品国产一区二区三区| 麻豆精品在线视频| 精品国产乱码久久久久久图片 |