SD卡接口程序(AVR)

发布者:创意火花最新更新时间:2017-12-18 来源: eefocus关键字:SD卡  接口程序  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);
}


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

上一篇:AVR单片机节约I/O口的键盘程序设计
下一篇:AVRGCC RS-485示范程序

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

基于AVR单片机的负荷缸多路遥控开关编解码实现
负荷缸是船舶电力核心发电机性能的负荷试验必备的重要工装设备,通过负荷试验,可以检验发电机长期工作的性能稳定的情况(静态特性)和对突加突卸负荷的应变能力(动态特性)。AVR单片机具有高性能低价格的优点,在本文中利用AVR单片机对发电机负荷缸的多路远程遥控开关量进行采集监控并进行数字信号编解码,用2芯的电缆取代原来40芯的粗电缆传输控制信号,有效地解决了工作中遇到的问题。 1 问题的提出 我们通过把由发电机供电的通电极板放到负荷缸水电阻中,用充气升降极板和补给水调节水电阻大小的方法控制试验发电机所带负荷的大小,对发电机的性能进行试验。体积庞大的负荷缸一般放置在码头,在船舶发电机的负荷试验中需要在船舶配电板处控制负荷缸的各个部件,所
[单片机]
Arduino+Avr libc制作Badusb原理及示例讲解
一、 前言 2014年美国黑帽大会上研究人员JakobLell和Karsten Nohl展示了badusb的攻击方法后,国内与badusb相关的文章虽然有了一些,但是大部分人把相关文章都阅读后还是会有种“不明觉厉”的感觉,badusb仍有一层朦胧的面纱。经过一段时间的学习和研究后,笔者希望通过自己的一些心得体会可以帮助其他人更清晰地认识badusb,也希望这篇文章能够起到一定的启发。这篇文章主要分为五个部分——知识扫盲部分、badusb固件编写部分、badusb配置界面部分、技术展望部分和总结部分。 二、硬件准备 本文使用的硬件是Arduino Leonardo开发板,但是不难将Leonardo开发板替换为其它Arduino
[单片机]
Arduino+<font color='red'>Avr</font> libc制作Badusb原理及示例讲解
基于AVR单片机直线开关磁阻电机高精度位置控制
一、项目概述 1.1 引言 电机是工业生产不可缺少的动力设备,电机的品种很多,作用也相当广泛。直线开关磁阻电机时一种新型的牵引电机。其主要有以下优点:结构简单,制作成本不高。工作稳定且能够在恶劣的环境下长时间正常工作,比如高温环境,开关磁阻电机有较好的散热性能,可以在高温下正常工作。随着电力电子技术的发展,开关磁阻电机控制将会变得更加容易并且控制效果更好。这种电机启动转矩大,过载能力强,调速范围广。直线开关磁阻电机除了具有以上优点以外,在一些需要做直线运动的场合,它显示出了强大的优越性:再也不需要像传统的做直线运动的装置那样,通过丝杆等传动装置将旋转的运动转化为直线运动。这样再一次的将中间环节给节省下来了,不仅
[单片机]
基于<font color='red'>AVR</font>单片机直线开关磁阻电机高精度位置控制
AVR_M8 BootLoader应用范例
//meg8 bootloader //BOOTSZ1 BOOTSZ0=00 //meg8 bootloader //BOOTSZ1 BOOTSZ0=00 #include iom8v.h #define SPM_PAGESIZE 64 //M8的一个Flash页为64字节(32字) #define BAUD 38400 //波特率采用38400bps #define CRYSTAL 8000000 //系统时钟8MHz //计算和定义M128的波特率设置参数 #define BAUD_SETTING (unsigned char)((unsigned long)CRYSTA
[单片机]
基于AVR单片机的SPI接口的25C256
基于AVR单片机的SPI接口的25C256(EEPROM)的驱动程序 /**********************************硬件宏定义***********************************/ #define SelectMemory1() (PORTA&=~0X01) #define DeselectMemory1() (PORTA|=0X01) #define ClrHoldMemory1() (PORTA&=~(0X01 2)) #define SetHoldMemory1() (PORTA|=(0X01 2)) /***********************************初始化SP
[单片机]
采用AVR的小型采暖炉控制系统抗干扰设计
1. 引言: 单片机在工业控制领域应用时不同于民用、商用领域中的应用,工业控制所处的环境相对比较恶劣,干扰源多,其常见干扰源来自现场工业电气在投入、运行、切断等工况下产生的静电感应、尖峰电压、浪涌电流等干扰。实践表明,在工作室中按用户要求设计的小型工业采暖控制系统,尽管各项逻辑功能及技术指标的测试都正常,但该系统拿到现场上却不能使用,检测失灵,操作失控,显示花屏等现象接踵而来。经分析,其干扰是从现场不同路径传入单片机控制系统的。切断干扰源,提高单片机抗干扰能力是解决控制系统正常工作的前提。 2 抗干扰措施 2.1 测温信号的抗干扰 测温电路采用的是单总线芯片DS18B20,该芯片具有测温精度高,连接线路简单等优点,其测温范围为-55
[单片机]
采用<font color='red'>AVR</font>的小型采暖炉控制系统抗干扰设计
avr的外部中断
关于AVR中断: 系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕以后再返回原来的主程序继续运行,这就是中断。 主程序一旦进入中断服务程序,那么AVR芯片将自动的关闭全局中断,在这个期间不再执行其它的中断请求,直到中断程序结束以后芯片才自动的重新开放全局中断。(注意,在这个期间某些中断请求可能会被丢弃,某些请求会留下中断请求标致,一旦当前的中断执行完毕,这个有中断标致的请求就有可能马上得到响应,如INT0的下降沿触发就会留下中断请求标致,而低电平触发就不会流下中断请求标致)。如果你想在执行中断服务程序时响应另外一个更重要的中断,那么就要在中断服务程
[单片机]
基于AVR单片机的ISP1362 OTG控制设计
  0 引言   本文采用的设计方案是基于Philips公司的ISP1362 OTG控制芯片,参照最新的USB OTG技术规范,设计了一种遵循USB协议的主/从机系统。   1 ISP1362芯片的内部结构   Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有3个USB控制器一主机控制器、设备控制器和OTG控制器。其中,主机控制器具备高度优化的USB主机功能;设备控制器则具有多达14个可编程端点,又可以被配置成双缓冲端点进一步提高吞吐量:而OTG控制器主要提供包括监控和转换功能在内的所有OTG控制。ISP1362内部构造如图1所示。      2 USB OTG主/从机系统设计
[单片机]
基于<font color='red'>AVR</font>单片机的ISP1362 OTG控制设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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