⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dm_mmc.c

📁 采用美国adi公司的bf系列
💻 C
字号:
/************************************************************************** 
文件名称: dm_mmc.c
作者: Andy
版本: 0.1 
创建时间 : 2007-04 
描述: 
	文件实现了SD/MMC卡SPI模式的读写底层功能
修改历史: 
****************************************************************************/ 
#include <stdio.h>
#include <cdefBF53x.h>
#include "dm_types.h"
#include "dm_mmc.h"
#include "dm_bf5xx.h"
/****************************************************************************
* 名称 : SPI_TransferByte
* 功能 : 将数据value发出
* 入口参数 :value
* 出口参数 :incoming    返回读取的数据
****************************************************************************/
uint8_t SPI_TransferByte(uint8_t value)
{ 
	uint8_t  incoming=0;	
	while((*pSPI_STAT & TXS));
	*pSPI_TDBR = value;
	
	while(*pSPI_STAT & RXS)
	incoming = *pSPI_RDBR;
	
	return(incoming);
}
/****************************************************************************
* 名称 : MMC_Init
* 功能 : 初始化MMC Card
* 入口参数 :无
* 出口参数 :1
****************************************************************************/
uint8_t MMC_Init(void)
{
    uint8_t retry,temp;
    uint8_t i;
    
    for (i=0;i<10;i++)
    {
    	SPI_TransferByte(0xff); //send 74 clock at least!!!
    }
    
    SPI_TransferByte(MMC_RESET);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x00);
    SPI_TransferByte(0x95);
    SPI_TransferByte(0xff);
    SPI_TransferByte(0xff);
    
	retry=0;
    do{
    	temp=Write_Command_MMC(MMC_INIT,0);
	    retry++;
    	if(retry==100)
        {
	    printf("MMC_INIT is ERROR!\r\n");
            return(INIT_CMD1_ERROR);        
        }
    }while(temp!=0);
    printf("MMC_INIT is OK!\r\n");
    	
    return (1);
}

/****************************************************************************
* 名称 : Write_Command_MMC
* 功能 : 向MCC卡写命令 ,将命令字cmd送入地址address,返回状态值tmp
* 入口参数 :cmd,address
* 出口参数 :tmp
****************************************************************************/
uint8_t Write_Command_MMC(uint32_t cmd, uint32_t address)
{
	uint8_t tmp;
	uint8_t retry=0;
	
	SPI_TransferByte(cmd);
	SPI_TransferByte(address>>24);
	SPI_TransferByte(address>>16);
	SPI_TransferByte(address>>8);
	SPI_TransferByte(address);
	SPI_TransferByte(0xFF);
	
	do{
		tmp = SPI_TransferByte(0xFF);
		retry++;
	}while((tmp==0xff)&&(retry<8));
	
	return(tmp);
}

/****************************************************************************
* 名称 : MMC_read_sector
* 功能 : 读取MMC卡扇区数据,指定要读的扇区号和将数据传入的buff地址
* 入口参数 :addr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -