STM32F4 Discovery için SD kart projeleri

Başlatan z, 20 Aralık 2013, 15:54:03

z

Uzun süreden beri STM32F4 için örnek yayınlamıyordum.

Aşağıda örneği görülen program, SD kart kullanmayı çok kolaylaştırıyor.

2GB SD kart için hazırladığım kütüphane ile "PC"de herhangi bir ara işleme gerek kalmadan
yapılabilecek işlemler;

SD kartı formatlama
SD kartta dosya oluşturma
SD kartdaki dosyayı okuma
SD kartdaki dosyaya yazma

Bazı sınırlamaları yok değil.

Daha fazla detay ve örnek proje klasörü linki:  http://www.cncdesigner.com/wordpress/?p=3911


#include "STM32F4xx.h" 
struct Dosya
{
  char  Buffer[512];
  short NumOfSectors;
  short v[7];        
} File;

extern char fopen(char*,struct Dosya*,char);
extern char fread(struct Dosya*,char);
extern char fwrite(struct Dosya*,char);
extern char format(struct Dosya*);

int main()
{
char err;
int i;
          
//    err=format(&File);     // 2 Gb SD karti formatla
          
//    ZZZZ.TXT adinda bir dosya varsa ac, yoksa olustur
          
      if(!fopen("ZZZZ.TXT",&File,1))           
        {
//    Buffer alanini A harfi ile dolduralim
          for(i=0;i<512;i++) 
             {
               File.Buffer[i]='A'; 
             }          
//    Bufferdaki bilgileri ZZZZ.TXT dosyasinin 0x0000 adresine yazalim                  
          err=fwrite(&File,0);                                  
          if(!err)        
            { 
             fread(&File,0); // Dosyanin 0x0000 adresini okuyalim
             fread(&File,1); // Dosyanin 0x0200 adresini okuyalim
            }          
        } 
      else
        {
//           Dosya olusturulamadi                  
        }                

//    SD kartda AAA.TXT dosyasi varsa mavi ledi yak ve dosyayı oku
//    0. karakter 0x31 ise kirmizi ledi yak
//    1. karakter 0x32 ise kavunici ledi yak
//    AAA.TXT dosyasi yoksa yesil ledi yak
      
      err=fopen("AAA.TXT",&File,0); // AAA.txt adinda bir dosya varsa ac        
      if(!err)
        {
          GPIOD->BSRRL=0x8000;        
          err=fread(&File,0);    // Dosyanin 0x0000 adresini okuyalim
          if(!err)
            {                     
              if(File.Buffer[0]=='1') GPIOD->BSRRL=0x4000;       
              if(File.Buffer[1]=='2') GPIOD->BSRRL=0x2000;       
            }          
        }                
      else if(err==2) GPIOD->BSRRL=0x1000;  
        
      while(1);      
}

/*
      Err kodlari
          
      0: Gorev basarili
      1: Gorev basarisiz (Hata var vs) 
      2: Dosya bulunamadi 

      Olusturulan dosyanin uzunlugu 64K olarak sabittir.
      32000 adet dosya olusturabilirsiniz.
     
      fopen("Z.TXT",&File,0) Z.TXT dosyasini ac anlamindadir.
      fopen("Z.TXT",&File,1) Z.TXT dosyasini ac bu isimde dosya yoksa olustur anlamindadir.
      fread(&File,n) Acilmis dosyanin n x 512 adresinden 512 byte oku anlamindadir
      fwrite(&File,n) Acilmis dosyanin n x 512 adresine 512 byte yaz anlamindadir

      Dosya adi 0..9 A..Z ve _ Ingilizce karakterden olusabilir 
      Dosya adi max 8 karakter, dosya uzantisi max 3 karakter olmak zorundadir

*/

Bana e^st de diyebilirsiniz.   www.cncdesigner.com