Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Erhan YILMAZ - 06 Şubat 2011, 13:59:46

Başlık: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 06 Şubat 2011, 13:59:46
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 (http://hotfile.com/dl/102350980/06039fa/lpc1768_sd_deneme_Erhan.zip.html) ulaşabilirsiniz.


(http://img717.imageshack.us/img717/1888/lpcxpressosd.jpg)

(http://img810.imageshack.us/img810/72/sddeneme.jpg)

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 (;;) {

}  }



Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: mustafa_cmbz - 06 Şubat 2011, 14:17:15
ellerinize sağlık hocam....yaf şu c acayip güzel bişi :) iyice alıştım gibi...
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: X-Fi - 06 Şubat 2011, 14:26:13
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.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 06 Şubat 2011, 14:33:22
İ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.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: fatihinanc - 06 Şubat 2011, 15:14:52
Elinize sağlık Erhan hocam,
Uygulama gayet güzel olmuş.
Chan üstadın kütüphane sayesinde birçok yükten kurtuluyoruz ;)
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 06 Şubat 2011, 15:44:28
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. ;)
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Mucit23 - 06 Şubat 2011, 16:11:54
Ellerinize sağlık erhan hocam. SD kart kullanımına çok güzel bir örnek oldu.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: KIRIKDR - 07 Şubat 2011, 10:50:29
cok gusel hocam eline saglık bayadır calısan bir sd kart uygulamasına rastlamamıstım iyi oldu...tesekkurler  ;)
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 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?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: 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.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: mcankaya - 08 Şubat 2011, 20:00:09
Erhan kardeşimiz yine güzel bir paylaşım yapmış, teşekkür ederiz hocam :)
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 21:36:31
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?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 22:31:57
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.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 08 Şubat 2011, 22:37:45
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.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 22:45:25
@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?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 08 Şubat 2011, 22:56:42
Ben direk derledim keil de onlar hazırdı ama disk_initiliaze() fonksiyonu içinde spi_init() ayarlarını yapıyor oraya ekliyorsun spi hazırlama kodlarını.Birde spi için byte gönderme byte alma fonksiyonlarını yazıyorsunuz birde rtc fonksiyonları var ama zaman kullanmak istemiyorsanız içi boş sabit bi saat değeri olan bi rtc fonksiyonu yazıp kullanabilirsiniz.Lpc1768de dahili rtc olduğundan kodları hazırdır.Başka denetleyiciye taşımak için alt seviyede bu şekilde değişiklikler gerekiyor.Kodları başka denetleyiciye taşımadan önce örneklerine bakmanızı tavsiye ederim çoğu denetleyici ile yapılmış örneği var chanın.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 23:00:51
Yani bizim diskio.c diye bir dosya hazırlamamız gerekiyor. Yanlış mıyım? Bu kodları da oraya aktaracağız.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 08 Şubat 2011, 23:18:28
  Low level disk I/O module is not included in this archive because the FatFs
  module is only a generic file system layer and not depend on any specific
  storage device. You have to provide a low level disk I/O module that written
  to control your storage device.

Beni oku dosyasında belirtmiş yanlış anlamadıysam diskI/O.c dosyası ile bi işiniz yok.Hocam siz tam olarak ne yapmak istiyorsunuz?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 23:36:27
Hocam ben  wireless ortamda 5km çapındaki cihazlardan  bir kaç ayrı sensörden gelen analog verileri mmc kart'a dizip aynı zamanda kablosuz olarak gönderen bir sistem tasarlıyorum. Şimdi yapmak istediğim şey verileri karta yazdırmak. Bir de bu LPC17xx_uart.c, LPC17xx_sd.c gibi kütüphaneleri nerden buldunuz hocam?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 08 Şubat 2011, 23:43:23
Hocam onların hepsi hazır işte uygulama notunda var.Bahsettiğiniz uygulamayı verdiğim kodlarla lpc1768 ile yapabilirsiniz her hangi bi değişiklik gerektirmez.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 08 Şubat 2011, 23:47:53
Kütüphaneleri internette araştırmama rağmen bulamadım. LPC17xx_sd dosyasını nereden aldınız mesela? Keil ve NXP'nin sitesinde yok. Tamam dostum anladım senin verdiğin kodlarla yapabilirim. Ama adam uygulama notu vermiş bu notta kullandığı kütüphane dosyalarını nerden temin edebileceğimi yazmamış. Sen nereden temin ettin onu soruyorum. Yarın birgün başka birşey lazım olur bulamayız.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 08 Şubat 2011, 23:51:55
an10916 uygulamasının kodlarında var.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 00:05:14
Hocam sağolasın. Fakat şunu gördüm ki bu NXP eğer bu uygulama notlarını, kütüphane dosyalarını daha düzenli bir şekilde kullanıma sunsa öğrenmek gerçekten çok kolay olacak. Adam uygulama notunu vermiş fakat kodlarını şuradan indirebilirsiniz gibi bir link vermemiş. ara tara canı çıkıyor insanın.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 00:07:20
Şu sitede kütüphane dosyaları adam gibi paylaşılmış
http://www.coocox.org/NXP-Series.php (http://www.coocox.org/NXP-Series.php)
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 00:20:43
http://ics.nxp.com/support/documents/microcontrollers/zip/lpc17xx.cmsis.driver.library.zip (http://ics.nxp.com/support/documents/microcontrollers/zip/lpc17xx.cmsis.driver.library.zip) bağlantısındaki dosyada da gerekli tüm kütüphaneler var zannedersem...
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 00:31:29
Hocam sanırım çok soru sordum fakat "1U<<28" ne demektir? U nedir?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 09 Şubat 2011, 00:41:02
hocam o 28. biti gösterir binary oalrak 0b 00010000 00000000 00000000 00000000 hex 0x10000000 sayısına denktir.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 11:32:49
Hocam o şekilde neden gösterilmiş? 1<<28 değil miydi onun gösterilişi. "1U" nedir? unsigned demek mi?
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 09 Şubat 2011, 13:42:53
Hocam ordaki u unsigned int'den geliyor.Yani osayının tipini söylüyor.C dilinde pek önemi olmayan bi tanımlama.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: LukeSkywalker - 09 Şubat 2011, 13:46:56
Teşekkürler hocam cevaplar için. Şimdilik ARM7'lerden başladım ama zannedersem CORTEX m3'e geçmek zor olmayacaktır..
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 09 Şubat 2011, 13:51:02
Rica ederim hocam ne demek.Bende ilk defa yazıyorum armler ile sonuçta hepsi c dilini destekliyor sorun olmaz geçişte herhalde.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 09 Şubat 2011, 23:55:04
Önemsiz demekle hata yapmışım galiba. :) Ben 8 bi denetleyiciler ile uğraşırken hiç karşılaşmadığım için öyle dedim meğerse önemi büyükmüş.Bilgilendirme için teşekkürler.
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erhan YILMAZ - 10 Şubat 2011, 00:09:41
Hocam bahsettiğiniz kitap ilgimi çekti bende almayı düşünüyorum.Burada yüzde elli indirimli varmış.

http://www.idefix.com/kitap/hatasiz-kodlama-stephen-a-maguire/tanim.asp?sid=G38MKNU1RH8ORR2SG55H
Başlık: Ynt: Lpcxpresso sd kart denemesi
Gönderen: Erol YILMAZ - 25 Ağustos 2011, 14:24:06
Bu kitabı 10 yıl önce biraz okumuştum,
İlgimi çekmişti, geçen hafta okudum yine hoş,
Biliyorum dediğimiz yanlışlar neler, anlatıyor hepsini...