AVR的SD卡接口程序

发布者:等风来88888最新更新时间:2017-12-17 来源: eefocus关键字:AVR  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-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(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); 


关键字:AVR  SD卡  接口程序 引用地址:AVR的SD卡接口程序

上一篇:DS1302的AVR程序(2000年~2099年的星期自动计算功能)
下一篇:在数码管上显示ADIN0口输入的电压

推荐阅读最新更新时间:2024-03-16 15:49

基于单片机C8051F020的液晶显示的接口电路和程序实现与设计
在单片机系统设计中,LCM(液晶显示模块)人机交互界面的设计往往是很重要的一个环节。LCM可以用于智能仪器上的显示设定参数、状态提示符、检测结果和待输入参数等功能。本文结合电解质分析仪的设计要求,采用液晶显示模块YXD—12864A2LCM,研究并实现了以单片机C8051F020为基础的液晶显示的接口电路和程序设计,添加了按键系统,从而达到方便用户使用的目的。 1电解质分析仪简介 本系统所设计的电解质分析仪(Electrolyte Analyzer)是一种具有高分辨率和高精度的仪器,可以与多种离子选择电极配套使用,可用自动方法测定样品中钾、钠、氯、钙离子的浓度和pH值。其结构方框图如图1所示。仪器采用单片机C8051F02
[单片机]
基于单片机C8051F020的液晶显示的<font color='red'>接口</font>电路和<font color='red'>程序</font>实现与设计
AVR掉电保护电路设计图剖析 —电路图天天读(221)
  AVR自带的BOD电路,作用是在电压过低(低于设定值)时产生复位信号,防止CPU意外动作。对EEPROM的保护作用是当电压过低时保持RESET信号为低,防止CPU意外动作,错误修改了EEPROM的内容而我们所理解的掉电检测功能是指具有预测功能的可以进行软件处理的功能。   例如,用户想在电源掉电时把SRAM数据转存到EEPROM,可行的方法是外接一个在4.5V翻转的电压比较器 (VCC=5.0V,BOD=2.7V),输出接到外部中断引脚(或其他中断),一但电压低于4.5V,马上触发中断,在中断服务程序中把数据写到 EEPROM中保护起来注意:写一个字节的EEPROM时间长达8mS,所以不能写入太多数据,电源滤波电容也要选大
[单片机]
<font color='red'>AVR</font>掉电保护电路设计图剖析 —电路图天天读(221)
AVR位操作记录
说实话,偶是头一次遇到这么用的,Mark。 #define BIT(x) (1 (x)) #define GET_PORT(x, bit) (PORT ## x) #define GET_PIN( x, bit) (PIN ## x) #define GET_BIT(x,bit) (bit) #define PORT_OUT0(portx_bit) ( GET_PORT(portx_bit) &= ~BIT(GET_BIT(portx_bit)) ) #define PORT_OUT1(portx_bit) ( GET_PORT(portx_bit) |= BIT(GET_BIT(portx_bit)) )
[单片机]
AVR Stduio安装与使用
从光盘中找到AVR Stduio安装文件,或者从网上下载AVR Stduio 4.13版,该软件是免费软件,可以直接到AVR的官方网站上下载。 双击安装文件,出现如下画面, 接着出现如下画面 然后出现如下画面,点击“NEXT“ 出现如下画面,选择“I accept…”,点击“NEXT”,继续安装。 根据出现的画面,选择“NEXT”安装。 点击Finish完成安装。 注意:打开电源,等JTAG上的小灯不闪了之后再打开软件。否则会出现错误。 可在“开始”,所有程序中找到Atmel AVR Tools里面的AVR Studio 4。 打开AV
[单片机]
<font color='red'>AVR</font> Stduio安装与使用
ATtiny2313 内核介绍
本节从总体上讨论ATtiny2313 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必须能够访问存储器、执行运算、控制外设以及处理中断。 结构综述Figure 3. AVR 结构的方框图 为了获得最高的性能以及并行性, AVR 采用了Harvard 结构,具有独立的数据和程序总线。程序存储器里的指令通过一级流水线运行。CPU 在执行一条指令的同时读取下一条指令( 在本文称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器是可以在线编程的FLASH。 快速访问寄存器文件包括32 个8 位通用工作寄存器,访问时间为一个时钟周期。从而实现了单时钟周期的ALU 操作。在典型的ALU 操作中,两个位于寄存
[单片机]
ATtiny2313 内核介绍
AT89C52单片机的SD卡读写电路与程序设计
设计方案   应用AT89C52读写SD卡有两点需要注意。首先,需要寻找一个实现AT89C52 单片机 与SD卡通讯的解决方案;其次,SD卡所能接受的逻辑电平与AT89C52提供的逻辑电平不匹配,需要解决电平匹配问题。   通讯模式   SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,AT89C52单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式
[单片机]
基于AVR单片机LED显示屏的灰度设计与实现
  led点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,led显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASHROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介   AVR单片机是增强型内置FLASH的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个时钟周期可
[单片机]
基于<font color='red'>AVR</font>单片机LED显示屏的灰度设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved