Fırat DEVECİ

Log Tutma: ChanFs ve SD/MMC Kart

  • 2 sene önce, Fırat DEVECİ tarafından yazılmıştır.
  • 9 Yorum

MMC CardsIoT trendi ile birlikte ölçülen datanın kayıt altına alınması, yayınlanması ve incelemenmesi geçmişten daha da fazla önem kazanmaya başlamıştır. Günümüzde bir çok haberleşme metodu ile kayıt alma işlemi oldukça kolaylaşmış, kullanıcılar çok hassas olmayan işlemler için basit donanım ve programlara kolayca ulaşabilir hale gelmişlerdir.

Log tutma işlemi için günümüzde her ne kadar bilgisayar ya da mobil cihazlar tercih edilse de bu cihazların ulaşamadığı ya da sürekli çalıştırılamadığı bir çok durum oluşabilir. Bu durumlar karşısında kablolu ya da kablosuz haberleşmenin yanısıra sabit bir birime kayıt etme ihtiyacı ilgili probleme çözüm olarak getirilebilir. Bu konuda gömülü sistemlerin en çok kullandığı araçların başında SD/MMC kartlar büyük bir yer kapsar.

SD/MMC kartlar aynı diğer RAM ve ROM’lar gibi içerisine ham veri yazılabileceği gibi çeşitli formatlarla birlikte saklandığında özellikle bilgisayar tarafında kolaylıkla okunabilmektedirler. Bu kısımda ise dominant format metotu olan FAT dosya sistemi kullanılmaktadır.

FAT16/FAT32 Nedir?
1970’lerde ortaya çıkan ve 1980’ler özellikle MS-DOS ile kullanım yaygınlığı artan FAT, günümüzde hala taşınabilir cihazlar için standart olarak gelen bir dosyalama sistemidir. Günümüzde en çok kullanılan ve standart hale gelmiş yapısı FAT32 olan dosyalama sisteminin FAT16 ve FAT12 adında iki ailesi daha bulunmaktadır.

Bağlantı Çeşidi
SD/MMC kartlar SPI ve SDIO olmak üzere iki haberleşme birimi kullanmaktadırlar. Yeni ve hız konusunda üstün olan işlemcilerin çoğu, multimedia desteği sunmak adına SPI’a göre daha hızlı olan SDIO birimini içerilerinde bulundurmaktadırlar. Yazımızın sonlarına doğru yapacağımız örnekte STM32F07x serisi bir işlemci kullanacağımdan haberleşme birimimiz SPI mod olarak ayarlanmıştır.

ChanFs Fat Kütüphanesi
FAT kayıt sistemi için günümüzde bir çok işlemcinin kendi kütüphanelerini ücretli ya da ücretsiz bulmak mümkündür. Bu konuda çoğu kütüphane birbirine benzese de kod taşınabilirliğini arttırmak adına ANSI C ile yazılmış bir kütüphane kullanmak her zaman avantaj yaratacaktır. Bu konuda ilk yayını 2006’da yapılan ChanFs kütüphanesi oldukça fazla özellik ile birlikte kullanıcılara ücretsiz sunulmaktadır. Bugün bir çok işlemci üreticisi direk ya da dolaylı yoldan ChanFs kütüphanesini firma bazında destekler ve örnek uygulamalarını bu kütüphane ile oluştururlar. İlgili kütüphaneyi indirmek için buraya tıklamanız yeterli olacaktır.

FatFsChan FatFs kütüphanesi yukarıda da belirtildiği gibi ANSI C diline uygun yazıldığından, ana döngüler hariç sadece giriş/çıkış port ayarlarını yaparak kütüphaneyi kullanmak mümkün hale gelmektedir. Bunun için ise kütüphane dosyaları içeirisinde bulunan “diskio.h” ile “diskio.c” dosyalarının kullanacağınız işlemciye göre düzenlenmesi gerekir. Bu konuda önerim SPI ya da SDIO birimlerini kullanmadan önce, normal port tanımlamaları ile vereceğim örnekte görebileceğiniz şekilde kartın bağlandığı donanımları test edip, daha sonrasında mikrodenetleyicinizin donanımsal birimlerine yönelmenizdir.

Data Logger Örneği: DHT11
DHT11FatFs kütüphanesi ile MMC kart uygulamasını test edebilme adına ortamın sıcaklık ve nem değerlerini okuyarak log alma işlemi oldukça klasik bir uygulamadır. Bu konuda piyasada yeni ve bir çok sensör bulunsa da, bu konuya yeni başlayan kullanıcıların karşısına SHT11 ve türevi sensörler çıkacaktır. Bu sensörden yola çıkıp Çinli üreticiler DHT11 ve DHT22 gibi sensörleri kullanıcılara sunmaktadırlar. Bu konuda benim incelediğim sensör ise DHT11 oldu. Aasong firmasına ait olan sensörün çalışma sıcaklığı aralığı 0-50C ve nem kısmında ise %20-90 aralığında görülmektedir. Hassasiyet konusunda ise Çin standartını yakalayarak sıcaklıkta +-2C ve nemde +-5% olarak gözükmektedir. Sensörün bu özellikleri onu oda sıcaklığı algılama gibi hassas olmayan işlemler için uygun kılmaktadır.DHT11 timing diagramDHT11, kişisel alanda kullanmayı hiç tercih etmediğim, one-wire haberleşme metodu ile çalışmaktadır. Yalnız kullanılan one-wire metodu Maxim Dallas’ın standart hale gelmiş haberleşme metodundan oldukça farklıdır ve daha kolaydır. Kısaca çalışma metoduna bakacak olursak; mikrodenetleyici high seviyede bulunan sensörün, data ucunu öncelikle 20ms boyunca low seviyeye çeker ve daha sonrasında pini tekrar high seviyesine alarak sensöre içerisinde “yapmış olduğu çevrimi gönder komutu” verir. Sensör ise bu komutu aldığını data hattını 80us low ve 80us high tutarak işlemciye iletir ve bundan sonra yukarıda verilen 1 ve 0 anlamına gelen zamanlamalarla 40 bit veri gönderiminde bulunur. Gönderilen 40 bit veriyi okurken işlemcideki herhangi bir kesmenin okuma işlemini uzatmaması ya da yarıda kesmemesi çok önemlidir. 20ms başlangıç komutundan sonra diğer verilen gelmesi en fazla 4ms sürmektedir. Aşağıda sensöre gönderilen start komutu ve gelen cevap görülebilir.2Aşağı kısımda ise gelen dataların ayrıntılı şeklini görebilirsiniz.1Alınan 40 bit verinin oluşturduğu 5 byte’ın ilk iki byte’ı nem, ikinci iki byte’ı sıcaklık ve son byte’ı da checksum olarak gönderilir.

Uygulama: Sıcaklık/Nem Logger
Yaptığımız uygulamada, Chan FatFs kütüphanesinin testi için yukarı anlattığım DHT11 ile birlikte, Micro SD kart, SSD1306 kontrolcüsüne sahip OLED ekran ve STM32F072 Discovery kartı ile birlikte kullanarak dakikada bir kez kayıt işleminin yapılmasını sağlıyoruz. Uygulama için bağlantılar aşağıdaki şekilde olmalıdır.ConnectionsUygulama çalıştırıldığında öncelikle MMC kartın ayarları yapılarak içerisine “fxdev.txt” adı altında bir text dosyası oluşturacak. Daha sonrasında “LOGFILE.TXT” adında bir text dosyası var ise kaldıracak ve tekrar aynı adda dosya oluşturup 60 saniyede bir sıcaklık, nem ve checksum değerlerini kaydetmeye başlayacaktır. Her kayıt sonrasında dosyayı açıp sonra da kapattığından, belleği çıkardığınızda FAT’ın özelliğinden dolayı dosyanız bozulmayacaktır. Dosyalarınızı açtığınızda aşağıdaki görüntüyle karşılaşacaksınız.Text FilesUygulamada RTC birimi kullanmadığımdan FatFs kütüphanesinde bulunan “ffconf.h” dosyasında “_FS_NORTC” tanımını 1 olarak değiştirerek tarihi kendim 01.01.2015 tarihine atadım. Eğer dosyalarınızın anlık kayıt tarihini saklamak isterseniz RTC birimi kullanıp, bu bölümdeki tanımı 0 olarak değiştirmelisiniz.

Tüm bunların yanında uygulamaya görsellik katmak için SS1306 OLED ekran ekleyerek anlık değerlerin görüntülenmesi sağlandı.PictureYukarıda özelliklerini anlattığımız uygulamayı buradan indirebilirsiniz. Uygulamayı çalıştırıp, kayıtları aldığımızda aşağıdaki gibi (12 saatlik log) sonuçlar elde edebilirsiniz.Temp&Humd

Bitirirken…
Log alma işlemlerinin önemli bir ayağını anlattığım bu yazıda, temelleri anlayabilmek adına işlemcinin SD kart bölümünde herhangi bir donanımsal birim kullanmamaya özen gösterdim. Bunun yanında testlerim sırasında 2/4/8 ve 32GB kartların sorunsuzca yazılabildiklerini de deneyimledim.

Ayrıca bu uygulama ile birlikte SS1306 OLED için yazdığım kütüphaneye de ulaşabilirsiniz.

Bu konuda daha sonra da bir kaç yazı yazmayı düşündüğümü belirterek herkese çalışmalarında başarılar dilerim.

  1. Hakkı Kaplan dedi ki:

    Elinize sağlık hocam.

  2. Erol dedi ki:

    Güzel bir anlatım olmuş. Elinize Sağlık.

  3. Bahadır dedi ki:

    Teşekkürler, ellerinize sağlık.

  4. Muhittin KAPLAN dedi ki:

    Ellerine sağlık.Güzel Bir Yazı Olmuş.

  5. Agah dedi ki:

    Anlatımınız ve bilgilendirmeniz için çok müteşşekkirim hocam…

    Saygılar.

  6. Kürşad dedi ki:

    Çok iyi bir çalışma olmuş. Bir sorum olacak: SSD1306 kütüphanesi için kullandığınız fontları hangi programla oluşturdunuz, yardımcı olabilirseniz sevinirim.

    • Fırat DEVECİ dedi ki:

      Merhaba Kürşad,

      GLCD Font Creator programının çıktılarını kullandım ama kod üzerinde kendime göre değişiklikleri yaptım. Dolayısı ile herhangi bir üreteç yok hazır olarak.

  7. Muhammet YILDIZ dedi ki:

    Selam.

    Paylaşım için teşekkür ederim.Bir sorum var. 32 GB’a kadar sorun çıkmadığını belirtmişsiniz.
    Daha büyük kapasiteli sd card (64,128 GB gibi) desteği var mı? Deneyim ettiniz mi?

Yorum Yazınız

error: Content is protected !!