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

📄 sd_hal.c

📁 Atmega64单片机程序(完整工程)
💻 C
字号:
/*--------------File Info-------------------------------------------------------
** 文   件   名:    SD_Hal.c
** 最后修改日期:    2008.3.28
** 版        本:    V1.0
** 描        述:    硬件抽象层					
**------------------------------------------------------------------------------
** Created   by:    		
** Created date:			
*******************************************************************************/

#include "SYS_Config.h" 
#include "SD_Config.h" 
#include "SD_Hal.h" 

/**************************************************************
		
读写SD卡的SPI接口函数: SPI接口设置,发送/接收字节函数	
	

/*******************************************************************************
** 函数名称: void SD_Power()	Name:	  void SD_Power()
** 功能描述: 对卡先下电,再上电	Function: turn off the card's power, and turn on
** 输   入: 无			Input:	  NULL
** 输   出: 无			Output:	  NULL
*******************************************************************************/
void SD_Power(void)
{    
    INT16U i;
    
    SD_POWER_OUT();
    SD_POWER_OFF();
    
    SD_BUSY_LED_OUT();
    SD_BUSY_LED_OFF();
    
    SPI_SCK_OUT();
    SPI_SCK_CLR();
    
    SPI_MISO_OUT();
    SPI_MISO_CLR();
    
    SPI_MOSI_OUT();
    SPI_MOSI_CLR();
    
    SPI_CS_OUT();
    SPI_CS_CLR();
        
    for(i=0;i<0x2000;i++);//延时一段时间
    
    SD_POWER_ON();             	   										 
}

//**************************************************************************
//** 函数名称: SPI_INIT()
//** 功能描述: SPI初始化
//** 输   入: 无
//** 输   出: 无
//** 全局变量: 无
//** 调用模块: 无
//** 作   者: jjx
//** 日   期: 2008年2月25日
//**************************************************************************
void SPI_INIT(void)
{
    SPI_MISO_IN();
    SPI_MOSI_OUT();
    SPI_SCK_OUT();
    //设置spi通信模式,SPIE=0,SPE=1,DORD=0,MSTR=1,CPOL=1,CPHA=1,SPR1=1,SPR0=1;
    SPCR=(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0); 
    SPI_Clk_MIN();   
}

/*******************************************************************************
** 函数名称: void SD_HardWareInit()
** 功能描述: 初始化访问SD卡的硬件条件
** 输   入: 无
** 输   出: 无
*******************************************************************************/
void SD_HardWareInit(void)
{
    SD_Power();
    
    SD_INSERT_IN();
    SD_WP_IN();
    
    SPI_CS_OUT();
    SPI_CS_SET();     //cs置高
    
    SPI_INIT();       //设置spi接口模式
    SPI_Clk_MIN();    //设置spi频率最小
}

/*******************************************************************************
** 函数名称: void SPI_SendByte()
** 功能描述: 通过SPI接口发送一个字节
** 输   入: INT8U byte: 发送的字节
** 输   出: 无
*******************************************************************************/
void SPI_SendByte(INT8U byte)
{
    SD_BUSY_LED_ON();
    
    SPDR=byte;                 //启动数据传输
    while(!(SPSR&(1<<SPIF)));  //等待传输结束
    
    SD_BUSY_LED_OFF();
}


/*******************************************************************************
** 函数名称: INT8U SPI_RecByte()
** 功能描述: 从SPI接口接收一个字节
** 输   入: 无
** 输   出: 收到的字节
*******************************************************************************/
INT8U SPI_RecByte(void)
{
    INT8U temp; 
    
    SD_BUSY_LED_ON();
    
    SPDR=0xFF;                 //启动数据传输
    while(!(SPSR&(1<<SPIF)));  //等待传输结束
    temp = SPSR;//清空SPIF
    
    SD_BUSY_LED_OFF();
    
    return SPDR;
}

/*******************************************************************************
** 函数名称: void SPI_CS_Assert()
** 功能描述: 片选SPI从机
** 输   入: 无
** 输   出: 无
*******************************************************************************/
void SPI_CS_Assert(void)
{
    SPI_CS_CLR();
    /* 片选SPI从机  select the SPI slave */
}


/*******************************************************************************
** 函数名称: void SPI_CS_Deassert()
** 功能描述: 不片选SPI从机
** 输   入: 无
** 输   出: 无
*******************************************************************************/
void SPI_CS_Deassert(void)
{
    SPI_CS_SET();
    /* 不片选SPI从机  not select the SPI slave */
}

/*******************************************************************************
** 函数名称: void SD_ChkCard()
** 功能描述: 检测卡是否完全插入
** 输   入: 无
** 输   出: 1: 卡完全插入	0: 卡没有完全插入
*******************************************************************************/
INT8U SD_ChkCard(void)
{
    if(SD_INSERT_STATUS()!=0)
        return 0x00 ;/* 未完全插入 not insert entirely */
    else 
        return 0x01 ;/* 完全插入 insert entirely */
}

/*******************************************************************************
** 函数名称: void SD_ChkCardWP()
** 功能描述: 检测卡写保护
** 输   入: 无
** 输   出: 0: 卡已写保护	1: 卡未写保护
*******************************************************************************/
INT8U SD_ChkCardWP(void)
{
    if(SD_WP_STATUS()!=0x00)
        return 0x01 ; /* 卡未写保护 */
    else 
        return 0x00 ; /* 卡写保护 */
}




⌨️ 快捷键说明

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