📄 sd_hal.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 + -