在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            AVR的SD卡接口程序

            作者: 時間:2011-11-25 來源:網(wǎng)絡(luò) 收藏

            程序/*****************************************************/
            /* SD Code for M32L */
            /* By pasyong */
            /* 2006-4 */
            /* Base ICC6.31A */
            /************************************************************/
            #include iom32v.h>
            #include macros.h>
            #include "1011.h"
            #define uchar unsigned char
            #define uint unsigned int
            #define MMC_CS_PIN BIT(4) //PORTB.4
            #define MMC_PORT PORTB

            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; bn; 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(arg0xff);
            Write_Byte_SPI(0x95); //僅僅對RESET有效的CRC效驗碼

            //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)(retry100)); //當(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;i0x0f;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; i512; 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)鍵詞: AVR SD卡接口

            評論


            相關(guān)推薦

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

            關(guān)閉