Protonda SD kart kullanımı

Başlatan Mucit23, 06 Temmuz 2011, 16:28:40

pcb

aşağıdaki linkten library developer ve menager ı kur
http://wiki.picbasic.org/index.php?n=LibraryManager.Plugin

eklediğim resimde kısmen anlatmaya çalıştım.


frederic

#16
Merhabalar,elimde dvd den sökülme donanımı üstünde bir sd kart yuvası ve dış dünya ile bağlantısını sağlayan soket + kablosu var.

İşlerin yoğunluğundan ben ilgilenemiyorum,protonda denemeler yapıp çalışmaları burda paylaşacak bir arkadaşa hediye etmek istiyorum,hoşçakalın.

[IMG]http://www.upload.gen.tr/uploads7/icx5c0p7/thumb_sd_cart.jpg[/img]

Mucit23

Alıntı yapılan: pcb - 30 Eylül 2011, 21:30:12
aşağıdaki linkten library developer ve menager ı kur
http://wiki.picbasic.org/index.php?n=LibraryManager.Plugin

eklediğim resimde kısmen anlatmaya çalıştım.



Hocam Size nekadar teşekkür etsem azdır.Sayenizde çözdüm işi.:)
İlk Başta bazı problemlerle karşılaştım. Pre Coımpiler'ı Nasıl aktif edeceğimi bulamadım. Pre compiler aktif olmayınca derleme yapmıyor. Library Manager'ı biraz kurcalayınca anladım. Sonra library dosyasını programa dahil edip derleyince sorun çözüldü. Protonun sitesindeki deneme programını derledim.

İşte kanıtı:D
Şimdi deney setim yanımda yok olsaydı denerdim. Üzerinde SD kart yuvası vardı.
Alıntı yapılan: frederic - 02 Ekim 2011, 15:52:19
Merhabalar,elimde dvd den sökülme donanımı üstünde bir sd kart yuvası ve dış dünya ile bağlantısını sağlayan soket + kablosu var.

İşlerin yoğunluğundan ben ilgilenemiyorum,protonda denemeler yapıp çalışmaları burda paylaşacak bir arkadaşa hediye etmek istiyorum,hoşçakalın.

[IMG]http://www.upload.gen.tr/uploads7/icx5c0p7/thumb_sd_cart.jpg[/img]

Hocam Üzerindene tür bir donanım var.?

egokdua

arkadaşlar hazır kütüphane kullanmadan , fet 16 veya 32  formatı kullanmadan sadece   sd kart  cmd komutları ile blok kayıt ve okuma yapabilen var mı ? Herhangi bir programlama dili olsa da olur .
Saygılarımla .

frederic

Üzerinde gerekli direnç vb. elemanlar dizili durumda,soketlede spi ve besleme ucları dışarı çıkıyor.

-Hasan-

Alıntı yapılan: egokdua - 03 Ekim 2011, 16:28:14
arkadaşlar hazır kütüphane kullanmadan , fet 16 veya 32  formatı kullanmadan sadece   sd kart  cmd komutları ile blok kayıt ve okuma yapabilen var mı ? Herhangi bir programlama dili olsa da olur .
Saygılarımla .

Ben yapabiliyorum, sonunda becerdim.  :D  Kendi yazdığım kütüphanelerle hem ASM ' de, hem de CCS C de, SD kartı EEPROM gibi kullanabiliyorum.

egokdua

sn Hasan Arkadaş .Sen bu işi çözmüşsün . Benim sorunum şu  cmd 24 komudu ile sd karta yazabiliyorum fakat başka bloklara kayıt yapamıyorum , sen nasıl yaptın üstat ?

-Hasan-

Sn arkadaşım; Picproje e-dergi 2 ' deki yazı ile bu işi ben de yeni çözdüm. O yazıyı hazırlayan arslan74 hocamıza çok teşekkür ediyorum. C biliyorsan aşağıdaki linke de bir bak, aynı zamanda karşılaştığım bir sorunu da oradan çözdüm.

http://www.microchipc.com/sourcecode/PIC_CCS_C_MMC_card.zip

Alıntı Yapcmd 24 komudu ile sd karta yazabiliyorum fakat başka bloklara kayıt yapamıyorum

Hocam siz hangi bloğa yazma işlemi yaptınız? ve yazdığınızı nasıl anladınız? Hex Editör ile mi yoksa karttan gelen cevaba göre mi? Blok bilgisini nasıl veriyorsunuz? İsterseniz kodunuzu verin bir inceleyeyim.

egokdua

Program bascom da fakat protona çok yakın . Sadece yazma bölümü :

Sub Mwrite(byval Bout As Byte , Byval Addr As Long )

Cmd24:              ' sd blok tek yazma yazma kodu
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs


Dat = &H58
Shiftout Mosi , Clk , Dat , Msbl

Shiftout Mosi , Clk , Addr , Msbl

Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
While Resp <> 0
Shiftin Miso , Clk , Resp , Msbl
Wend
Lcd "C24:" ; Hex(resp)

Dat = &HFE
Shiftout Mosi , Clk , Dat , Msbl
Waitms 30

For I = 1 To 512
Shiftout Mosi , Clk , Bout , Msbl





Next I

egokdua

sandisk sd kart  pdf sini okudum yazma için  cmd 24 komudu istiyor . Bunu spı da   sd karta gönderdiğimde onay kodu alıyorum ve seri olarak 512  bayt bloğu  yazıyorum . Fakat başka blok a yazamıyorum , yani sd karttın tamamına yazamıyorum . yazabildiğim ilk 512 bayt :( .

-Hasan-

Hocam koddan pek bir şey anlamadım. Size kendi akış diyagramımı vereyim. Gönderilecek adresin en yüksek byte ' ına Adres4, en düşük byte ' ına Adres1 diyelim:

CS Low Yap

0x58 Gönder (CMD24)
Adres4 Gönder
Adres3 Gönder
Adres2 Gönder
Adres1 Gönder
0xFF Gönder (CRC)

0x00 Gelmesini Bekle

0xFF Gönder (Start Byte ' ına Hazırlanması İçin)
0xFF Gönder (Start Byte ' ına Hazırlanması İçin)

0xFE Gönder (Start Byte ' ı)

512 Byte ' lık Bilgiyi Yaz

0xFF Gönder (CRC)
0xFF Gönder (CRC)

10000 Tane 0xFF Gönder (Yazma İşleminin Tamamlanması İçin; E-Dergideki yazıda 10000 yazma süresi kadar beklenmesi gerektiği yazıyordu, ben de o kadar beklettim.)

CS High Yap

0xFF Gönder (Diğer Komutlara Hazırlamak İçin)

egokdua

gönderdiğiniz akış blogunu inceledim 32 bit adresi 8 bit lik partiler halinde  sd karta gönderiyorum .  sonuç aynı . Evet sd karta yazıyor ama aynı blok içine yazıyor. Belkide bunu ısıs te denediğim için bu sonucu alıyorum . Şöyle anlatayım . Bu düzeneği ısıs de  yaptım ve orda bulunan mmc  konpanenti  kullandım . icine boş bir imaj dosyası atıyorum  , yukarıda verdiğiniz gibi  cmd 24 ü gönderip  8 bit x 4  ü  gönderiyorum ve yazma gerçekleşiyor . fakat 32 bit adresi değiştirip başka bir adrese yazmak istediğimde  gene aynı yere yazıyor . Bunu şuradan da anlayabiliyorum   mmc kart içine attığım dosyayı  notpad da açıp bakıyorum . Aslında bunu ısıs de denediğim için bu sonuç oluyor olabilir belkide .
Saygılarımla .

Mucit23

Arkadaşlar Aşağıdaki Programı Deney Setinde Denedim.
Device = 18F452
Xtal = 20

Config_Start
   OSC = HS ; HS
   PWRT = On ; Enabled
   BOR = On ; Enabled
   WDT = OFF ; Disabled
   CCP2MUX = OFF ; Disable (RB3)
   STVR = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End

'-----------------------------------------------------------
All_Digital = TRUE
'-----------------------------------------------------------
Hserial_Baud = 115200                                       'Setup RS232 port
Hserial_RCSTA = %10010000                                        
Hserial_TXSTA = %00100100
'-----------------------------------------------------------
Dim Response As Byte
Dim SD_IO As Byte
'-----------------------------------------------------------
Symbol SD_CS = PORTE.0                                      'SPI CS to SD CS (SD pin 1)
Symbol SD_DI = PORTC.5                                      'SPI DO to SD DI (SD Pin 2)
Symbol SD_CLK = PORTC.3                                     'SPI CLK to SD CLK (SD Pin 5)
Symbol SD_DO = PORTC.4                                      'SPI DI to SD DO (SD Pin 7)
'-----------------------------------------------------------
Include "SD_MMC_Deneme1_Lib.pbp"
'-----------------------------------------------------------
GoTo Over_Sub                                               'Jump over the subroutines
'-----------------------------------------------------------
Over_Sub:                                                   
    DelayMS 200
'-----------------------------------------------------------
Main_Prog:

    HSerOut ["INSERT SD OR MMC",13]

    Repeat 

        Response = SD_Init_FS

    Until Response = 0

'-----------------------------------------------------------

Open_New_File:

    SD_File_Name = "TESTFILE"                                 'File Name, upper case only!

    SD_File_Ext = "TXT"                                     'File Ext, upper case only!  

    Response = SD_Check_For_File                            'Check if file already exists

    If Response = 0 Then

        HSerOut ["FILE EXISTS - STOPPING",13]

        Stop

    Else         

        HSerOut ["OPENING FILE",13]

        SD_New_File                                         'Open new file

    EndIf

'-----------------------------------------------------------

Write_To_File:

    HSerOut ["WRITING TO FILE",13]

    SD_IO_String = "SD Kart Deneme Programıdır"

    SD_Write_String_To_File                                 'Write SD_IO_String to file 

    SD_Write_Byte_To_File 13                                                    

    SD_Write_Byte_To_File 10                                                    

'-----------------------------------------------------------

Close_File:

    SD_Close_File                                           'Close file

    HSerOut ["FILE CLOSED",13]

    Stop

Program çok iyi çalışıyor. Şüpheniz olmasın. :)
Ben Birkaç Test yaptım.
İlk başta Dosya adını değiştirdim. "TESTFILE" yerine "Deneme1" yaptım.
Sonra SD kartı bilgisayara takıp baktığımda Deneme1 adında Bir TXT dosyası görüyorum. Dosyayı açtığımda "Dosya bulunamıyor Yeni Bir dosya açmak istermisiniz" diye bir ibareyle karşılaşıyorum. Acaba Dosya adındaki önemli kriterler nelerdir.
Daha öğrenmek istediğim çok şey var. Örneğin Dosya içerisinde Bilgisayardaki gibi rahat nasıl hareket edebilirim. (alt satıra geç, üst sarıta geç, Metin sonuna git vs..)

egokdua

mucit ütad ben proton ile uğraşmaya yeni başladım . sd lib ( sd kütüphane dosyasını nereden buluyoruz ?

pcb

#29
daha önce de söylemiştim, dosya açma , yazma , silme gibi fonksiyonların bir işlem sırası var bunları yapmadan dosya açarsın belki ama bilgisayarda hata verir.

Aşağıda ki verdiğim programda ki dosya açma sırasına göre işlem yap.

    Repeat 
    Response = SD_Init_FS_MSSP  SD_SPI_FOSC_04
    Until Response = 0
    
    SD_File_Name = "OSMAN"
    SD_File_Ext = "TXT"
    Print   At  1,0,    "DOSYA ACILIYOR"
    Print   At  2,0,    "OSMAN.TXT"
    Response = SD_New_File
    If Response > 0 Then
    Print   At  2,0,    "YENI DOSYA ACILMIYOR,HATA!"
    GoTo    MMC_PROGRAM
    Else
    Print   At  3,0,    "DOSYA ACILDI"
    SD_Save_File
    EndIf


Dosya kaydet - kapat da hatalı , dosyayı açsa bile kayıt ettiği rakamlar problemli olabilir, help pdf yi iyi incele