在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > avr的SD卡基本讀寫程序(一)

            avr的SD卡基本讀寫程序(一)

            作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            /* SD Code for M32L */

            /* By pasyong */
            /* 2006-4 */
            /* Base ICC6.31A */
            /************************************************************/
            #include
            #include
            #include "1011.h"
            #define uchar unsigned char
            #define uint unsigned int
            #define MMC_CS_PIN BIT(4) //PORTB.4
            #define MMC_PORT PORTB

            本文引用地址:http://www.biyoush.com/article/201611/316550.htm

            uchar reading=0,a=0,pointer=0;
            void sd_port_init()
            {
            MMC_PORT|=MMC_CS_PIN;
            }
            uchar BUFFER[512]; //扇區(qū)緩沖區(qū)
            uint i=0;
            void delay_nus(uint n)
            {
            unsigned char b;
            for (b = 1; b;
            }
            //****************************************************************************
            //Send a Command to MMC/SD-Card
            //Return: the second byte of response register of MMC/SD-Card
            //****************************************************************************
            uchar SD_Write_Command(uchar cmd,unsigned long arg)
            {
            uchar tmp;
            uchar retry=0;

            //MMC_PORT|=MMC_CS_PIN; //SD卡關(guān)閉
            //send 8 Clock Impulse
            Write_Byte_SPI(0xFF);

            //set MMC_Chip_Select to low (MMC/SD-Card active)
            MMC_PORT&=~MMC_CS_PIN; //SD卡使能

            Write_Byte_SPI(cmd|0x40); //送頭命令
            Write_Byte_SPI(arg>>24);
            Write_Byte_SPI(arg>>16); //send 6 Byte Command to MMC/SD-Card
            Write_Byte_SPI(arg>>8);
            Write_Byte_SPI(arg&0xff);
            Write_Byte_SPI(0x95); //僅僅對RESET有效的CRC效驗(yàn)碼

            //get 8 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_SPI();
            retry++;
            }
            while((tmp==0xff)&&(retry<100)); //當(dāng)沒有收到有效的命令的時候

            if(reading==0)
            MMC_PORT|=MMC_CS_PIN; //MMC_CS_PIN=1;
            else MMC_PORT&=~MMC_CS_PIN; //MMC_CS_PIN=0;
            return(tmp);
            }
            //****************************************************************************
            //SD卡初始化(SPI-MODE)
            //****************************************************************************
            uchar SD_Init(void)
            {
            uchar retry,temp;
            uchar i;
            MMC_PORT&=~MMC_CS_PIN; //SD卡使能

            delay_nus(250); //Wait MMC/SD ready...
            for (i=0;i<0x0f;i++)
            {
            Write_Byte_SPI(0xff); //send 74 clock at least!!!
            }
            //Send Command CMD0 to MMC/SD Card
            retry=0;

            do
            { //retry 200 times to send CMD0 command
            temp=SD_Write_Command(0,0);
            retry++;
            if(retry==100)
            {
            ;//CMD0 Error!
            }
            }
            while(temp!=1);

            //Send Command CMD1 to MMC/SD-Card
            retry=0;
            do
            { //retry 100 times to send CMD1 command
            temp=SD_Write_Command(1,0);
            retry++;
            if(retry==100)
            {
            ;
            }
            }
            while(temp!=0);
            retry=0;
            SD_Write_Command(16,512); //設(shè)置一次讀寫B(tài)LOCK的長度為512個字節(jié)

            MMC_PORT|=MMC_CS_PIN; //MMC_CS_PIN=1; //set MMC_Chip_Select to high
            return(0); //All commands have been taken.
            }
            //****************************************************************************
            //從SD卡讀一個扇區(qū) Return 0 if no Error.
            //****************************************************************************
            uchar SD_Read_Block(unsigned long address)
            {
            uchar temp=0;uint i=0;
            reading=1;
            temp=SD_Write_Command(17,address); //讀出RESPONSE
            while (Read_Byte_SPI()!= 0xfe)
            {;} //直到讀取到了數(shù)據(jù)的開始頭0XFE,才繼續(xù)
            for(i=0; i<512; i++)
            {
            BUFFER[i]=Read_Byte_SPI();
            }
            Read_Byte_SPI();//CRC - Byte
            Read_Byte_SPI();//CRC - Byte
            reading=0;
            MMC_PORT|=MMC_CS_PIN; //關(guān)閉SD卡
            return(temp);
            }



            關(guān)鍵詞: avrSD卡讀寫程

            評論


            技術(shù)專區(qū)

            關(guān)閉