2 GB dan daha büyük kapasitede SD kartların kullanımı

Başlatan z, 30 Ocak 2015, 12:27:54

esensoy

Aman FATFS i CCS de çalıştırmaya uğraşmayın, ANSI C derleyicilerde çalışıyor, CCS maalesef ANSI C olmadığı için sıkıntılı
En tehlikeli an "zafer" anıdır.


tekosis

İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

RaMu

Tuttuğum şu notlar var:
İlgili ilk kısmını ayrıca yazayım;

Alıntı yapılan: RaMu
;...
;                                 CMD58 ALTPROGRAMI
;                  CMD16 GEREKLİMİ DEĞİLMİ KONTROLÜYLE GEREKLİYSE CMD16 DA İŞLENİYOR
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;DURUM1 İN ACMD41 KISMI BAŞARILI OLURSA BURAYA GELİR, BURADA CMD58 İLE DURUM1 E DEVAM EDİLİR
;BURAYA KADAR BAŞARILI OLUNDUYSA KART SD CARD VER2 DİR ARTIK CMD58 İLE BLOCK ADDRESS Mİ BYTE ADDRESS Mİ BAKILACAK
;CMD58 READ_OCR (READ OPERATION CONDITION REGISTER) KOMUTUDUR
;GERİBİLDİRİMİ R1 RESPONSE+32bit OCR REGISTERI YANİ 5 BYTE ŞEKLİNDEDİR
;GELEN OCR REGISTER ININ 30. bitine BAKACAĞIZ (CCS bitidir)
;CCS: Card Capacity Status (ACMD41 Response)(Simp. Spec. page21)
;CCS=1 İSE SD CARD VER2 BLOCK ADDRESS KARTDIR
;CCS;0 İSE SD CARD VER2 BYTE  ADDRESS KARTDIR CMD16 KULLANIP BLOCK ADDRESS ŞEKLE GETİRİLİR

;CMD58  [7AH,00H,00H,00H,00H,FDH] ŞEKLİNDEDİR


Buda tam çaılış haldeki algoritma;
Alıntı yapılan: RaMu

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;POWER_ON SEQUENCE
;ÖNCELİKLE SD KARTA GERİLİM UYGULANDIKTAN SONRA EN AZ 1 MİLİSANİYE BEKLENİR
;BURADA CS VE DI HATTLARI 1'DE TUTULUP, SCLK HATTINDAN EN AZ 74 BOŞ CLOCK GÖNDERİLİR, SD KART ENERJİLENDİĞİNDE
;BU 74 CLOCK PALSİ BOYUNCA CS HATTINA BAKAR EĞER CS HATTI 1 İSE INITALIZATION SEQUENCE E GEÇER.

;DI(programda SD_DI olarak yazılacak) SD KARTIN DATA INPUT PİNİDİR,
;BU HATTI 1 DE TUTMA İŞİ, SD KARTA 74 CLOCK PALSİ BOYUNCA FFh DATASI GÖNDERİLEREK YAPILIR


;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

;power on sequence den sonra
;SD KART INACTIVE STATE DEDİR
;ARTIK SD CARD KOMUT KABUL EDEBİLECEK HALE GELDİ, BURADA SD CARD SD MOD DENEN DOĞAL MODUNDADIR, BİZ
;SPI MODA GEÇİRMEYE ÇALIŞACAĞIZ
;SD KARTI SPI MODA GEÇİRMEK İÇİN; SD CARD IN CS HATTI 0 A ÇEKİLİP, SD CARD A  CMD0 GÖNDERİLİR
;SD CARD DA KOMUTLAR 6 BYTE UZUNLUĞUNDADIR VE MSB Sİ ÖNCE GÖNDERİLİR
;SD CARD DA CRC CORRECTION DENEN BİR DOĞRULAMA VARDIR (BKNZ SD SPECS. SAYFA 83 MODE SELECTION), SPI MODDA
;CRC KONTROLÜ KAPALIDIR (İSTENİRSE CMD59 İLE AKTİFLEŞTİRİLEBİLİR) FAKAT BİZ HENÜZ SPI MODA
;GEÇMEDİĞİMİZDEN CMD0 I CRC Sİ İLE BİRLİKTE GÖNDERMELİYİZ YANİ CMD0 <40h,00h,00h,00h,00h,95h> ŞEKLİNDEDİR
;SD CARD IN CMD0 A GERİBİLDİRİMİ 01h (IDLE STATE) R1 RESPONSE ŞEKLİNDE OLMALIDIR (BKNZ R1 RESPONSE)



;...
;CMD8


;CMD0 GÖNDERİP 01H R1 RESPONSE ALDIK, KART IDLE STATE DE VE SPI MODA GEÇİLDİ
;ARTIK CMD8 GÖNDERİP R7 RESPONSE ALMAMIZ LAZIM, R7 RESPONSE 5 BYTE DIR VE İLK BYTE I R1 RESPONSE DUR
;CMD8 CRC Sİ İLE BİRLİKTE ŞU ŞEKİLDEDİR <40H,00H,00H,01H,AAH,87H>
;ALMAMIZ GEREKEN RESPONSE ŞU ŞEKİLDEDİR <01h,00H,00H,01H,AAH>  BİZİM İÇİN SON 2 BYTE OLAN 01AA KISMI YETERLİDİR
;GELEN RESPONSE DA BU KISMIN 01AA OLUP OLMADIĞINA BAKACAĞIZ
;DURUM1 R7 RESPONSE DÜŞÜK 12 BİTİ 1AA ŞEKLİNDE GELDİ
;HATA   R7 RESPONSE DÜŞÜK 12 BİTİ 1AA ŞEKLİNDE GELMEDİ
;DURUM2 R7 RESPONSE HİÇ GELMEDİ  ÖYLEYSE DURUM2 YE DALLANILACAK



;CMD8 (Argument 0x000001AA, CRC 0x87) -> Response 0x01 0x000001AA -> Means it's
; SDC V2+ card, the Voltage range 2.7V~3.6V is supported -> OK




;************************************************************************************************************************
;|||||||||||||||||||||||||||||AÇIKLAMA İÇİN BAKINIZ ACMD41 ALTPROGRAMI|||||||||||||||||||||||||||||||||||||||||||||||||||
CALL     ACMD41       ;DURUM1 İÇİN ACMD41
;************************************************************************************************************************
 


CALL     CMD58        ;DURUM1 DE ACMD41 BAŞARIYLA UYGULANDIYSA CMD58 İLE DEVAM EDİLİR
                      ;CMD58 İÇİNDE CMD16 İLE BLOCK SIZE DEĞİŞTİRME GEREKLİMİ DEĞİLMİ KISMI
                      ;İNCELENİP ONA GÖRE İŞLEM YAPILIYOR

GOTO     SUCCEEDED    ;CMD58 BAŞARILI İSE GİRİŞ İŞLEMİ BAŞARILIDIR


DURUM2   NOP          ;CMD8 UYGULANDIĞINDA RESPONSE ALINAMAZSA BURAYA GELİR
                     ; BURADA ACMD41 UYGULANIR BAŞARILI OLURSA KART SD CARD VER1 BYTE ADDRESS DEMEKTİR
                  ; ARDINA CMD16 UYGULANIP CARD BLOCK ADDRESS MODA ALINIR
                  ;CMD16 DA BAŞARI İLE UYGULANIRSA GİRİŞ BAŞARILI DEMEKTİR SUCCEEDED E DALLANILIR

CALL     ACMD41        ;DURUM2 İÇİN ACMD41


CALL     CMD16         ;SD VER1 BYTE ADDRESS KARTIMIZ VAR, KART CMD16 İLE BLOCK ADDRESS YAPILIYOR

GOTO     SUCCEEDED




;**************************************************************************************************************
;_____________________________________________________________________________________________________________
;                                                                                                             |
;                                                                                                             |
;                                                                                                             |
SUCCEEDED  NOP        ;INIALIZATION SUCCESSFULL BAŞARI İLE SPI MODA GİRİLDİ VE KART OKUMA YAZMAYA HAZIR HALDE |
;                                                                                                             |
;BURADA ÖNCELİKLE SPI İN YÜKSEK FREKANSTA ÇALIŞMASI İÇİN AYAR YAPILACAK                                       |
;                                                                                                             |
;                                                                                                             |
;_____________________________________________________________________________________________________________|
;**************************************************************************************************************




;////////////////////////////////////////  ACMD41 ALTPROGRAMI   /////////////////////////////////////////////
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;ACMD41 SYF 32 VE 37 YE BAK



;                                       DURUM1
;CMD8 DEN DÜŞÜK 12 BİT 1AA ŞEKLİNDE RESPONSE ALDIK YANİ DURUM1 İLE DEVAM EDECEĞİZ
;ACMD41 UYGULAYIP SONRASINDA CMD58 GÖNDERECEĞİZ, CMD58 DEN GELEN OCR RESPONSE DA CCS biti 0 İSE  CMD16 GÖNDERECEĞİZ,
;CMD58 DEN GELEN OCR RESPONSE DA CCS biti 1 İSE GİRİŞ İŞLEMİ TAMAM SUCCESSFULL A GİT DİYECEĞİZ (CCS biti OCR bit 30 DUR)

;                                       DURUM2
;CMD8 DEN RESPONSE ALINAMAZSA YİNE ACMD41 UYGULANIR FAKAT DEVAMINDA CMD58 GÖNDERİLMEDEN, CMD16 GÖNDERİLİR

;BU ALTPROGRAM DURUM1 DURUM2 KONTROLÜ YAPMAZ SADECE ACMD41 İ GÖNDERİR VE GELN R1 RESPONSE A BAKAR, RESPONSE GELMEZSE
;UNKNOWN CARD HATASI VERİR, DURUM1 DURUM2 KONTROLÜ ACMD41 DEN BİR ÖNCEKİ KOMUT OLAN CMD8 DE YAPILIR, KONTROL ŞÖYLE YAPILIR
;CMD8 GÖNDERİLİP R7 RESPONSE ÇAĞRILIR "CALL R7_RESPONSE " R7_RESPONSE ALTPROGRAMINDA GERİBİLDİRİM ALINAMAZSA DURUM2 YE DALLANIR


;ARTIK ACMD41 İLE INITIALIZATION (GİRİŞ) PROSEDÜRÜNE GEÇECEĞİZ
;ACMD<n> (APPLICATION COMMAND <n> DEMEKTİR) UYGULAMASI CMD55 VE ARDINA CMD<n> ŞEKLİNDEDİR
;ACMD41 APP_SEND_OP_COND (APPLICATION SEND OPERATION CONDITIONS) SD KARTTAN ÇALIŞMA KOŞULLARINI
;BİLDİRMESİNİ İSTER, SD KARTIN VERSİYONU ÇALIŞMA VOLTAJI, BLOCK SİZE GİBİ ŞEYLERİ ÖĞENİRİZ

;ACMD41 DE CMD55 İÇİN R1 RESPONSE ALINIR, 00H OLMALIDIR (BELKİ 01H DIR, yok 00h mış)????????????????????????????????????????
;CMD41 KISMI İÇİNDE R1 RESPONSE ALINIR, 00H OLMALIDIR

;CMD55 <77H,00H,00H,00H,00H,65H> ŞEKLİNDEDİR
;CMD41 <69H,00H,00H,00H,00H,E5H> ŞEKLİNDEDİR

;ACMD41 İÇİN DİREK 00H RESPONSE LARI ALINAMAYABİLİR BU YÜZDEN BİR MÜDDET TEKRAR DENEMEK LAZIM


CALL     R1_RESPONSE ;GELEN 1 BYTE LIK R1 RESPONSE UNU BYTE5 E YAZAR 
MOVLW    00H
SUBWF    BYTE5,W
BTFSS    STATUS,Z    ;R1 RESPONSE=00h MI?
GOTO    ACMD41_TEKRAR         ;HAYIR RESPONSE YANLIŞ          ;BURADA PROBLEM OLABİLİR?????
                     ;R1=00H EVET RESPONSE DOĞRU

RETURN


;ACMD41 İN DURUM1 VE DURUM2 İÇİN ORTAK KISMI BURAYA KADAR BU KISIM SONUNA RETURN EKLENİP ALTPROGRAM HALİNE GETİRİLEBİLR+yapıldı

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ACMD41 ALTPROGRAMI SON \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\




;                                                 CMD16 ALTPROGRAMI                                             ;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;DURUM1 İÇİN CMD58 İLE CARD VERSİYONU KONTROL EDİLDİ VE CARD SD VER2 BYTE ADDRESS ŞEKLİNDEYSE ARTIK CMD16 UYGULANIR
;DURUM2 İÇİN DİREK ACMD41 DEN SONRA KART SD VER1 OLDUĞUNDAN  CMD16 UYGULANIR
;CMD16 (SET_BLOCKLEN) YAZMA-OKUMA BLOCK BOYUTUNU (UZUNLUĞUNU) SEÇME KOMUTUDUR
;DAHA ÖNCEDE BAHSETTİĞİMİZ GİBİ KOMUTLAR 6 BYTE UZUNLUĞUNDADIR MSB Sİ ÖNCE GÖNDERİLİR
;GÖNDERİLECEK İLK BYTE (BYTE5) KOMUTTUR, DEVAMINDA 32 bit (4 BYTE) ARGUMENT VARDIR, SON BYTE CRC DİR
;BLOCK SIZE BAHSEDİLEN ARGUMENT DE BELİRTİLİR YANİ BYTE4,3,2,1 İ "512" SAYISINI OLUŞTURACAK ŞEKİLDE YAZMALIYIZ
;SONUÇ OLARAK 512 BYTE OLARAK BLOCK SIZE BELİRTMEK İÇİN CMD16 ŞU ŞEKİLDE OLUR [50H,00H,00H,02H,00H,01H]
;CMD16 YA R1 GERİBİLDİRİMİ YAPILIR  R1 RESPONSE 00H OLANA KADAR CMD16 5-10 DEFA DENENİR SONRA PES EDİLİR
;                                    01H DA OLABİLİR BİLMİYORUM????????????????????????????????????????


RETURN               ;R1=00H EVET RESPONSE DOĞRU, ARTIK İŞLEM TAMAM BAŞARIYLA GİRİŞ YAPILDI SUCCEEDED KISMINA GEÇİLİR





;...
;                                 CMD58 ALTPROGRAMI
;                  CMD16 GEREKLİMİ DEĞİLMİ KONTROLÜYLE GEREKLİYSE CMD16 DA İŞLENİYOR
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;DURUM1 İN ACMD41 KISMI BAŞARILI OLURSA BURAYA GELİR, BURADA CMD58 İLE DURUM1 E DEVAM EDİLİR
;BURAYA KADAR BAŞARILI OLUNDUYSA KART SD CARD VER2 DİR ARTIK CMD58 İLE BLOCK ADDRESS Mİ BYTE ADDRESS Mİ BAKILACAK
;CMD58 READ_OCR (READ OPERATION CONDITION REGISTER) KOMUTUDUR
;GERİBİLDİRİMİ R1 RESPONSE+32bit OCR REGISTERI YANİ 5 BYTE ŞEKLİNDEDİR
;GELEN OCR REGISTER ININ 30. bitine BAKACAĞIZ (CCS bitidir)
;CCS: Card Capacity Status (ACMD41 Response)(Simp. Spec. page21)
;CCS=1 İSE SD CARD VER2 BLOCK ADDRESS KARTDIR
;CCS;0 İSE SD CARD VER2 BYTE  ADDRESS KARTDIR CMD16 KULLANIP BLOCK ADDRESS ŞEKLE GETİRİLİR

;CMD58  [7AH,00H,00H,00H,00H,FDH] ŞEKLİNDEDİR





CALL     R1_RESPONSE
MOVLW    00H                    ;01H YAZMIŞIM
SUBWF    BYTE5
BTFSS    STATUS,Z
GOTO     CMD58_TEKRAR  ;HAYIR R1 01H DEĞİL  BÖYLE BİR HATA VERMEMESİ LAZIM
;DEVAM                 ;EVET  R1 01H İSTEDİĞİMİZ GİBİ, R7 RESPONSE ÇAĞRILIP KALAN 4 BYTE ALINIR CCS BİTİ KONTROL EDİLİR   
 
CALL     R7_RESPONSE   ;GELEN 5 BYTE (R1+OCR) GERİBİLDİRİMİNİN R1 DEN SONRAKİ 4 BYTE INI  BYTE4,3,2,1 E KAYDEDER,
                       ;BYTE4 <bit6> (OCR <bit30>) CCS biti LAZIM,


BTFSS   BYTE4,7   ;OCR BİT 31 BUSY BİT SET Mİ YANİ İNİTİALİZATİON TAMAMLANDI MI?
GOTO    HATA    ;HAYIR TAMAMLANMAMIŞ
;EVET TAMAMLANDI


BTFSS    BYTE4,6       ;CCS biti [OCR bit30] 1 Mİ?


CALL   CMD16;HAYIR YANİ SD VER2 BYTE ADDRESS KARTDIR CMD16 İLE BLOCK ADDRESS E ÇEVRİLMELİDİR CMD16 KULLAN
RETURN;EVET  YANİ SD VER2 BLOCK ADDRESS KARTDIR CMD16 KULLANMAYA GEREK YOK TAMAM DÖN





;AŞAĞIDAKİ GİBİ İDİ YANLIŞ
;RETURN                 ;GOTO     SUCCEEDED     ;HAYIR  SD VER2 BLOCK ADDRESS KARTDIR CMD16YA GEREK YOK

;CALL     CMD16         ;EVET   SD VER2 BYTE  ADDRESS KARTDIR CMD16 İLE BLOCK SIZE 512 BYTE YAPILMALIDIR

                       ;CMD_16 İLE İLGİLİ AÇIKLAMALAR (BKNZ:) ALTPROGRAM KISMINDA YAPILDI
;RETURN                 ;GOTO     SUCCEEDED     ;CMD16 BAŞARILI İSE BURAYA GELİR VE GİRİŞ İŞLEM BAŞARILI DEMEKTİR SUCCEEDED E DALLANILIR


;                                 CMD58 ALTPROGRAMI SON
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



;                                 R1_RESPONSE ALT PROGRAMI
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;R1_RESPOSE ALTPROGRAMI SD CARD DAN GELEN 1 BYTE LIK GERİBİLDİRİMİ RESPONSE BYTE5 DEĞİŞKENİNE YAZAR GERİ DÖNER
;DÖNDÜĞÜ YERDE RESPONSE İSTENDİĞİ GİBİ DEĞİLSE KOMUT 8 DEFA TEKRARLANIP İSTENEN RESPONSE ALINMAYA ÇALIŞILIR
;YİNEDE İSTENEN RESPONSE ALINMAZSA KOMUT İÇİN NO RESPONSE (VEYA TIME OUT) DURUMUNDA UYGULANMASI GEREKEN UYGULANIR

;R1_RESPONSE HER ÇAĞRILDIĞINDA 8 DEFA FFH HARİCİ DEĞERDE RESPONSE ALMAYA ÇALIŞIR







;                                    R7_RESPONSE ALTPROGRAMI
;----------------------------------------------------------------------------------------------------------------------------------
;R7_RESPONSE ALTPROGRAMI SD CARD DAN GELEN 5 BYTE LIK R7 GERİBİLDİRİMİNİN (R1_RESPONSE+4BYTE) R1 DEN SONRAKİ
;4 BYTE INI BYTE4,3,2,1 E YAZAR, R7_RESPONSE İSTEYEN KOMUTLAR ÖNCELİKLE R1_RESPONSE ALTPROGRAMINI ÇAĞIRIP
;00H OLMASINA BAKAR 00H DEĞİLSE KOMUTU TEKRARLAMAK GEREKİR, R1_RESPONSE=00H OLARAK ALINDIKTAN SONRA
;R7_RESPONSE ÇAĞRILIP KALAN 4 BYTE GERİBİLDİRİM ALINIR VE ONA GÖRE GEREKEN İŞLEM YAPILIR
;R1_RESPONSE KISMININ 00H OLMASINA ÇAĞIRAN KISIM BAKIP 8 DEFA VEYA DAHA FAZLA KOMUTU TEKRARLAR SONUÇTA GEREKLİ GERİBİLDİRİM
;ALINAMAZSA KOMUT İÇİN NO_RESPONSE (VEYA TIMEOUT) DURUMUNDA YAPILMASI GEREKLİ İŞLEM YAPILIR






                               SEND_CMD      VE SEND_CMD0  ALTPROGRAMLARI      
;-----------------------------------------------------------------------------------------------------------------------------
;                        BYTE5,4,3,2,1,0 DAKİ 6 BYTE KOMUTU SPI DAN GÖNDERME ALTPROGRAMI
;GÖNDERME ESNASINDA GELEN VERİLER YİNE BYTE5,4,3,2,1,0 A KAYDEDİLİR, GEREKSİZ HEPSİ FFH DIR ZATEN
;KOMUT GÖNDERİMİNDE ÖNCELİKLE SD CARD IN KOMUT ALMAYA UYGUN OLUP OLMADIĞINA BAKILIR
;BUNUN İÇİN SD CARD A FFH CEVABI ALINANA KADAR FFH GÖNDERİLİR, FFH CEVABI ALINDIĞINDA ARRTIK KOMUT GÖNDERİLEBİLİR DEMEKTİR

;CMD0 İÇİN FFH ALANA KADAR FFH GÖNDERME İŞLEMİ YAPILMAZ, CMD0 SD INITIALIZATION KISMINDA GÖNDERİLDİĞİNDEN
;FFH CEVABI VERMESİ MÜMKÜN OLMAYABİLİR BUDA KOMUTUN İŞLENEMEMESİNE SEBEP OLUR

















;_______________________________________________________________________________________


;                                            1 BLOCK=512 BYTE YAZMA DENEMESİ
;---------------------------------------------------------------------------------------------------------

;CMD24 SINGLE BLOCK WRITE KOMUTU İLE (CMD16 İLE ÖNCEDEN SEÇİLMİŞ BLOCK UZUNLUĞUNDA BİZDE 512 BYTE) YAZMA YAPILIR
;CMD24 [31:0] BİTLERİ SD CARD A YAZILACAK ADRESİ BELİRTİR
;CMD24 GÖNDERİLİP KABULL EDİLDİKTEN SONRA HER KOMUT İÇİN OLDUĞU GİBİ R1 RESPONSE GELİR 00H OLMALIDIR
;ARTIK KART KOMUTU KABUL ETTİ VE YAZILACAK VERİYİ GÖNDERMEMİZİ BEKLİYOR
;VERİ 1 BYTE START BLOCK TOKEN + 512 BYTE YAZILACAK VERİ + 2 BYTE CRC ŞEKLİNDE SD KARTA GÖNDERİLİR
;CRC KONTROLÜ YAPILMIYORSA BU CRC BYTELARI 0 OLARAK GÖNDERİLİR, GÖNDERMEK ZORUNLUDUR
;START BLOCK TOKEN DEĞERİ FEh DIR
;VERİ GÖNDERİMİNİN HEMEN ARDINDAN SD CARD DAN 1 BYTE DATA RESPONSE GELİR
;DATA RESPONSE DÜŞÜK 4 BİTİ '0101' İSE YAZMA BAŞARILI DEMEKTİR
;DATA RESPONSE BU 1 BYTE IN DEVAMINDA BUSY BİLGİSİDE GÖNDERİR
;KART GELEN VERİYİ HAFIZASINA AKTARIRKEN MEŞGÜL OLDUĞUNU ANLATMAYA ÇALIŞIR
;MEŞGÜL OLMA DURUMU KART TARAFINDAN SD_DO HATTINI LOW (0) DA TUTARAK BİLDİRİLİR




Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Erhan YILMAZ

Elm Chan üstat yapmış yayınlamış zaten yılladır kullanılıyor. üretici firmalar bile kullanıyor. Her şeyi açık.

Buldum dediğinizde Elm Chan'ın kütüphanesi zaten.

http://elm-chan.org/fsw/ff/00index_e.html
http://elm-chan.org/fsw/ff/00index_p.html