Site icon Ercan Koçlar

SD Kart ( SD Mode) ve Fat32 – MikroC Kütüphanesi

fat32-sd-kart-kapak

fat32-sd-kart-kapak

This post is also available in: English (İngilizce)


 


Bu derste SD kartlar(SD Mode) ve FAT32 için yazdığım mikroC kütüphanesinin kullanımı göreceğiz. Ancak ilk olarak SD kart ile başlayacağım. SD kart ve FAT32 aynı kütüphane için entegre şekilde yazıldı, bu sebeple öncelikle SD kart devresinin kurulumu ve kullanımını öğrendikten sonra FAT32 ile dosya işlemlerine geçeceğiz.

Bu derste okuyacaklarınız 22 aylık bir çalışma sonucunda ortaya çıkan kütüphanenin yalnızca kullanım kısmıdır.

SD Kart(SD Mode)

SD Mod

SPI Mod

Bağlantı için tüm pinler kullanılır-(isternirse sadece Data0 kullanılarakta sürülebilir) Bağlantı için sadece 3 pin kullanılır
Veri aktarım hızı en az 50 Mhz dir Veri aktarım hızı ? mhz dir
Veri aktarmak için tüm data portları    (Data0,Data1,Data2,Data3) kullanılır. Veri ve komutlar aynı tek pinden aktarılır.
Komutlar ve diğer tüm işlemler ayrı pinlerden yapıldığından çok hızlıdır. Veri, komut ve cevaplar aynı pin üzerinden yapıldığından oldukça yavaştır.
UHS gibi çok yüksek hız modlarını destekler UHS gibi modları kesinlikle desteklemez
CRC kontrolü sağlar, böylece verilerin sağlamlığı garanti altına alınır. CRC kontrolü bulunmaz, veriler bozulmuş olarak kayıt edilebilir.
SD mod sürücü kodları yüksek fiyatlar ile satılır.(benim yazdığım ücretsiz!) SPI mod sürücü kodları ücretsiz bulunabilir.

SD Kart Pinleri ve İşlevleri

SD kartın pinleri görülmekte.

SD Kart Sürücü Devresi

Devre Şeması

SD kart – SD mod için gerekli Devre Şeması

Gerekli Malzemeler

  1. 4 Adet 47K direnç
  2. 1 Adet IP4252CZ8 Pasif Filtre
  3. 1 Adet SD Kart Soketi
  4. Delikli Pertinaks
IP4252CZ8
MikroSD Kart Soketi

 

 

 

 

 

 

 

Devrenin Yapımı

SD Kart  IP4252CZ8 pasif filtre
SD Kart SD Mod Sürücü Devresi

SD Kart SD Mod Yazılımı

SD kart kütüphanesinin test edildiği SD kartların bir kısmı görülmektedir.

Fonksiyonlar

1-Genel Maksatlı Ana Fonksiyonlar

 

– SD_CLOCK Fonksiyonu

Fonksiyon : void SD_CLOCK(unsigned char dongu_sayisi)

Amacı : SD kartın kalp atışlarını oluşturur. SD kartta her komut her işem her bit bir clock darbesi ile işlem görür.

Parametreler:

Kullanım Şekli : 

SD_CLOCK(80);//80 adet clock sinyali gönderilir.

Geri Bildirim: Void tipinde olduğundan geriye herhangi bir değer döndürmez.

 

SD_SDMOD_ANALIZ Fonksiyonu

Fonksiyon : unsigned char SD_SDMOD_ANALIZ(unsigned char SD_VERI_YOLU_GENISLIGI)

Amacı : SD kartı tanımlamak için en başta kullanılır. Öncelikle sd kartı uyandırıp ona birtakım komutlar göndererek onun hakkındaki bilgiyi toplar. Sahip olduğu parametre de iki seçenek vardır

Parametreler:

Kullanım Şekli:

SD_SDMOD_ANALIZ(4); // 4 bit mod aktif edildi

Geri Bildirim:

 

SD_MOD_VERI_YAZMA_RUTINI_4BIT Fonksiyonu

Fonksiyon : unsigned char SD_MOD_VERI_YAZMA_RUTINI_4BIT()

Amacı : SD kart için 4 bit mod seçildiğinde yazılım tüm yazma işlemleri için bu fonksiyonu çağırır.

Parametre : Bulunmuyor.

Kullanım Şekli:

SD_MOD_VERI_YAZMA_RUTINI_4BIT(); // 4 bit mod aktif edildiğine göre kullanılacak veri yazma rutini

Geri Bildirim:

 

SD_MOD_VERI_YAZMA_RUTINI_1BIT Fonksiyonu

Fonksiyon : unsigned char SD_MOD_VERI_YAZMA_RUTINI_1BIT()

Amacı : SD kart için 1 bit mod seçildiğinde yazılım tüm yazma işlemleri için bu fonksiyonu çağırır.

Parametre : Bulunmuyor.

Kullanım Şekli:

SD_MOD_VERI_YAZMA_RUTINI_1BIT(); // 1 bit mod aktif edildiğine göre kullanılacak veri yazma rutini sadece data0 kullanılır

Geri Bildirim:

 

SD_MOD_VERI_OKUMA_RUTINI_4BIT  Fonksiyonu

Fonksiyon : unsigned char SD_MOD_VERI_OKUMA_RUTINI_4BIT()

Amacı : SD kart için 4 bit mod seçildiğinde yazılım tüm okuma işlemleri için bu fonksiyonu çağırır.

Parametre : Bulunmuyor.

Kullanım Şekli:

SD_MOD_VERI_OKUMA_RUTINI_4BIT();//4 bit mod aktif edildiğine göre kullanılacak veri okuma rutini

Geri Bildirim:

 

SD_MOD_VERI_OKUMA_RUTINI_1BIT  Fonksiyonu

Fonksiyon : unsigned char SD_MOD_VERI_OKUMA_RUTINI_1BIT()

Amacı : SD kart için 1 bit mod seçildiğinde yazılım tüm okuma işlemleri için bu fonksiyonu çağırır.

Parametre : Bulunmuyor.

Kullanım Şekli:

SD_MOD_VERI_OKUMA_RUTINI_1BIT();//1 bit mod aktif edildiğine göre kullanılacak veri okuma rutini

Geri Bildirim:

 

2- Sektör Yazma Fonksiyonları

 

SD_MOD_TEK_BLOK_YAZ Fonksiyonu

Fonksiyon : unsigned char SD_MOD_TEK_BLOK_YAZ(unsigned long BLOK_ADRESI)

Amacı : Data tamponuna yüklenmiş olan veriyi adresi verilen blok’a yazar. Tek blok yazar.

Parametre:

Kullanım Şekli:

//tampona veri aktarılması
//boş olan dizilerde eğer rastgele değerler duruyorsa onlarda olduğu gibi aktarılır
SD_DATA_TAMPONU[0]=121545;
SD_DATA_TAMPONU[1]=415464;
SD_DATA_TAMPONU[2]=2342342;
SD_DATA_TAMPONU[3]=23432432;
//tampona veri yüklendikten sonra yazma komutu verilir
SD_MOD_TEK_BLOK_YAZ(3);//3. blok'a veriyi yaz

Geri Bildirim:

 

2A – Çoklu Yazma Fonksiyonları

 

SD_COKLU_BLOK_YAZ_BASLAT Fonksiyonu

Fonksiyon  : unsigned char SD_COKLU_BLOK_YAZ_BASLAT(unsigned long BLOK_ADRESI,unsigned long YAZILACAK_BLOK_SAYISI)

Amacı : Çoklu yazma işlemini başlatır. Yazmanın başlayacağı adresi ve kaç adet blok yazacağını belirterek SD kartın o bölgeleri önceden silip vakit kazanılmasını sağlar.

Parametre:

Geri Bildirim:

 

SD_COKLU_BLOK_YAZ_VERIGONDER Fonksiyonu

Fonksiyon : unsigned char SD_COKLU_BLOK_YAZ_VERIGONDER()

Amacı : Tampona yüklenmiş olan veriyi gönderir.

Parametre : Bulunmuyor.

Geri Bildirim :

 

SD_COKLU_BLOK_YAZ_BITIS Fonksiyonu

Fonksiyon : unsigned char SD_COKLU_BLOK_YAZ_BITIS()

Amacı : Çoklu yazma işlemini sonlandırır.

Parametre : Bulunmuyor.

Geri Bildirim :

Çoklu Yazma Fonksiyonları Kullanım Şekli:

SD_COKLU_BLOK_YAZ_BASLAT(10,5);//çoklu yazıma hazırlık yapılıyor
//5 adet blok yazılacağı için i değeri 5 e ayarlandı.
for(İ=0;i<5;i++)
  {
     veri güncelleme işlemi//(Tampondaki veriyi güncelleyen herhangi bir fonksiyon)
     SD_COKLU_BLOK_YAZ_VERIGONDER();
  }
SD_COKLU_BLOK_YAZ_BITIS();//yazım sonlandırıldı

 

3-Sektör Okuma Fonksiyonları

 

SD_MOD_TEK_BLOK_OKUMA Fonksiyonu

Fonksiyon : unsigned char SD_MOD_TEK_BLOK_OKUMA(unsigned long BLOK_ADRESI)

Amacı : SD karttan tek bir blok okur ve veriyi tampona yükler.

Parametre : 

Kullanım Şekli:

SD_MOD_TEK_BLOK_OKUMA(0);// ilk blok okunur

Geri Bildirim:

3A-Çoklu Okuma Fonksiyonları

 

SD_COKLU_BLOK_OKUMA_BASLAT Fonksiyonu

Fonksiyon : unsigned char SD_COKLU_BLOK_OKUMA_BASLAT(unsigned long BLOK_ADRESI)

Amacı : SD karta okuma yapılacak blok adresi vererek kartı okumaya hazırlar.

Parametre :

Geri Bildirim:

 

SD_COKLU_BLOK_OKUMA_VERIOKU  Fonksiyonu

Fonksiyon : unsigned char SD_COKLU_BLOK_OKUMA_VERIOKU()

Amacı : Belirtilen adresten itibaren SD karttan blok blok veri okuyarak data tamponuna yazar.

Parametre : Bulunmuyor.

Geri Bildirim :

 

SD_COKLU_BLOK_OKUMA_BITIS Fonksiyonu

Fonksiyon : unsigned char SD_COKLU_BLOK_OKUMA_BITIS()

Amacı : SD karta okuma işleminin sona erdiğini bildirir.

Parametre : Bulunmuyor.

Geri Bildirim :

Çoklu Okuma Fonksiyonları Kullanım Şekli:

SD_COKLU_BLOK_OKUMA_BASLAT(100);//çoklu okuma başlangıç adresi bildirildi
//30 adet blok okunacağı için bu değer verildi
for(İ=0;i<30;i++)
  {
     SD_COKLU_BLOK_OKUMA_VERIOKU();
     veri kullanım işlemi ;// Her okumada veri kullanılmalıdır. Aksi halde yeni okunan veri eskilerin üzerine yazılacaktır.  
  }
SD_COKLU_BLOK_OKUMA_BITIS();//okuma sonlandırıldı

 

4- Sektör Silme Fonksiyonları

 

SD_MOD_SEKTOR_SIL Fonksiyonu

Fonksiyon : unsigned char SD_MOD_SEKTOR_SIL(unsigned long BASLANGIC_ADRESI,unsigned long BITIS_ADRESI)

Amacı : Belirtilen başlangıç ve bitiş sektörleri de dahil olarak aradaki tüm sektörleri siler

Parametre:

Kullanım Şekli:

SD_MOD_SEKTOR_SIL(12224,12224);//12224. sektörü siler
SD_MOD_SEKTOR_SIL(100,1000);//100. sektörden 1000. sektöre kadar tüm sektörleri siler

Geri Bildirim :

 

5-Komut Fonksiyonları

SD karta gönderilen komutların ve gelen cevabın osiloskop üzerinde incelenmesi.

CMD0 Komutu

Fonksiyon : void CMD0()
Amacı : SD kartı resetleyerek başlangıç konumuna getirir.

 

CMD8 Komutu

Fonksiyon : unsigned char CMD8()
Amacı : SD kartı tanımlayarak hangi voltaj aralığında çalışacağını belirler

 

CMD55 Komutu

Fonksiyon  : unsigned char CMD55(unsigned int RCA_ADRESI)
Amacı : SD kart sisteminde ACMD komutlarından önce gönderilir.

 

ACMD41 Komutu

Fonksiyon : unsigned char ACMD41()
Amacı : SD kartın voltaj aralığı kart tipi gibi bilgileri belirler

 

CMD2 Komutu

Fonksiyon : unsigned char CMD2()
Amacı : SD kartın CID parametrelerini okur.

 

CMD3 Komutu

Fonksiyon : unsigned char CMD3()

Amacı : SD kart için kimlik üretir. RCA kodu.

 

CMD9 Komutu

Fonksiyon : unsigned char CMD9(unsigned int RCA_ADRESI)

Amacı : SD kartın CSD bilgilerini alır.

 

CMD7 Komutu

Fonksiyon : unsigned char CMD7(unsigned int RCA_ADRESI)

Amacı : RCA adresi yazılan kartı seçer, diğerleri boşta durumuna geçerler

 

ACMD6 Komutu

Fonksiyon : unsigned char ACMD6()

Amacı : Veriyolu genişliğini 4 bit yapar.

 

CMD17 Komutu

Fonksiyon  : unsigned char CMD17(unsigned long ADRES)

Amacı : Tek blok okuması yapar

 

CMD18 Komutu

Fonksiyon : unsigned char CMD18(unsigned long ADRES)

Amacı : Çoklu okuma yapar

 

ACMD23 Komutu

Fonksiyon : unsigned char ACMD23(unsigned long BLOK_SAYISI)

Amacı : Çoklu yazma işleminden önce ön silme yapar.

 

CMD24 Komutu

Fonksiyon : unsigned char CMD24(unsigned long ADRES)

Amacı : Tek blok yazar

 

CMD25 Komutu

Fonksiyon : unsigned char CMD25(unsigned long ADRES)

Amacı : Çoklu blok yazar

 

ACMD22 Komutu

Fonksiyon : unsigned char ACMD22()

Amacı : Doğru yazılan blok sayısını verir

 

CMD32 Komutu

Fonksiyon : unsigned char CMD32( unsigned long ADRES)

Amacı : Silme işleminin başlangıç adresini bildirir

 

CMD33 Komutu

Fonksiyon : unsigned char CMD33(unsigned long ADRES)

Amacı : Silme işleminin bitiş adresini bildirir.

 

CMD38 Komutu

Fonksiyon : unsigned char CMD38()

Amacı : Silme işlemini gerçekleştirir.

 

CMD12 Komutu

Fonksiyon : unsigned char CMD12()

Amacı : Veri yazma ya da okumayı her koşulda durdurur.

 

CMD13 Komutu

Fonksiyon : unsigned char CMD13(unsigned int RCA_ADRESI)

Amacı : Kartın durumunu bildirir

 

CMD16 Komutu

Fonksiyon : unsigned char CMD16()

Amacı : Blok uzunluğunu 512 byte olarak kurar.

 

CMD56 Komutu

Fonksiyon : unsigned char CMD56(unsigned char ISLEV)

Amacı : İşlev 1 ise okuma yapar işlev 0 ise yazma yapar


SD Kart Hakkındaki Bilgi Tabloları

1-CID Tablosu ( Card IDentification )

Adı Genişlik Bölge
Üretici Kimliği 8 bit [127:120]
OEM/Uygulama Kimliği 16 bit [119:104]
Ürün Adı 40 bit [103:64]
Ürün Revizyonu 8 bit [63:56]
Ürün Seri No 32 bit [55:24]
Rezerve Alan 4 bit [23:20]
Üretim Tarihi 12 bit [19:8]
CRC7 Kodu 7 bit [7:1]
Kullanım dışı daima 1 dir 1 bit [0:0]

 

2-CSD Tablosu ( Card-Specific Data )

Adı Orjinal Bölge İsimleri Genişlik Bölge
CSD Yapısı CSD_STRUCTURE 2 bit  [127:126]
Rezerve Alan 6 bit [125:120]
Veri Okuma Hızı -1 TAAC 8 bit  [119:112]
Veri Okuma Hızı – 2 CLK döngüleri NSAC 8 bit  [111:104]
Max. Data Transfer Oranı TRAN_SPEED 8 bit [103:96]
Kart Komut Sınıfı CCC 12 bit [95:84]
Max. Data Okuma Blok Genişliği READ_BL_LEN 4 bit [83:80]
Parça Blok Okuma Aktif READ_BL_PARTIAL 1 bit [79:79]
Hizasız Blok Yazma WRITE_BLK_MISIALIGN 1 bit [78:78]
Hizasız Blok Okuma READ_BLK_MISIALIGN 1 bit [77:77]
DSR Gömülü DSR_IMP 1 bit [76:76]
Rezerve Alan 2 bit [75:74]
Cihaz Boyutu C_SIZE 12 bit [73:62]
Max. Okuma Akımı @VDD min VDD_R_CURR_MIN 3 bit [61:59]
Max. Okuma Akımı @VDD max VDD_R_CURR_MAX 3 bit [58:56]
Max. Yazma Akımı @VDD min VDD_W_CURR_MIN 3 bit [55:53]
Max. Yazma Akımı @VDD max VDD_W_CURR_MAX 3 bit [52:50]
Cihaz Boyutu Çarpanı C_SIZE_MULT 3 bit [49:47]
Tek Blok Silme Etkin ERASE_BLK_EN 1 bit [46:46]
Silinebilir Sektör Boyutu SECTOR_SIZE 7 bit [45:39]
Yazma Korumalı Grup Boyutu WP_GRP_SIZE 7 bit [38:32]
 Yazma Korumalı Grup Etkin WP_GRP_ENABLE 1 bit [31:31]
Rezerve Alan 2 bit [30:29]
Yazma Hızı Faktörü R2W_FACTOR 3 bit [28:26]
Max. Yazılabilir Veri Blok Uzunluğu WRITE_BL_LEN 4 bit [25:22]
Parça Blok Yazma Aktif WRITE_BL_PARTIAL 1 bit [21:21]
Rezerve Alan 5 bit [20:16]
Dosya Format Grubu FILE_FORMAT_GRP 1 bit [15:15]
Kopya Bayrağı COPY 1 bit [14:14]
Kalıcı Yazma Koruması PERM_WRITE_PROTECT 1 bit [13:13]
Geçici Yazma Koruması TMP_WRITER_PROTECT 1 bit [12:12]
Dosya Formatı FILE_FORMAT 2 bit [11:10]
 Rezerve Alan 2 bit [9:8]
 CRC CRC 7 bit [7:1]
Kullanılmaz- Daima 1 1 bit [0:0]

Fonksiyonların Uygulaması

 

1-Pin Tanımlamasının Yapılması

//sd kart
sbit SD_DATA0 at RB0_bit;
sbit SD_DATA1 at RB1_bit;
sbit SD_DATA2 at RB2_bit;
sbit SD_DATA3 at RB3_bit;
sbit SD_CLK at RB5_bit;
sbit SD_CMD at RB4_bit;


sbit SD_DATA0_Direction at TRISB0_bit;
sbit SD_DATA1_Direction at TRISB1_bit;
sbit SD_DATA2_Direction at TRISB2_bit;
sbit SD_DATA3_Direction at TRISB3_bit;
sbit SD_CLK_Direction at TRISB5_bit;
sbit SD_CMD_Direction at TRISB4_bit;

 

2- SD Kart Tanımlanması ve Kullanılmaya Hazır Hale Getirilmesi

void  main()
{
    ADCON1=7;//PIC ile ilgili port ayarıdır SD kart ile ilgisi yoktur
    CMCON=7;// PIC ile ilgili comparatorlerin kapatılmasını sağlar

    SAP1024_INIT(240,128,6);//projede kullanılacak GLCD kütüphanesi çağırma kodudur

    SD_SDMOD_ANALIZ(4);// SD kartı analiz eder ve kullanıma hazırlar. Burada 4 yazılarak 4 data portu kullanılacağı bildirilmiştir.

}

 

3- SD Kartın Sektörlerine Veri Yazılması

SD kartın sektörleri hakkında bilgilendirme resmi
void  main()
{
   unsigned char denetim=120;

   ADCON1=7;
   CMCON=7;

   SAP1024_INIT(240,128,6);//glcd ekran tanımlama kodu 

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0); // sd kart analizi 
   
   //data tamponuna veriler yükleniyor
   SD_DATA_TAMPONU[0]=0x7777772E;//www.
   SD_DATA_TAMPONU[1]=0x65726361;//erca
   SD_DATA_TAMPONU[2]=0x6E6B6F63;//nkoc
   SD_DATA_TAMPONU[3]=0x6C61722E;//lar.
   SD_DATA_TAMPONU[4]=0x636F6D20;//com 
   
   do{denetim=SD_MOD_TEK_BLOK_YAZ(4);}while(denetim==0); // 4. sektöre veri yazılır

   SAP1024_YAZI_YAZMA(1,1,"bitti");//GLCD ekranda bitti yazdırılır

}
SD kart sektöründeki atık veriler
void  main()
{
   unsigned char denetim=120,i;

   ADCON1=7;
   CMCON=7;

   SAP1024_INIT(240,128,6);//glcd ekran tanımlama kodu 

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0); // sd kart analizi 
   
   //data tamponuna veriler yükleniyor
   SD_DATA_TAMPONU[0]=0x7777772E;//www.
   SD_DATA_TAMPONU[1]=0x65726361;//erca
   SD_DATA_TAMPONU[2]=0x6E6B6F63;//nkoc
   SD_DATA_TAMPONU[3]=0x6C61722E;//lar.
   SD_DATA_TAMPONU[4]=0x636F6D20;//com 

   //kullanılmayan tamponlar sıfıra eşitleniyor
   for(i=5;i<128;i++)
     {
       SD_DATA_TAMPONU[i]=0;
     }
   
   do{denetim=SD_MOD_TEK_BLOK_YAZ(4);}while(denetim==0); // 4. sektöre veri yazılır

   SAP1024_YAZI_YAZMA(1,1,"bitti");//GLCD ekranda bitti yazdırılır

}
Sektörün geri kalan kısmı artık verilerden temizlendi

4- SD Kartın Sektörlerinden Veri Okunması

void  main()
{
  unsigned char denetim=120,i=0;
  unsigned char donusum[9];//mikroC nin standart dönüşüm kütüphanesi için oluşturuldu
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6);

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kart analizi ve kurulumu yapıldı
   do{denetim=SD_MOD_TEK_BLOK_OKUMA(4);}while(denetim==0);// 4. sektör okundu ve data tamponuna yazıldı

   for(i=0;i<5;i++)// diziler sırası ile satır satır GLCD de yazdırılacak
     {
       LongWordToHex(SD_DATA_TAMPONU[i],donusum); //data tamponundaki veri heksadesimale çevrildi    
       SAP1024_YAZI_YAZMA(1,(i+1),donusum);// çevrilen veri GLCD de yazıldı
     }
}
SD kartın 4. sektöründen okunan veriler
void  main()
{
    unsigned char denetim=120,i=0,j=0,k=1;
    unsigned char txt[2];// okunan veriyi karakter olarak göstermek için oluşturuldu
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6);

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kart analizi ve kurulumu yapıldı
   do{denetim=SD_MOD_TEK_BLOK_OKUMA(4);}while(denetim==0);// 4. sektör okundu ve data tamponuna yazıldı

   txt[1]=0;//karakter dizilerinde mutlaka son eleman 0 olmalıdır. Aksi halde hata verir 
            //çünkü string dizilerini sistem okurken sıfırı görene kadar okumaya devam eder

   //elimizde bulunan 32 bit veri 4 parçaya ayrılacak her parça tek tek GLCD de yazdırılacak 
   // yazıların üst üste gelmesini engellemek için her seferinde bir sütun kaydırılacak
   for(j=0;j<5;j++)
     {
       for(i=0;i<4;i++)
         {
           txt[0]=SD_DATA_TAMPONU[j]>>(24-(i*8));// data tamponu 32 bit olduğundan veriyi kaydırarak aktardım. 
           SAP1024_YAZI_YAZMA(k,1,txt);//karakterlerin üst üste gelmemesi için her seferinde bir sütun kaydırıldı
           k++;//sütun kaydırma değişkeni
         }
     }
}
SD kartın sektöründeki verinin karakter olarak okunması

5- SD Kartın Sektörlerindeki Verinin Silinmesi

void  main()
{
  unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6);

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kart analizi ve kurulumu yapıldı
   do{denetim=SD_MOD_SEKTOR_SIL(4,4);}while(denetim==0);// 4. sektör silindi
   
   SAP1024_YAZI_YAZMA(1,1,"bitti");//GLCD ekranda bitti yazdırılır
}
SD kartın 4. sektöründe bulunan veri silidi

SD Kart Sonuç


FAT32 Dosya Sistemi

Temel Disk Sistemi
Cluster Boyutu Seçimi
Fat32 sisteminin şematik görüntüsü

FAT32 Dosya Sistemi Yazılımı

FAT32 kütüphanesi yazarken faydalandığım yerli ve yabancı kaynakların bir kısmı . Tamamı ders sonunda paylaşılacaktır.

Fonksiyonlar

1- Başlangıç Analiz ve Format Fonksiyonları

 

SD_FAT32_INIT Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_INIT()

Amacı : SD kartı okuyarak format atılmasına gerek olup olmadığını denetler

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_INIT();//SD kartı okuyarak karta format atılıp atılmaması gerektiğini belirler

Geri Bildirim :

 

SD_FAT32_FORMAT Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_FORMAT(unsigned char DISK_ETIKETI[11])

Amacı :

Parametreler :

Kullanım Şekli :

SD_FAT32_FORMAT("eşröç      ");// Formatlanıp isim verilir Türkçe karakterleri destekler

Geri Bildirim :

 

2- Hesaplama Fonksiyonları

2A- Genel Hesap Fonsksiyonları

 

SD_FAT32_TOPLAM_SEKTOR_SAYISI Fonksiyonu

Fonksiyon : unsigned long SD_FAT32_TOPLAM_SEKTOR_SAYISI()

Amacı : SD kartta bulunan toplam sektör sayısını hesaplar

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_TOPLAM_SEKTOR_SAYISI();//SD kartta bulunan sektörlerin sayısını hesaplar

Geri Bildirim :

 

SD_FAT32_KOKDIZIN Fonksiyonu

Fonksiyon : void SD_FAT32_KOKDIZIN()

Amacı : SD kartın kök dizinini hesaplar

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_KOKDIZIN();//SD kartın data başlangıç sektörünü hesaplar ve bu aynı zamanda kök dizin numarasıdır

Geri Bildirim :

 

SD_FAT32_BPB_FATSz32 Fonksiyonu

Fonksiyon : unsigned int SD_FAT32_BPB_FATSz32()

Amacı : FAT bölgesi başına düşen sektör sayısını hesaplar

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_BPB_FATSz32();//FAT Basına düşen sektör sayısı

Geri Bildirim :

 

BPB_RsvdSecCnt Fonksiyonu

Fonksiyon : unsigned int BPB_RsvdSecCnt()

Amacı : Rezerve sektörleri hesaplar

Parametreler : Bulunmuyor

Kullanım Şekli :

BPB_RsvdSecCnt();

Geri Bildirim :

 

SD_FAT32_BOS_CLUSTER_SAYISI Fonksiyonu

Fonksiyon : unsigned int SD_FAT32_BOS_CLUSTER_SAYISI()

Amacı : Boş cluster sayısını hesaplar

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_BOS_CLUSTER_SAYISI();//FSI_Free_Count- Boş olan cluster sayısını hesaplar

Geri Bildirim :

 

SD_FAT32_SD_ID Fonksiyonu

Fonksiyon : unsigned long SD_FAT32_SD_ID()

Amacı : SD kartın ID numarasını okur

Parametreler : Bulunmuyor

Kullanım Şekli :

SD_FAT32_SD_ID();//BS_VOLID - SERINUMARASI OKUMA

Geri Bildirim :

 

2B- FAT Bölgesi Hesap Fonksiyonları

 

FAT_BOLGE_DUZENLEME Fonksiyonu

Fonksiyon : unsigned int FAT_BOLGE_DUZENLEME(unsigned int BASLANGIC_CLUSTER_NUMARASI)

Amacı : FAT bölgesinde boş ve dolu yerleri tespit eder gerekli düzenlemeyi yapar

Parametreler :

Kullanım Şekli :

FAT_BOLGE_DUZENLEME(100);

Geri Bildirim : 

 

FAT_BOLGE_OKUYUCU Fonksiyonu

Fonksiyon : unsigned int FAT_BOLGE_OKUYUCU(unsigned int BASLANGIC_CLUSTER_NUMARASI)

Amacı : Verilen cluster numarasından itibaren tüm clusterleri takip ederek okur ve numaralarını geri döndürür.

Parametreler :

Kullanım Şekli :

FAT_BOLGE_OKUYUCU(100);

Geri Bildirim : 

 

FAT_BOLGE_SILICI Fonksiyonu

Fonksiyon : unsigned char FAT_BOLGE_SILICI(unsigned int BASLANGIC_CLUSTER_NUMARASI)

Amacı : Verilen başlangıç clusterından kuyruğu takip ederek sırayla tüm clusterları siler

Parametreler :

Kullanım Şekli :

FAT_BOLGE_SILICI(100);

Geri Bildirim : 

 

FAT_SON_BOLGE_BULUCU Fonksiyonu

Fonksiyon : unsigned long FAT_SON_BOLGE_BULUCU(unsigned int BASLANGIC_CLUSTER_NUMARASI)

Amacı : Verilen cluster numarasını takip eder en son cluster numarasını geri döndürür. Dosya sonuna gitme işlemi için kullanılır

Parametreler :

Kullanım Şekli :

FAT_SON_BOLGE_BULUCU(100);

Geri Bildirim : 

 

FAT_BOLGE_TAYIN_EDICI Fonksiyonu

Fonksiyon : void FAT_BOLGE_TAYIN_EDICI()

Amacı : Dosya oluşturulduğunda dosyaya ilk cluster bölgesini tayin eder

Parametreler : Bulunmuyor

Kullanım Şekli :

FAT_BOLGE_TAYIN_EDICI();

Geri Bildirim :

 

FAT_BOLGE_TAYIN_EDICI_KLASOR Fonksiyonu

Fonksiyon : unsigned long FAT_BOLGE_TAYIN_EDICI_KLASOR()

Amacı : Yeni klasör için cluster yeri bulur ve o bölgeye EOC işareti bırakır

Parametreler : Bulunmuyor.

Kullanım Şekli :

FAT_BOLGE_TAYIN_EDICI_KLASOR();

Geri Bildirim : 

3- Dosya İşlem Fonksiyonları

 

SD_FAT32_DOSYA_OLUŞTUR Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_OLUSTUR(unsigned char DOSYA_ADI[11])

Amacı : Yeni dosya oluşturmak

Parametreler :

Kullanım Şekli :

SD_FAT32_DOSYA_OLUSTUR("ERCAN   TXT");

Geri Bildirim :

 

SD_FAT32_DOSYA_SEC Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_SEC(unsigned char DOSYA_ADI[11])

Amacı : İşlem yapılacak dosyayı seçer

Parametreler :

Kullanım Şekli :

SD_FAT32_DOSYA_SEC("ERCAN   TXT");

Geri Bildirim :

 

SD_FAT32_DOSYA_KLASOR_SIL Fonksiyonu

Fonksiyon : void SD_FAT32_DOSYA_KLASOR_SIL()

Amacı : Seçilmiş olan dosya veya klasörü siler

Parametre : Bulunmuyor

Kullanım Şekli :

SD_FAT32_DOSYA_KLASOR_SIL();

Geri Bildirim :

 

SD_FAT32_DOSYA_YENIDEN_ADLANDIR Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_YENIDEN_ADLANDIR(unsigned char DOSYA_ADI[11])

Amacı : Seçilen dosyayı yeniden adlandırır

Parametre :

Kullanım Şekli :

SD_FAT32_DOSYA_YENIDEN_ADLANDIR("ERCAN2  TXT");

Geri Bildirim :

 

SD_FAT32_DOSYA_SONUNA_GIT Fonksiyonu

Fonksiyon : void SD_FAT32_DOSYA_SONUNA_GIT()

Amacı : Seçilen dosyanın içeriğinde sonuna gider.

Parametre : Bulunmuyor.

Kullanım Şekli :

SD_FAT32_DOSYA_SONUNA_GIT();

Geri Bildirim :

 

SD_FAT32_DOSYA_BASINA_GIT Fonksiyonu

Fonksiyon : void SD_FAT32_DOSYA_BASINA_GIT()

Amacı : Seçilen dosya içeriğinin en başına gider.

Parametre : Bulunmuyor.

Kullanım Şekli :

SD_FAT32_DOSYA_BASINA_GIT();

Geri Bildirim :

 

SD_FAT32_DOSYA_TARIH_SAAT_AYARLA Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_TARIH_SAAT_AYARLA(unsigned int YIL,unsigned short AY,unsigned short GUN,unsigned char SAAT,unsigned char DAKIKA )

Amacı : Dosyanın tarihini ve saatini ayarlar . FAT32 sistemi gereği dosya yılı 1980 den geriye gidemez.

Parametre :

Kullanım Şekli :

SD_FAT32_DOSYA_ERISIM_TARIH_SAAT_AYARLA(2017,10,6,21,10);// 10 Ekim 2017 saat 21:10

Geri Bildirim :

 

SD_FAT32_DOSYA_DEGISIM_TARIH_SAAT_AYARLA Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_DEGISIM_TARIH_SAAT_AYARLA(unsigned int YIL,unsigned short AY,unsigned short GUN,unsigned char SAAT,unsigned char DAKIKA )

Amacı : Dosyanın son değişim tarihini değiştirir.

Parametre :

Kullanım Şekli :

SD_FAT32_DOSYA_DEGISIM_TARIH_SAAT_AYARLA(2017,10,6,21,10);// 10 Ekim 2017 saat 21:10

Geri Bildirim :

 

SD_FAT32_DOSYA_LISTELEME Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_LISTELEME(unsigned int DOSYA_NO)

Amacı : Dizinde bulunan dosyaların ;

Parametre :

Kullanım Şekli :

for(i=0;i<10;i++)
   {
     if(SD_FAT32_DOSYA_LISTELEME(i)!=255)
       {
        SAP1024_YAZI_YAZMA(1,(i+2-x),(YDosya_Bilgileri.dosya_adi));
        SAP1024_YAZI_YAZMA(15,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_tarih));
        SAP1024_YAZI_YAZMA(26,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_zaman));
        SAP1024_YAZI_YAZMA(31,(i+2-x),(YDosya_Bilgileri.dosya_boyutu));

       }
   }//not: detayı uygulama bölümüne anlatılacak !!!!

Geri Bildirim :

 

SD_FAT32_DOSYA_LISTELEME_SONLANDIR Fonksiyonu

Fonksiyon : void SD_FAT_32_DOSYA_LISTELEME_SONLANDIR()

Amacı : Listeleme işlemini sonlandırmak için kullanılır.

Parametre : Bulunmuyor

Kullanım Şekli : 

SD_FAT_32_DOSYA_LISTELEME_SONLANDIR();

Geri Bildirim:

 

SD_FAT32_DOSYA_VERI_YAZ Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_DOSYA_VERI_YAZ()

Amacı : Veriyi ( SD_DATA_TAMPONuna yüklenmiş olan – SD karttan hatırlayın) seçilmiş olan dosyanın içerisine yazar.

Parametre : Bulunmuyor

Kullanım Şekli :

SD_DATA_TAMPONU[0]=0X47DC4C41;
SD_DATA_TAMPONU[1]=0X59000000;
SD_DATA_TAMPONU[2]=0;

SD_FAT32_DOSYA_VERI_YAZ();

Geri Bildirim :

 

SD_FAT32_DOSYA_VERI_OKU Fonksiyonu

Fonksiyon : void SD_FAT32_DOSYA_VERI_OKU(unsigned long DOSYA_SEKTOR_SAYISI)

Amacı : Dosyadan sektör bazında veri okur çünkü SD_DATA_TAMPONU 512 byte ttır bu da 1 sektöre denk gelir.

Parametre :

Kullanım Şekli :

SD_FAT32_DOSYA_VERI_OKU(0);//seçili dosyanın ilk sektörünü okur

Geri Bildirim :

 

4- Klasör İşlem Fonksiyonları

 

SD_FAT32_KLASOR_OLUSTUR Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_KLASOR_OLUSTUR(unsigned char KLASOR_ADI[8])

Amacı : Klasör oluşturur

Parametre :

Kullanım Şekli :

SD_FAT32_KLASOR_OLUSTUR("ERCAN5  ");

Geri Bildirim :

 

SD_FAT32_KLASOR_ICERIK_YAZMA Fonksiyonu

Fonksiyon : void SD_FAT32_KLASOR_ICERIK_YAZMA(unsigned long CLUSTER_SAYISI)

Amacı : SD_FAT32_KLASOR_OLUSTUR fonksiyonu içerisinde kullanılır. Klasör hakkında bilgileri sisteme yazar

Parametre :

Kullanım Şekli :

SD_FAT32_KLASOR_ICERIK_YAZMA(YEREL_CLUSTER);

Geri Bildirim :

 

SD_FAT32_KLASOR_SEC Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_KLASOR_SEC(unsigned char KLASOR_ADI[8])

Amacı : İşlem yapılacak klasörü seçer

Parametre :

Kullanım Şekli :

SD_FAT32_KLASOR_SEC("ERCAN1 ");

Geri Bildirim :

 

SD_FAT32_KLASOR_YENIDEN_ADLANDIR Fonksiyonu

Fonksiyon : unsigned char SD_FAT32_KLASOR_YENIDEN_ADLANDIR(unsigned char KLASOR_ADI[8])

Amacı : Seçilen klasörü yeniden adlandırır.

Parametre :

Kullanım Şekli :

SD_FAT32_KLASOR_YENIDEN_ADLANDIR("ERCAN9 ");

Geri Bildirim :

 

SD_FAT32_KOK_DIZINE_GIT Fonksiyonu

Fonksiyon : void SD_FAT32_KOK_DIZINE_GIT()

Amacı : Kök ( root ) dizine gider . Yapılacak işlemler bundan sonra kök dizinde yapılır

Parametre : Bulunmuyor

Kullanım Şekli :

SD_FAT32_KOK_DIZINE_GIT();

Geri Bildirim :

 

SD_FAT32_BIR_DIZIN_YUKARI_GIT Fonksiyonu

Fonksiyon : void SD_FAT32_BIR_DIZIN_YUKARI_GIT()

Amacı : Bulunduğu dizinden bir yukarı çıkar

Parametre : Bulunmuyor

Kullanım Şekli :

SD_FAT32_BIR_DIZIN_YUKARI_GIT();

Geri Bildirim :

 

Fonksiyonların Uygulaması

1- SD Kart Analizi Yapmak

void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   if(SD_FAT32_INIT()==0)//analiz fonksiyonu
     {
       SAP1024_YAZI_YAZMA(1,1,"FORMAT ATILMALI");
     }
   else
     {
       SAP1024_YAZI_YAZMA(1,1,"FORMAT ATILMAMALI");
     }
 }
SD kart analizi – Format Atılmamalı sonucunu verdi
SD kartın 0. sektörü ve PC içerisindeki durumu
void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   do{denetim=SD_MOD_SEKTOR_SIL(0,0);}while(denetim==0);// 0. sektör siliniyor
   
   SAP1024_YAZI_YAZMA(1,1,"bitti");
}
void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   if(SD_FAT32_INIT()==0)//analiz fonksiyonu
     {
       SAP1024_YAZI_YAZMA(1,1,"FORMAT ATILMALI");
     }
   else
     {
       SAP1024_YAZI_YAZMA(1,1,"FORMAT ATILMAMALI");
     }
 }
SD kart analiz format atılmalı sonucu verdi
SD kartın 0. sektörü ve PC deki durumu

2- SD Kartı FAT32 Formatında Biçimlendirme

void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   SD_FAT32_INIT();// analiz fonksiyonu mutlaka çağırılmalıdır
   do{denetim=SD_FAT32_FORMAT("DENEME 1   ");}while(denetim==0);// SD KART formatlanıyor
   
   SAP1024_YAZI_YAZMA(1,1,"bitti");

}
Formattan sonra SD kartın 0. sektör ve SD kartın PC deki durumu
Kök dizinin incelenmesi – Disk ismi kök dizinde yazılıdır

NOT: Eğer formatlamada sorun yaşarsanız SD kartın tüm sektörlerini silip ( SD kart sektör silme fonksiyonu ile ) tekrar deneyin. Bazı durumlarda kalan artık veriler sistemde kararsızlığa yol açabiliyor.

3- Dosya İşlemleri

3A- Dosya Oluşturma

void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();//FAT32 analiz fonksiyonu mutlaka çağırılmalıdır
  
   SD_FAT32_DOSYA_OLUSTUR("ERCAN4  TXT");//dosya oluşturma fonksiyonu

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini haber vermesi için eklendi
}
SD kart içerisinde dosya oluşturuldu
FAT32 sisteminde dosyaların kayıtları kök dizinde tutulur
void  main()
{
   unsigned char denetim=120;
   ADCON1=7;
   CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();//fat32 ana fonksiyonu

   SD_FAT32_DOSYA_OLUSTUR("ERCAN4  TXT");//ercan4.txt oluşturuldu
   SD_FAT32_DOSYA_OLUSTUR("ERCAN4  TXT");//ercan4.txt oluşturuldu

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiği GLCD üzerinden bildirilecek
}
İki adet aynı isme sahip dosya oluşturulmak istendi

 

3B- Dosya Seçme ve Silme İşlemi

void  main()
{
    unsigned char denetim=120;
    unsigned char txt[11];
    int ercan;
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu



   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();//ana fonksiyon
  
   SD_FAT32_DOSYA_OLUSTUR("ERCAN5  TXT");//yeni bir dosya daha oluşturuldu
   
   SD_FAT32_DOSYA_SEC("ERCAN4  TXT");//daha önceden oluşturulan dosya seçildi

   SD_FAT32_DOSYA_KLASOR_SIL();//seçilen dosya silindi

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD de göstermesi için eklendi.
   
}
FAT32 dosya seçme ve silme işlemi

 

3C- Dosyayı Yeniden Adlandırma

void  main()
{
    unsigned char denetim=120;
    unsigned char txt[11];
    int ercan;
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();// fat32 ana fonksiyonu

   SD_FAT32_DOSYA_SEC("ERCAN5  TXT");//daha önceden oluşturduğum dosyayı seçtim

   SD_FAT32_DOSYA_YENIDEN_ADLANDIR("ERCAN10 TXT");//dosya adını ERCAN10 olarak değiştirdim

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD üzerinden haber verir
}
Dosya ERCAN10.txt olarak yeniden adlandırıldı

 

3D- Dosyanın Tarih ve Saatini Değiştirme

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();// fat32 ana fonksiyonu

   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");// hangi dosya üzerinde işlem yapılacaksa seçilir
   
   SD_FAT32_DOSYA_TARIH_SAAT_AYARLA(2019,11,6,12,00); // tarih 06 Kasım 2019 saat 12:00 ayarlandı

   SAP1024_YAZI_YAZMA(1,2,"bitti"); //işlemin bittiğini GLCD üzerinden bildirir.
}
FAT32 – dosyanın oluşturma tarihinin değiştirilmesi
void  main()
{
    unsigned char denetim=120;

    ADCON1=7;
    CMCON=7;

   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır
   
   SD_FAT32_INIT();// fat32 ana fonksiyonu

   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");// hangi dosya üzerinde işlem yapılacaksa seçilir
   
   SD_FAT32_DOSYA_DEGISIM_TARIH_SAAT_AYARLA(2019,11,20,12,00); // tarih 20 Kasım 2019 saat 12:00 ayarlandı

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD üzerinden bildirir.

}
FAT32 – Dosya değiştirme tarihinin ayarlanması

 

3E- Dosyaya Veri Yazma ve Veri Konumlandırması

void  main()
{
    unsigned char denetim=120;
   
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();
   
   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");
    
   SD_FAT32_DOSYA_BASINA_GIT();//yeni dosyalara veri yazılacağında ve eski dosyaların üzerine yazma yapılacağında çağırılır
   
   //NOT: SD_DATA_TAMPONU mutlaka veri yazma fonksiyonundan önce çağırılmalıdır araya kesinlikle başka bir fonksiyonu konulmamalıdır
   SD_DATA_TAMPONU[0]=0x05;//5 değeri
   SD_DATA_TAMPONU[1]=0x0A;//10 değeri
   SD_DATA_TAMPONU[2]=0x0F;//15 değeri
   SD_DATA_TAMPONU[3]=0x14;//20 değeri

   SD_FAT32_DOSYA_VERI_YAZ(); // veri yazma fonksiyonu
   
   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD den bildirir
}
FAT32 yazılacak veriler stringe çevrilmelidir
void  main()
{
    unsigned char denetim=120;
   
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();
   
   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");
    
   SD_FAT32_DOSYA_BASINA_GIT();//yeni dosyalara veri yazılacağında ve eski dosyaların üzerine yazma yapılacağında çağırılır
   
   //NOT: SD_DATA_TAMPONU mutlaka veri yazma fonksiyonundan önce çağırılmalıdır araya kesinlikle başka bir fonksiyonu konulmamalıdır
   //NOT2 : Veri sonlarında bulunan 0D0A FAT32 de enter tuşuna denk gelir yani veri sonuna bunu yazarsanız bir sonraki veri dosyada alt satırda yazılır
   SD_DATA_TAMPONU[0]=0x350D0A;//5
   SD_DATA_TAMPONU[1]=0x31300D0A;//10
   SD_DATA_TAMPONU[2]=0x31350D0A;//15
   SD_DATA_TAMPONU[3]=0x32300D0A;//20

   SD_FAT32_DOSYA_VERI_YAZ(); // veri yazma fonksiyonu
   
   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD den bildirir
}
Fat32 – çevrilen verilen text dosyasında görülmektedir
//*************STRINGE ÇEVİRME FONKSİYONU BAŞLANGIÇ******************// 
void string_cevir(unsigned long veri )
    {
      char txt[11];
      unsigned char i=0,x=0,y=0,z=0;
           
      LongWordToStr(veri,txt);
      SD_DATA_TAMPONU[x]=0;
      
      for(i=0;i<strlen(txt);i++)
        {
          if(txt[i]!=0 && txt[i]!=0x20)
            {
               SD_DATA_TAMPONU[x]=SD_DATA_TAMPONU[x]|(1L*(txt[i])<<(24-y));
               y=y+8;

               if(y==32)
                 {
                   x++;
                   y=0;
                   SD_DATA_TAMPONU[x]=0;
                 }
             z++;//dizide kaç adet anlamlı veri olduğunu tutmaya yarar
            }
        }
      
      //veri bütünlüğü burada sağlanır 
      SD_DATA_TAMPONU[x]=SD_DATA_TAMPONU[x]|(0x20202020>>((z%4)*8));
        
     if(x!=127){SD_DATA_TAMPONU[x+1]=0;} //son diziyi sıfıra eşitler artık veri kalmasını engeller
    }
//*************STRINGE ÇEVİRME FONKSİYONU BİTİŞ******************// 

void  main()
{
    unsigned char denetim=120;
    
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu
  
   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");//dosya seçildi
   
   SD_FAT32_DOSYA_BASINA_GIT();//dosyanın başına giderek konumlandırma yapıldı
   string_cevir(26587);// main üstündeki string fonksiyonu çağırıldı ve çevirilecek değer yazıldı
   SD_FAT32_DOSYA_VERI_YAZ();//veri yazıldı

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD üzerinden bildirir
}
Fat32 – veri bütünlüğü sağlamak için 0x20 ile dolduruldu

 

3F- Dosya Sonuna Giderek Veri Yazılması

unsigned char x=0;//global değer
unsigned char string_cevir(unsigned long veri,unsigned char satir_atla )
    {
      char txt[11];
      unsigned char i=0,y=0,z=0;

      LongWordToStr(veri,txt);//mikroc standart kütüpahanesi
      SD_DATA_TAMPONU[x]=0;//başlangıç dizisi sıfıra eşitlenir
      
      for(i=0;i<11;i++)
        {
          if(txt[i]!=0 && txt[i]!=0x20)
            {
               SD_DATA_TAMPONU[x]=SD_DATA_TAMPONU[x]|(1L*(txt[i])<<(24-y));// 8 bitlik veriler kaydırılarak yerleştiriliyor
               y=y+8;

               if(y==32)
                 {
                   if(x!=127) // eğer data tamponu sonuna gelinmediyse
                     {
                       //yeni dizi sıfıra eşitlenir
                       x++;
                       SD_DATA_TAMPONU[x]=0;
                     }
                   else
                    {
                      return 255 ;//data dizisi dolduğundan işlem sonlandırıldı
                    }
                   y=0;//veri kaydırma değişkeni sıfırlanır
                 }
             z++;// kaç adet anlamlı veri olduğunu hesaplar
            }
        }
      
      if(satir_atla==1)//satır atlama enter komutu
        {
          SD_DATA_TAMPONU[x]=SD_DATA_TAMPONU[x]|(0x20202020>>((z%4)*8));// veri bütünleme bölümü
          x++;
          SD_DATA_TAMPONU[x]=0x0D0A;//eğer satır atlama seçilmiş ise enter kodu ekler

        }
      x++;//yeni diziye geçiş
}

void  main()
{
    unsigned char denetim=120;
    
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();
 
   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");
 
   x=0;// global dizi değeri her yeni yükleme öncesi sıfırlanır
   
   SD_FAT32_DOSYA_SONUNA_GIT();//dosya sonuna giderek daha önce yazılan veriler bozulmaz 26587 yazdırılmıştı

   //**Bu bölümde diziye yükleme yapılır ister tek tek isterse for döngüsüne alarak yükleme yapılır
   //** string_cevir fonksiyonundan 255 cevabı gelirse bu SD_DATA_TAMPONU nun dolduğu anlamı taşır

   string_cevir(145658,1); // string çevir alt satıra geç
   string_cevir(1234,1); // string çevir alt satıra geç
   string_cevir(458,0);// string çevir yanından devam et
   string_cevir(125,1);// string çevir alt satıra geç

   SD_FAT32_DOSYA_VERI_YAZ();//veriler yazılır

   SAP1024_YAZI_YAZMA(1,2,"bitti");//işlemin bittiğini GLCD üzerinden bildirir
 }
Fat32 – Veri konumlandırması sona alınarak eskiden yazılan dosya içerğine ek yapıldı. Alt satıra geçme kodu(0x0D0A) uygulandı.

 

3G- Dosya İçerisinden Veri Okunması

void  main()
{
    unsigned char denetim=120,i=0;
    unsigned long veri;
    char txt[11];
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();
  
   SD_FAT32_DOSYA_SEC("ERCAN10 TXT");//işlem yapılacak dosya seçilir
   
   SD_FAT32_DOSYA_BASINA_GIT();// dosyanın başına gidilir bu kural asla değişmez

   SD_FAT32_DOSYA_VERI_OKU(0);//dosyanın 0. sektörü okunur
  

   for(i=0;i<12;i++)//daha önceki konularda 12 adet dizi kullandığımız için 12 yaptım (0-11)
      {
        LongWordToHex(SD_DATA_TAMPONU[i],txt);//mikroc standart kütüpahanesi değerleri heksadesimal olarak çeviriyor
        SAP1024_YAZI_YAZMA(1,(i+1),txt);//her satıra bir dizi gelecek şekilde GLCD de gösterecek
      }
}
SD kart içerisinde yazılı olan veri okunarak GLCD üzerinde görüntülendi.

 

3H-Dizindeki Dosyaları Listeleme

void  main()
{
    unsigned char denetim=120,i=0,x=0;
    unsigned long veri;
    char txt[11];
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu
    
   for(i=0;i<45;i++)
     {
       if(SD_FAT32_DOSYA_LISTELEME(i)!=255)//dosya listeleme fonksiyonu
         {
           SAP1024_YAZI_YAZMA(1,(i+2-x),(YDosya_Bilgileri.dosya_adi));//dosya adı
           SAP1024_YAZI_YAZMA(15,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_tarih));//dosya oluşturulma tarihi
           SAP1024_YAZI_YAZMA(26,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_zaman));//dosya oluşturulma saati
           SAP1024_YAZI_YAZMA(31,(i+2-x),(YDosya_Bilgileri.dosya_boyutu));//dosya boyutu
         }
      else
         {
           x++;
         }

     }
   SD_FAT_32_DOSYA_LISTELEME_SONLANDIR();//listeleme sonlandırılır
}
Kök dizinde bulunan dosyalar listelenerek GLCD üzerinde görüldü
Dosya ve klasörler bulunduğu dizindeki sırasına göre listelenir

 

4-Klasör İşlemleri

 

4A- Klasör Oluşturma

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyon
   
   SD_FAT32_KLASOR_OLUSTUR("ERCAN5  ");//kök dizinde ERCAN5 adında klasör oluşturur
    
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini GLCD üzerinden bildirir
}
Fat32 – Klasör oluşturuldu

 

4B- Klasör Seçme İşlemleri

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//oluşturmuş olduğumuz ERCAN5 klasörü seçildi böylece yeni oluşturulacak dosyalar bu klasörün içerisinde barınacak
   
   SD_FAT32_KLASOR_OLUSTUR("ERCAN50 ");//ERCAN50 adında yeni klasör oluştur
   SD_FAT32_DOSYA_OLUSTUR("ERCAN50 TXT");//ERCAN50.txt adında yeni dosya oluştur
  
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini bize GLCD üzerinden bildirir
}
Klasör seçimi ile seçilen klasör içerisinde yeni bir klasör oluşturuldu.
void  main()
{
    unsigned char denetim=120,i=0,x=0;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//ERCAN5 klasörü seçildi
      
   for(i=0;i<45;i++)   
     if(SD_FAT32_DOSYA_LISTELEME(i)!=255)//ERCAN5 klsörünün içeriği listelenecek
       {
        SAP1024_YAZI_YAZMA(1,(i+2-x),(YDosya_Bilgileri.dosya_adi));
        SAP1024_YAZI_YAZMA(15,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_tarih));
        SAP1024_YAZI_YAZMA(26,(i+2-x),(YDosya_Bilgileri.dosya_olusturma_zaman));
        SAP1024_YAZI_YAZMA(31,(i+2-x),(YDosya_Bilgileri.dosya_boyutu));
       }
     else
       {
        x++;
       }
    }
   SD_FAT_32_DOSYA_LISTELEME_SONLANDIR();//listeleme bitirme fonksiyonu
}
Klasör seçimi yaparak seçilen klasörün içeriği listelendi ve GLCD üzerinde gösterildi.
void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyon
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//ilk olarak kök dizinde bulunan ERCAN5 klasörü seçildi
   
   SD_FAT32_KLASOR_SEC("ERCAN50 ");//ERCAN5 klasörü içinde bulunan ERCAN50 klasörü seçildi
   
   SD_FAT32_DOSYA_OLUSTUR("SON     TXT");//ERCAN50 klasörü içerisinde SON.txt oluşturuldu
  
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini GLCD üzerinden bildirir.
}
İç içe oluşturulan klasörler seçilerek en alt dizinde yeni bir dosya oluşturuldu

 

4C- Bir Dizin Yukarı Çıkmak

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu

   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//ERCAN5 klasörü seçildi
   SD_FAT32_KLASOR_SEC("ERCAN50 ");//ERCAN50 klasörü seçildi 
     
   SD_FAT32_BIR_DIZIN_YUKARI_GIT();//bir dizin yukarı gidilerek ERCAN5 klasörüne geri dönüldü
   
   SD_FAT32_DOSYA_SEC("ERCAN50 TXT");//ERCAN50.txt seçildi
   SD_FAT32_DOSYA_KLASOR_SIL();//ERCAN50.txt silindi
    
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini GLCD üzerinden bildirir.
}
En alt dizinden bir yukarı çıkarak bir önceki klasör içerisinde bulunan dosyalar için işlem yapıldı

4D- Kök Dizine Dönmek

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//ERCAN5 klasörü seçildi
   SD_FAT32_KLASOR_SEC("ERCAN50 ");//ERCAN50 klasörü seçildi
      
   SD_FAT32_KOK_DIZINE_GIT();//Direk kök dizine geri gelindi
   
   SD_FAT32_KLASOR_SEC("ERCAN5  ");//ERCAN5 klasörü seçildi

   SD_FAT32_DOSYA_KLASOR_SIL();//Kök dizindeki ERCAN5 klasörü silindi
 
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini GLCD üzerinden bildirir
}
En alt dizinden hemen kök dizine dönüldü

4E- Klasörü Yeniden Adlandırmak

void  main()
{
    unsigned char denetim=120;
    ADCON1=7;
    CMCON=7;
    
   SAP1024_INIT(240,128,6); // GLCD çalıştırma kodu
  
   do{denetim=SD_SDMOD_ANALIZ(4);}while(denetim==0);//SD kartı çalıştırmak için mutlaka en başta olmalıdır

   SD_FAT32_INIT();//fat32 ana fonksiyonu

   SD_FAT32_KLASOR_SEC("ERCAN500");// ERCAN500 klasörü seçildi

   SD_FAT32_KLASOR_YENIDEN_ADLANDIR("SON     ");//ERCAN500 klasörünün adı SON olarak değiştirildi
  
   SAP1024_YAZI_YAZMA(1,1,"bitti");//işlemin bittiğini GLCD üzerinden bildirir.
}
Klasör yeniden adlandırıldı

SONUÇ


Kütüphane Dosyaları

 


Yararlanılan Belgeler

 

 


This post is also available in: English (İngilizce)

Exit mobile version