Elektrotekno.com Ana Sayfa || Pic ve diğer işlemci ve denetleyiciler ile yapılmış devreler, projeler


Pic ile MMC Kart Okuma Yazma Kontrol Etme

Kayıt: 26 Ksm 2008
Mesajlar: 71

Offline
nuh_eroglu
Tarih: 27 11 2008 21:44

Dosya içinde

*Devre Şeması 2 Adet
*C dili ile yazılmış Test program algoritmaları vardır

Pic ile MMC Kart Okuma Yazma Kontrol Etme


Reklamlar
Kayıt: 26 Ksm 2008
Mesajlar: 71

Offline
nuh_eroglu
Tarih: 30 11 2008 23:43

buda başka bir uygulama

Pic ile MMC Kart Okuma Yazma Kontrol Etme

kodlar
// written by ed waugh 2004, www.edwaugh.co.uk

// for the original source, and hundreds more examples of pıc c code, see:
// http://www.microchipc.com/sourcecode/#mmc

int mmc_init();
int mmc_response(unsigned char response);
int mmc_read_block(unsigned long block_number);
int mmc_write_block(unsigned long block_number);
int mmc_get_status();


/************************** mmc ınit **************************************/
/* ınitialises the mmc into spı mode and sets block size, returns 0 on success */

int mmc_init()
{
int i;

setup_spı(spı_master | spı_h_to_l | spı_clk_dıv_4 | spı_ss_dısabled);

*0x94 |= 0x40; // set cke = 1 - clock idle low
*0x14 &= 0xef; // set ckp = 0 - data valid on rising edge

output_hıgh(pın_c2); // set ss = 1 (off)

for(i=0;i<10;i++) // initialise the mmc card into spı mode by sending clks on
{
spı_wrıte(0xff);
}

output_low(pın_c2); // set ss = 0 (on) tells card to go to spi mode when it receives reset

spı_wrıte(0x40); // send reset command
spı_wrıte(0x00); // all the arguments are 0x00 for the reset command
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0x95); // precalculated checksum as we are still in mmc mode

puts("sent go to spı\n\r");

if(mmc_response(0x01)==1) return 1; // if = 1 then there was a timeout waiting for 0x01 from the mmc

puts("got response from mmc\n\r");

i = 0;

while((i < 255) && (mmc_response(0x00)==1)) // must keep sending command if response
{
spı_wrıte(0x41); // send mmc command one to bring out of idle state
spı_wrıte(0x00); // all the arguments are 0x00 for command one
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0xff); // checksum is no longer required but we always send 0xff
i++;
}
if(i >= 254) return 1; // if >= 254 then there was a timeout waiting for 0x00 from the mmc

puts("got out of idle response from mmc\n\r");

output_hıgh(pın_c2); // set ss = 1 (off)

spı_wrıte(0xff); // extra clocks to allow mmc to finish off what it is doing

output_low(pın_c2); // set ss = 0 (on)

spı_wrıte(0x50); // send mmc command one to bring out of idle state
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0x02); // high block length bits - 512 bytes
spı_wrıte(0x00); // low block length bits
spı_wrıte(0xff); // checksum is no longer required but we always send 0xff

if((mmc_response(0x00))==1) return 1;
output_hıgh(pın_c2); // set ss = 1 (off)
puts("got set block length response from mmc\n\r");
return 0;
}

/************************** mmc get status **************************************/
/* get the status register of the mmc, for debugging purposes */

int mmc_get_status()
{

output_low(pın_c2); // set ss = 0 (on)

spı_wrıte(0x58); // send mmc command one to bring out of idle state
spı_wrıte(0x00);
spı_wrıte(0x00);
spı_wrıte(0x00); //
spı_wrıte(0x00); // always zero as mulitples of 512
spı_wrıte(0xff); // checksum is no longer required but we always send 0xff

output_hıgh(pın_c2); // set ss = 1 (off)
return 0;
}

/************************** mmc write block **************************************/

int mmc_write_block(unsigned long block_number)
{
unsigned long i;
unsigned long varh,varl;

varl=((block_number&0x003f)<<9);
varh=((block_number&0xffc0)>>7);

puts("write block\n\r"); // block size has been set in mmc_init()

output_low(pın_c2); // set ss = 0 (on)

spı_wrıte(0x58); // send mmc write block
spı_wrıte(hıgh(varh));
spı_wrıte(low(varh));
spı_wrıte(hıgh(varl));
spı_wrıte(0x00); // always zero as mulitples of 512
spı_wrıte(0xff); // checksum is no longer required but we always send 0xff

if((mmc_response(0x00))==1) return 1;
puts("got response to write block\n\r");

spı_wrıte(0xfe); // send data token

for(i=0;i<512;i++)
{

spı_wrıte(i2c_eeprom_read(hıgh(i),low(i))); // send data

}

spı_wrıte(0xff); // dummy crc
spı_wrıte(0xff);

if((spı_read(0xff)&0x0f)!=0x05) return 1;

puts("got data response to write block\n\r");

output_hıgh(pın_c2); // set ss = 1 (off)
return 0;
}



/************************** mmc read block **************************************/
/**** reads a 512 byte block from the mmc and outputs each byte to rs232 ****/

int mmc_read_block(unsigned long block_number)
{
unsigned long i;
unsigned long varh,varl;

varl=((block_number&0x003f)<<9);
varh=((block_number&0xffc0)>>7);

output_low(pın_c2); // set ss = 0 (on)

spı_wrıte(0x51); // send mmc read single block command
spı_wrıte(hıgh(varh)); // arguments are address
spı_wrıte(low(varh));
spı_wrıte(hıgh(varl));
spı_wrıte(0x00);
spı_wrıte(0xff); // checksum is no longer required but we always send 0xff

if((mmc_response(0x00))==1) return 1; // if mmc_response returns 1 then we failed to get a 0x00 response (affirmative)

puts("got response to read block command\n\r");

if((mmc_response(0xfe))==1) return 1; // wait for data token

puts("got data token\n\r");

for(i=0;i<512;i++)
{
putc(spı_read(0xff)); // we should now receive 512 bytes
}

spı_read(0xff); // crc bytes that are not needed
spı_read(0xff);

output_hıgh(pın_c2); // set ss = 1 (off)
spı_wrıte(0xff); // give mmc the clocks it needs to finish off

puts("\n\rend of read block\n\r");

return 0;
}

/************************** mmc get response **************************************/
/**** repeatedly reads the mmc until we get the response we want or timeout ****/

int mmc_response(unsigned char response)
{
unsigned long count = 0xffff; // 16bit repeat, it may be possible to shrink this to 8 bit but there is not much point

while(spı_read(0xff) != response && --count > 0);

if(count==0) return 1; // loop was exited due to timeout
else return 0; // loop was exited before timeout
}
Başa dön
Kayıt: 12 Nis 2008
Mesajlar: 901

Offline
esb72
Tarih: 01 12 2008 00:44

daha önce paylaşıldı!!


selam,
daha önce aşağıdaki linkte erry tarafından paylaşılmıştır..
http://www.elektrotekno.com/about5499.html

kolay gelsin
Başa dön
Kayıt: 26 Ksm 2008
Mesajlar: 71

Offline
nuh_eroglu
Tarih: 01 12 2008 00:55

Evet ilk dosya daha önce paylaşılmış olabilir fakat ikinci eklentim o dosyanın içinde yok bundan eminim indirilmesine gerek olmadan devre şemasını ve kodların hepsini yazdım oraya
Başa dön
Kayıt: 12 Nis 2008
Mesajlar: 901

Offline
esb72
Tarih: 01 12 2008 01:06

selam nuh,
anlıyorum seni istemeden paylaşmış olabilirsin.forumun arama sayfasında alıntı dosyaları paylaşmadan önce arama yaparak dosyanın daha önce paylaşılmış olup olmadığını kontrol edebilirsin.bu hepimizin yapabileceği bir hata.
diğer paylaşımın için teşekkürler
kolay gelsin
Başa dön
Kayıt: 15 Ekm 2007
Mesajlar: 24

Offline
izzzet
Tarih: 01 12 2008 12:23

CCS C ile yazılmış olanı yok mu? Bu kodlar çok karmaşık geliyo.
Başa dön
Kayıt: 26 Ksm 2008
Mesajlar: 71

Offline
nuh_eroglu
Tarih: 01 12 2008 16:06

Dosya içeriğinde var
Başa dön
Kayıt: 11 Hzr 2008
Mesajlar: 117

Offline
nureddino
Tarih: 17 02 2009 16:20

ikinci şema...


ikinci şema microbasic manuelinden alınmış. olabilir fakat kaynak belirtmek daha güzel olur. tam paylaşım için
Başa dön
Kayıt: 26 Ksm 2008
Mesajlar: 71

Offline
nuh_eroglu
Tarih: 18 02 2009 00:33

Doğru söylüyorsun 2. şemayı sadece bağlantıların tam olarak görünmesi için koydum
Başa dön



Pic ile MMC Kart Okuma Yazma Kontrol Etme


Benzer Konular
- Kart programlayıcı program istekleriniz buraya!!!
- Pic 18f452 ile Modbus Veri okuma
- kombi kart test cihazı şeması

- Bilgisayar kontrol öğretmenliği - endüstri staj raporu

- Matlab ta veri okuma-yazma (.wav , .jpeg , .txt , .doc ...)
- TDA1524A ile Ton Kontrol (bas - tiz - medium - volume) *denendi*
- 3 Fazlı Asenron Motor Hız kontrol yöntemleri ve Micromaster 440 incelenmesi
- "gölge etme" güneş enerjisi hakkında herşey konulu açık oturum
- CNC Kontrol projesi

- rn171 wifi modul 802.11 bg pic,avr,arm, kontrol devreleri icin

- Zaman Ayarlı Paralel port ile 8li 220 V kontrol

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based