Lpcxpresso sd kart denemesi

Başlatan Erhan YILMAZ, 06 Şubat 2011, 13:59:46

Erhan YILMAZ

Lpcxpresso kiti alalı bayağı oldu fakat derslerin yoğunluğundan şimdi göz atabiliyorum.Sd kart uygulaması ne zamandır aklımdaydı.Emre arkadaşımda sağolsun sorularımı yanıtsız bırakmadı.Uygulama Elm chanın meşhur fat kütüphanesi ile yapılmıştır.Kodları nxpnin an10916 uygulamasından düzenleyerek yazdım.Sd kart lpc1768 ile ssp0 modülü üzerinden haberleşiyor.Örnek uygulamada sd kart içinde bir metin belgesi oluşturularak içine yazı yazılmıştır.Kodlar keil uvision4'te derlenmiştir.Derlenen kodlar lpcxpresso idesi üzerinden kite atılmıştır.Proje dosyalarına buradan ulaşabilirsiniz.






Lpcxpresso sd kart pin bağlantıları
1  gnd
28 vcc
11 di 
12 do 
13 ck 
14 cs


Main yazılımı
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include "lpc17xx.h"
#include "system_LPC17xx.h"
#include "lpc17xx_rtc.h"
#include "integer.h"
#include "diskio.h"
#include "ff.h"



volatile UINT Timer = 0;		/* Performance timer (1kHz increment) */

/* LED indicator */
#define LED1ON()  do {LPC_GPIO0 -> FIOSET |= (1<<22);}while (0)
#define LED1OFF() do {LPC_GPIO0 -> FIOCLR |= (1<<22);}while (0)

/* SysTick Interrupt Handler (1ms)    */
void SysTick_Handler (void) 
{           
	static DWORD pres, flip, prescale_disk_io;

	Timer++;

	if ( pres++ >= 500 ) {
		pres = 0;
		if (flip) LED1ON(); 
		else LED1OFF();
		flip = !flip;
	}

	// Disk timer process to be called every 10 ms
	if ( prescale_disk_io++ >=10 ) {
		prescale_disk_io = 0;
//		disk_timerproc(); /* <- Disk timer process to be called every 10 ms */
	}
}

/*---------------------------------------------------------*/
/* User Provided RTC Function for FatFs module             */
/*---------------------------------------------------------*/
/* This is a real time clock service to be called from     */
/* FatFs module. Any valid time must be returned even if   */
/* the system does not support an RTC.                     */
/* This function is not required in read-only cfg.         */

DWORD get_fattime ()
{
	RTCTime rtc;

	// Get local time 
	rtc_gettime(&rtc);

	// Pack date and time into a DWORD variable 
	return	  ((DWORD)(rtc.RTC_Year - 1980) << 25)
			| ((DWORD)rtc.RTC_Mon << 21)
			| ((DWORD)rtc.RTC_Mday << 16)
			| ((DWORD)rtc.RTC_Hour << 11)
			| ((DWORD)rtc.RTC_Min << 5)
			| ((DWORD)rtc.RTC_Sec >> 1);	  
}





static void IoInit(void) 
{
	RTCTime  current_time;

	SystemInit(); 

	SysTick_Config(SystemFrequency/1000 - 1); /* Generate interrupt each 1 ms   */

	LPC17xx_RTC_Init ();
	current_time.RTC_Sec = 0;
	current_time.RTC_Min = 0;
	current_time.RTC_Hour = 0;
	current_time.RTC_Mday = 1;
	current_time.RTC_Wday = 0;
	current_time.RTC_Yday = 0;		/* current date 01/01/2010 */
	current_time.RTC_Mon = 1;
	current_time.RTC_Year = 2010;
	LPC17xx_RTC_SetTime( &current_time );		/* Set local time */
	LPC17xx_RTC_Start ();
	LPC_GPIO1 -> FIODIR |= (1U<<28) | (1U<<29) | (1U<<31);		/* P1.16..23 defined as Outputs */		
	LPC_GPIO0 -> FIODIR |= (1U<<22);
}


int main ()
{	char i;
	FRESULT sonuc;
	UINT s1; 
	RTCTime rtc;
	DSTATUS durum;
	FATFS surucu;		/* File system object for each logical drive */
	FIL dosya;			// File objects
	char buf[40]="Erhan YILMAZ sd kart denemesi\r\n";
	IoInit(); 
	 durum = disk_initialize(0); //karti hazirla
	 sonuc = f_mount(0,&surucu); //Karti aç
	 sonuc = f_open(&dosya, "erhan.txt", FA_CREATE_NEW);//Yeni dosya olustur.
	 sonuc = f_close(&dosya); //Olusturulan dosyayi kapat
	 sonuc = f_open(&dosya, "erhan.txt", FA_WRITE);// Dosyayi yazmak için aç
	 for(i=0;i<5;i++) sonuc = f_write(&dosya, buf,strlen(buf), &s1);//dosyaya yaz.	
	 sonuc = f_close(&dosya); //dosyayi kapat
	 sonuc = f_open(&dosya, "erhan.txt", FA_WRITE);//dosyayi tekrar aç.
	 sonuc = f_lseek(&dosya, dosya.fsize);//Dosyanin sonuna git
	 sonuc = f_write(&dosya, "bunlarıda sonuna ekle",21, &s1);//dosyayanin sonuna yaz.
	 sonuc = f_close(&dosya);// dosyayi kapat.
	for (;;) {

}  }

mustafa_cmbz

ellerinize sağlık hocam....yaf şu c acayip güzel bişi :) iyice alıştım gibi...

X-Fi

hocam çok güzel olmuş elinize sağlık kullanıcağınız çoğu işde SD kütüpanesini çözmüş oldunuz

şu chan fat dosyası kütüpanesine bi türlü başlayamadım herkez övüyor sitesinde de bolca açıklama var boş zamanım olduğumda sizinde kodlara bakarak şu işi öğreneceğim.

çalışmalarınızda başarılar dilerim.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Erhan YILMAZ

İlginiz için teşekkürler.Hocam dediğiniz gibi sd kartı her uygulamada kullanırım artık eeproma bağlı kalmak yok verileri direk olarak windows ortamına taşıyor.Sd karta veri depolayan profesyonel uygulamalar yapılabilir.Chanın kodları gerçekten meşhur her denetleyiciye uygulanabiliyor.Bende en kısa zamanda avrler için denemeyi düşünüyorum.

fatihinanc

Elinize sağlık Erhan hocam,
Uygulama gayet güzel olmuş.
Chan üstadın kütüphane sayesinde birçok yükten kurtuluyoruz ;)
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

Erhan YILMAZ

Sağolasın Fatih hocam.Chan usta yazmış sağolsun dosya aç diyorsun açıyor kapat diyorsun kaptıyor. :) Aslında 16 kb hafızalı bi msp olsa msp430larada uyarlarız bu kodu. ;)

Mucit23

Ellerinize sağlık erhan hocam. SD kart kullanımına çok güzel bir örnek oldu.

KIRIKDR

cok gusel hocam eline saglık bayadır calısan bir sd kart uygulamasına rastlamamıstım iyi oldu...tesekkurler  ;)

LukeSkywalker

Chan'ın sample LPC2k için verdiği sample kodlarında giriş çıkış ayarı yaptığı bölümü göremedim. SPI'ı nasıl aktif ediyor ff.h dosyasında?

X-Fi

Alıntı yapılan: maytere - 08 Şubat 2011, 18:20:56
Chan'ın sample LPC2k için verdiği sample kodlarında giriş çıkış ayarı yaptığı bölümü göremedim. SPI'ı nasıl aktif ediyor ff.h dosyasında?

giriş çıkış ayarlarını diskio.h dosyaından yapıyorsunuz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

mcankaya

Erhan kardeşimiz yine güzel bir paylaşım yapmış, teşekkür ederiz hocam :)
aquila non captat muscas!

LukeSkywalker

Alıntı yapılan: X-Fi - 08 Şubat 2011, 18:23:54
Alıntı yapılan: maytere - 08 Şubat 2011, 18:20:56
Chan'ın sample LPC2k için verdiği sample kodlarında giriş çıkış ayarı yaptığı bölümü göremedim. SPI'ı nasıl aktif ediyor ff.h dosyasında?

giriş çıkış ayarlarını diskio.h dosyaından yapıyorsunuz.
Hocam benim asıl sormak istediğim şuydu; chan kodlarını port ederken ne gibi ayarlar yapmak gerekiyor? Spi ayarlarını nerden yapıyoruz?

LukeSkywalker

Hocam koskoca Philips bile Chan kütüphanesini kullanmış uygulama notlarında. Eleman resmen SD/MMC işinde markalaşmış. Ben Chan'ın sitesini çizgi izleyen robot yaparken farketmiştim ve elemanın çalışma tarzına hayran kalmıştım. Portlama işini de AN10916 gayet güzel anlatıyormuş. Şimdi inceleme fırsatım oldu. Tüm yapılması gereken ayarlar orada var.

Erhan YILMAZ

Avr'nin bedava c derleyicisi(winavr gccc) ve Chanın açık kodlu fat kütüphanesi varken pic kullanarak sd kart ile uygulama yapmak gereksiz diye düşünüyorum.

LukeSkywalker

@Tamirci_Erhan
Hocam uygulama notunda şimdi gözüme bir şey takıldı. "5.4 Implement low level functions"  isimli kısımda anlatılan kodları nereye yazmamız gerekiyor?