Cubemx'de FATFS sorunu

Başlatan Gökhan BEKEN, 31 Aralık 2015, 22:55:22

Gökhan BEKEN

Yılbaşını proje yaparak geçiriyorum ama sorun yaşayınca tadı kaçtı. Mutlu seneler dilerim herkese.

Sorunuma gelecek olursam:
Eskiden yaptığım bir uygulamada SDIO ve SD kart kullanmıştım, FATFS'i aktif ederken sd kart kullanacağımızı belirtiyorduk. stm32f205ZETx serisinden bir mcu kullanmıştım yani şimdiki denediğim stm32f103c8t6'ya göre çok özelliği vardı.
Şimdi stm32f103c8t6 için spi ile fatfs  kullanmak istiyorum ancak , FATFS kısmında sadece user defined var bunu seçince sd kart olduğunu anlamıyor sanırım.
Sorun yaşamadan kullandığımın ekran fotoğrafı bu:


Bu da stm32f103 olan:


mesaj birleştirme:: 01 Ocak 2016, 00:02:08

[kaçın kötü espri geliyor]
1 yıl geçmiş ama konu güncel arkadaşlar :)
[/kaçın kötü espri geliyor]
Özel mesaj okumuyorum, lütfen göndermeyin.

Burak B

#1
Gökhan, SDIO seçmezsen "SD Card" aktif olmaz. User defined seçeneğinin amacı da bu zaten. Yani kendin SPI arabirime bağlayacaksın.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

RaMu

Bu konuda pek bir bilgim yok ama;
Belki "stm32f103" için gerekli FATFs kütüphanesi yüklü değildir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Gökhan BEKEN

cubemx ile çözemediyince klasik yöntemlerle yaptım ama ilerde lazım olabilir diye bu konuyu hala merak ediyorum.
userdefined yaptığımızda spi ile fatfs'i nasıl bağlayabiliriz Burak hocam?
Özel mesaj okumuyorum, lütfen göndermeyin.

EMP_Otto

CubeMx ile FatFsi bende cözemedim normal yollardan low level driverları yazdım fakat işlemci sürekli HarDFaulta düşüyor.Sizde böyle bir sorunla karsılastınız mı acaba?Sorunumu aşağıdaki linkte belirmiştim.
https://www.picproje.org/index.php/topic,62732.0.html
Bu işler zordur,özveri ister...

Burak B

FatFs'in alt katmanlarla haberleşmek için kullandığı belli başlı 4-5 fonksiyon prototipi var. read, write, init, ioctl, v.s. Eğer kullanmak istediğiniz ortam için bir sürücü yazıp (yada bulup) bu fonksiyon prototipleri ile doğru şekilde entegre ederseniz. FatFs ile MCU' nuzun hafızasını veya spi flash bile kullanabilirsiniz. Bundan sonrası sizin hayal gücünüze ve kodlama yeteneklerinize kalıyor.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

EMP_Otto

Cevabınız için tesekkürler.
DSTATUS disk_initialize (BYTE pdrv);
DSTATUS disk_status (BYTE pdrv);
DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
gibi fonksiyonları yazdım ayrıca disk_write() fonksiyonunu manuel olarak kullanarak spi flash üzerine istedğim sectore data yazıp  okuyabiliyorum.Benim sorunum spi flash üzerine fat dosya sistemi kurmak için f_mkfs fonksiyonunu cagırdımda fonksiyondan dönerken işlemcinin hard faultta düşmesi.
Verdiği hatayıda linkteki konuda paylaşmıştım.
Aslında iki farklı sorunla karsılasıyorum.
Birincisi işlemcinin return den sonra hardfaultta düşmesi
İkincisi FATFS nesnesini main içerisinde tanımlarsam işlemcinin hardfaultta düşmesi.
Kullandıgım spi flashın sector size 4k oldugu için FAtfs de 4k lık bir buffera ihtiyac duyuyor.İşlemcinin Stack ve heap sizenı artırmakta cözüm olmadı malesef.
Kullandıgım kitler STM32F4 Dİscovery ve STM32L053 Discovery
Her iki kitdede ayı sorunla karsılasıyorum.

İyi Çalışmalar ...
Bu işler zordur,özveri ister...

Burak B

#7
Kullndığınız derleyici ve IDE üzerinden stack ve/veya heap miktarlarını artırmayı deneyin. Ayrıca debugdayken stack trace yapıp hardfault oluşturan fonksiyonu görebilirsiniz.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

EMP_Otto

Hocam pop komutundan sonra hardfaulta düşüyor işlemci.İlginize Tesekkür ederim.

Bu işler zordur,özveri ister...

z

Sorun stack alanı ile ilgili gibi görünüyor.

Add SP, SP, #0x3C  satırı işlenmeden önce ve işlendikten sonra R13 ve R14 registerlerinin değeri nedir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMP_Otto

önce
R13 -> 0x20000830
R14 -> 0x08000167

sonra
R13 -> 0x2000086C
R14 -> 0x08000167

şeklinde hocam.Bir adım sonra zaten hardfaultta düşüyor işlemci
Bu işler zordur,özveri ister...

z

#11
Ok bir de 0x2000086C adresinden itibaren ileriye doğru (....870...874...) 6 tane 32 bit veriyi yazabilirmisin?

Stack alanı ile veri alanı çakışmış olabilir. MAP dosyasından 0x2000086C civarı acaba değişken alanına mı denk geliyor bakmak gerekecek.

Büyük boyutlu dizi falan açtın mı?

Stack değerini daha ileriye atsan düzelecek sanki.

Mesela  0x20002000 yada daha da ileri.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMP_Otto

Merhaba hocam  0x2000086C  adresinden sonraki memory aşagıdaki gibi



Stack degerini nasıl istediğim adresten baslatacagım acaba?

Kullandıgım spi flashın sector size 4k oldugu için FatFs dosya sistemi için 4k lık bir buffer tanımlı.Eger o bufferı local tanımlarsam sistem daha en bastan hardfaultta düşüyor.Global taanımlarsamda fonksiyondan dönerken hardfaultta düşüyor.Şuan stm32l053 disco kullanıyorum.
Stack ve heap ayarlarım,
Stack_Size      EQU     0x00000800

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000400

İlginize tesekkür ederim  hocam
Bu işler zordur,özveri ister...

z

Stack_Size      EQU     0x00004000 yaz.

hatta daha da gerilere gidebilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

EMP_Otto

#14
Z hocam  Stack_Size      EQU     0x00004000  yapınca   No space in execution regions with .ANY selector matching startup_stm32l053xx.o(STACK)  hatası alıyorum.STM32L053 discvoery 8 KB Ram 64 KB Flash var.Tam olarak stacki istediğim adresten nasıl  baslatabilirim?
Bu işler zordur,özveri ister...