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

📄 sd.lst

📁 基于STC51通过GPS自主定位导航FAT文件系统程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   SD                                                                    11/03/2007 17:08:47 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SD
OBJECT MODULE PLACED IN .\output\sd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\driver\sd.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PRINT(
                    -.\output\sd.lst) OBJECT(.\output\sd.obj)

line level    source

   1          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SD卡驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   2          //*文件名称:sd.c
   3          
   4          //*文件作用:SD卡驱动
   5          
   6          //*文件作者:翟  鹏
   7          
   8          //*创建日期:2004年5月
   9          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  10          
  11          
  12          
  13          #include <include.h>
  14          
  15          
  16          
  17          static uchar bdata Data=0;
  18          sbit Data0=Data^0;
  19          sbit Data1=Data^1;
  20          sbit Data2=Data^2;
  21          sbit Data3=Data^3;
  22          sbit Data4=Data^4;
  23          sbit Data5=Data^5;
  24          sbit Data6=Data^6;
  25          sbit Data7=Data^7;
  26          
  27          static uchar xdata CMD17[]={0x51,0x00,0x00,0x00,0x00,0xFF};//cmd17
  28          
  29          
  30          
  31          //********************************************************************************************************
             -***************
  32          //函数作用:io口模拟spi
  33          //参数说明:
  34          //注意事项:
  35          //返回说明:无
  36          //********************************************************************************************************
             -***************
  37          static void sd_write(void)
  38          {
  39   1              SD_CLK=0;
  40   1              SD_DI=Data7;
  41   1              SD_CLK=1;
  42   1      
  43   1              SD_CLK=0;
  44   1              SD_DI=Data6;
  45   1              SD_CLK=1;
  46   1      
  47   1              SD_CLK=0;
  48   1              SD_DI=Data5;
  49   1              SD_CLK=1;
  50   1              
  51   1              SD_CLK=0;
  52   1              SD_DI=Data4;
C51 COMPILER V7.20   SD                                                                    11/03/2007 17:08:47 PAGE 2   

  53   1              SD_CLK=1;
  54   1              
  55   1              SD_CLK=0;
  56   1              SD_DI=Data3;
  57   1              SD_CLK=1;
  58   1              
  59   1              SD_CLK=0;
  60   1              SD_DI=Data2;
  61   1              SD_CLK=1;
  62   1              
  63   1              SD_CLK=0;
  64   1              SD_DI=Data1;
  65   1              SD_CLK=1;
  66   1              
  67   1              SD_CLK=0;
  68   1              SD_DI=Data0;
  69   1              SD_CLK=1;
  70   1      }  
  71           
  72          //********************************************************************************************************
             -***************
  73          //函数作用:io口模拟spi
  74          //参数说明:
  75          //注意事项:
  76          //返回说明:无
  77          //********************************************************************************************************
             -***************
  78          static void sd_read(void)
  79          {
  80   1              SD_CLK=0;
  81   1              SD_CLK=1;
  82   1              Data7=SD_DO;
  83   1      
  84   1              SD_CLK=0;
  85   1              SD_CLK=1;
  86   1              Data6=SD_DO;
  87   1              
  88   1              SD_CLK=0;
  89   1              SD_CLK=1;
  90   1              Data5=SD_DO;
  91   1              
  92   1              SD_CLK=0;
  93   1              SD_CLK=1;
  94   1              Data4=SD_DO;
  95   1              
  96   1              SD_CLK=0;
  97   1              SD_CLK=1;
  98   1              Data3=SD_DO;
  99   1              
 100   1              SD_CLK=0;
 101   1              SD_CLK=1;
 102   1              Data2=SD_DO;
 103   1              
 104   1              SD_CLK=0;
 105   1              SD_CLK=1;
 106   1              Data1=SD_DO;
 107   1              
 108   1              SD_CLK=0;
 109   1              SD_CLK=1;
 110   1              Data0=SD_DO;
 111   1       }
 112          
C51 COMPILER V7.20   SD                                                                    11/03/2007 17:08:47 PAGE 3   

 113          //********************************************************************************************************
             -***************
 114          //函数作用:发送命令----在初始化时使用
 115          //参数说明:
 116          //注意事项:
 117          //返回说明:无
 118          //********************************************************************************************************
             -***************
 119          static uchar sd_send_cmd_init(uchar *cmd)
 120          {
 121   1              uchar xdata a,timeout=0;
 122   1      
 123   1              SD_CS=1;
 124   1              Data=0xff;sd_write();
 125   1              SD_CS=0;
 126   1              
 127   1              Data=cmd[0];sd_write();
 128   1              Data=cmd[1];sd_write();
 129   1              Data=cmd[2];sd_write();
 130   1              Data=cmd[3];sd_write();
 131   1              Data=cmd[4];sd_write();
 132   1              Data=cmd[5];sd_write();
 133   1              
 134   1              Data=0xff;
 135   1              while(Data==0xff)
 136   1              {  
 137   2                      sd_read();
 138   2                      for(a=0;a<255;a++);
 139   2                      for(a=0;a<255;a++);
 140   2                      for(a=0;a<255;a++);
 141   2                      if(timeout++>100)break;
 142   2              }
 143   1                      
 144   1              return Data;
 145   1      }
 146          
 147          //********************************************************************************************************
             -***************
 148          //函数作用:发送命令----在读写数据时使用
 149          //参数说明:
 150          //注意事项:
 151          //返回说明:无
 152          //********************************************************************************************************
             -***************
 153          static uchar SD_Send_Cmd(void)
 154          {
 155   1              uchar xdata timeout=0;
 156   1              
 157   1              SD_CS=1;
 158   1              Data=0xff;sd_write();
 159   1              SD_CS=0;
 160   1              
 161   1              Data=CMD17[0];sd_write();
 162   1              Data=CMD17[1];sd_write();
 163   1              Data=CMD17[2];sd_write();
 164   1              Data=CMD17[3];sd_write();
 165   1              Data=CMD17[4];sd_write();
 166   1              Data=CMD17[5];sd_write();
 167   1      
 168   1              Data=0xff;
 169   1              while(Data==0xff)
 170   1              {  
C51 COMPILER V7.20   SD                                                                    11/03/2007 17:08:47 PAGE 4   

 171   2                      sd_read();
 172   2                      if(timeout++>100)break;
 173   2              }
 174   1                                      
 175   1              return Data;
 176   1      }
 177          
 178          //********************************************************************************************************
             -***************
 179          //函数作用:初始化
 180          //参数说明:
 181          //注意事项:
 182          //返回说明:无
 183          //********************************************************************************************************
             -***************
 184          uchar SD_Init(void)
 185          {  
 186   1              uchar xdata retry;  
 187   1              uchar xdata CMD[]={0x40,0x00,0x00,0x00,0x00,0x95};//cmd0
 188   1      
 189   1              SD_CS=1;
 190   1              Data=0xff;sd_write();
 191   1              SD_CS=0;
 192   1              
 193   1              //Send the 1st command          
 194   1              retry=0;
 195   1              while(sd_send_cmd_init(CMD)!=0x01)
 196   1              {
 197   2                      dog();
 198   2                      if(retry++>200)return 1;
 199   2              }
 200   1              //Send the 2nd command  
 201   1              retry=0;
 202   1              CMD[0]=0x41;
 203   1              CMD[5]=0xFF;
 204   1              while(sd_send_cmd_init(CMD)!=0x00)  
 205   1              {
 206   2                      dog();
 207   2                      if(retry++>200)return 2;
 208   2              }      
 209   1              //Send the third command  set block size
 210   1              retry=0;
 211   1              CMD[0]=0x50;
 212   1              CMD[3]=((512&0xFF00)>>8);
 213   1              CMD[4]=(512&0x00FF);
 214   1              CMD[5]=0xFF;
 215   1              while(sd_send_cmd_init(CMD)!=0x00)
 216   1              {
 217   2                      dog();
 218   2                      if(retry++>200)return 3;
 219   2              } 
 220   1              
 221   1              SD_CS=1;  
 222   1              return 0;  
 223   1      }
 224          
 225          //********************************************************************************************************
             -***************
 226          //函数作用:设置当前扇区地址
 227          //参数说明:
 228          //注意事项:
 229          //返回说明:无
C51 COMPILER V7.20   SD                                                                    11/03/2007 17:08:47 PAGE 5   

 230          //********************************************************************************************************
             -***************
 231          void SD_Set_SectorAddr(ulong addr)
 232          {       
 233   1              (ulong)addr<<=9;
 234   1              *((ulong *)&CMD17[1])=addr;
 235   1      }

⌨️ 快捷键说明

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