当前位置:首页 > 单片机 > 单片机
[导读] SD卡接口程序/******************************************//* SD Code for M32L *//* By pasyong *//* 2006-4 *//* Base ICC6.31A *//************************************************************/

SD卡接口程序/******************************************/
/* 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


uchar reading=0,a=0,pointer=0;
void sd_port_init()
{
MMC_PORT =MMC_CS_PIN;
}
uchar BUFFER[512]; //扇区缓冲区
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卡关闭
//send 8 CLOCk Impulse
Write_Byte_SPI(0xFF);

//set MMC_Chip_Select to low (MMC/SD-Cardactive)
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效验码

//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)); //当没有收到有效的命令的时候

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); //设置一次读写BLOCK的长度为512个字节

MMC_PORT =MMC_CS_PIN; //MMC_CS_PIN=1; //set MMC_Chip_Select to high
return(0); //All commands have been taken.
}
//****************************************************************************
//从SD卡读一个扇区 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)
{;} //直到读取到了数据的开始头0XFE,才继续
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; //关闭SD卡
return(temp);
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着科技的飞速发展,电子产品在我们日常生活中扮演着越来越重要的角色。而在这些电子产品中,接口作为连接设备与外部设备的桥梁,其重要性不言而喻。其中,Type-C接口作为一种新型的接口标准,因其独特的优势,逐渐成为了众多电子...

关键字: 电子产品 Type-C 接口

随着电动汽车的普及,充电桩作为电动汽车的重要基础设施,越来越受到人们的关注。然而,对于许多电动汽车用户来说,直流充电桩和交流充电桩的接口和区别仍然是一个令人困惑的问题。本文将从接口和区别两个方面,详细探讨直流充电桩和交流...

关键字: 电动汽车 接口 充电桩

武汉2023年9月19日 /美通社/ -- 目前,在国家政策和市场需求双重驱动下,国内数据库行业呈现出百花齐放的态势。充分竞争的市场环境下,达梦数据连续数年保持中国数据库管理系统市场占有率前列地位,成为当之无愧的国产数据...

关键字: DM DSC 国家电网 接口

深圳2023年9月15日 /美通社/ -- 9月14-15日,2023全球AI芯片峰会(GACS 2023)在深圳正式举行。峰会以【AI 大时代 逐鹿芯世界】为主题,共探AI芯片的产学研用,邀请了清华大学教授、中国半导体...

关键字: 接口 芯科 内存 AC

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

Type-C接口已经成为当今市场上备受青睐的接口之一。它以其小巧轻便、高速传输、支持多种协议等特点,吸引了越来越多的关注。

关键字: Type-C 接口 USB

USB-C和Type-C是两种不同的USB接口类型,它们在外观、结构和功能上有一些区别。下面将详细介绍这两种接口类型的区别和特点,帮助大家更好地了解和认识它们。

关键字: usb-c type-c 接口

USB接口是现代电子设备中常用的接口之一,它具有通用性强、传输速度快、易于使用等特点。USB接口的应用范围非常广泛,从智能手机、笔记本电脑到电脑外设、智能家居等都可以看到它的身影。在USB接口的发展历程中,出现了多种不同...

关键字: USB 接口

USB接口是一种常见的串行接口,它的全称是Universal Serial Bus,由USB Implementers Forum制定。USB接口具有通用性强、传输速度快、支持多种设备同时连接等优点,因此在现代电子设备中...

关键字: USB 接口 串行接口

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制...

关键字: AVR 单片机 计算机
关闭
关闭