STM32F4 Bootloader

Başlatan Farukc, 29 Temmuz 2013, 07:56:38

Farukc

Arkadaşlar Stm32f4 için seri porttanveya usb gibi bir arabirimden gelen veriyi Flash'a yazmak istiyorum. Keilde Stm32f4 için nasıl bootloader yazarım çok zor bir işmidir?

X-Fi

zor bir iş değildir bootloader api lerini inceleyebilirsiniz mantık flash adresini adreslemekten geçiyor daha sonra flash verilerini değiştirmek için ram de koşmanız gerekiyor bu iki işlemi gerçekleştirirseniz kendi bootloaderınızı yazabilirsiniz.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

camby

Alıntı yapılan: X-Fi - 29 Temmuz 2013, 08:29:42
zor bir iş değildir bootloader api lerini inceleyebilirsiniz mantık flash adresini adreslemekten geçiyor daha sonra flash verilerini değiştirmek için ram de koşmanız gerekiyor bu iki işlemi gerçekleştirirseniz kendi bootloaderınızı yazabilirsiniz.
dahili bootloader yok mu zaten , bu işi yapan ?

Farukc

Pei kaynak nereden bulabilirim?  :-\

X-Fi

#4
Alıntı yapılan: camby - 29 Temmuz 2013, 08:36:43
dahili bootloader yok mu zaten , bu işi yapan ?

Hocam dahili bootloader var external boot pini ile aktif olan. Ancak diyelimki gprs kontrollü bir sistem kurdunuz. Güncel yazılımı soket üzerinden çekip boot etmek istiyorsunuz. Böyle durumlarda bootloader sistemini kendiniz yazmanız gerekir. Sanıyorum arkadaşın sorduğu soruda bu yönde.

Kaynak için st nin sitesinden application notlara bakınız. Hazır usart bootloader yazılımları mevcut.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Farukc

Ben kendim yazmak istiyorum. Öğrenmek amaçlı  ;D

fatih6761

Hocam eğer öğrenmek istiyorsanız mantığı basit, temel donanımları kullanmayı biliyorsanız (usart, flash gibi) basit bir bootloader yazabilirsiniz.
Öncelikle Flash'ın ilk sektöründe (bilgisayardaki MBR gibi) sizin yazılımınız olacak ve ilk olarak sizin yazılımınız çalıştırılacak. Yazdığınız program öncelikle USART modülünü başlatacak ve hazır olduğunu bildiren bir veri yollayacak. Eğer karşıdan programlama emri gelirse, ki bunu da bilgisayar tarafında yazdığınız program yollayacak, USART üzerinden bloklar halinde program yazılımını alacaksınız. Flash modülünü başlatıp aldığınız programı flash'a yazacaksınız. Eğer USARTta herhangi bir aygıt yoksa veya programlama emri bir gelmemişse önceden yazılımı flasha yazdığınız noktaya programı atlatacaksınız. Bunu C de function pointer ile yapabilirsiniz. Asıl yazılım kendi kendine çalışacaktır. Program yükleme işini bir pine de bağlayabilirsiniz. Eğer çip çalıştığında PA.0 pini lojik 1 ise program alınacak gibi.
İkinci olarak firmware update durumu var. Yani bootloader'ın kendi yazılımını güncellemesi. Burada mantığı kendiniz kurabilirsiniz. Mesela yeni bootloader'ı son sektöre veya ikinci sektöre kaydedersiniz. Açılışta doğrudan ikinci sektöre atlarsınız. Ya da ikinci sektördeki bootloaderı çalıştırırsınız o da kendini ilk sektöre kopyalar.
Kolay gelsin, iyi çalışmalar hocam...

Farukc

Alıntı yapılan: fatih6761 - 29 Temmuz 2013, 14:47:47
Hocam eğer öğrenmek istiyorsanız mantığı basit, temel donanımları kullanmayı biliyorsanız (usart, flash gibi) basit bir bootloader yazabilirsiniz.
Öncelikle Flash'ın ilk sektöründe (bilgisayardaki MBR gibi) sizin yazılımınız olacak ve ilk olarak sizin yazılımınız çalıştırılacak. Yazdığınız program öncelikle USART modülünü başlatacak ve hazır olduğunu bildiren bir veri yollayacak. Eğer karşıdan programlama emri gelirse, ki bunu da bilgisayar tarafında yazdığınız program yollayacak, USART üzerinden bloklar halinde program yazılımını alacaksınız. Flash modülünü başlatıp aldığınız programı flash'a yazacaksınız. Eğer USARTta herhangi bir aygıt yoksa veya programlama emri bir gelmemişse önceden yazılımı flasha yazdığınız noktaya programı atlatacaksınız. Bunu C de function pointer ile yapabilirsiniz. Asıl yazılım kendi kendine çalışacaktır. Program yükleme işini bir pine de bağlayabilirsiniz. Eğer çip çalıştığında PA.0 pini lojik 1 ise program alınacak gibi.
İkinci olarak firmware update durumu var. Yani bootloader'ın kendi yazılımını güncellemesi. Burada mantığı kendiniz kurabilirsiniz. Mesela yeni bootloader'ı son sektöre veya ikinci sektöre kaydedersiniz. Açılışta doğrudan ikinci sektöre atlarsınız. Ya da ikinci sektördeki bootloaderı çalıştırırsınız o da kendini ilk sektöre kopyalar.
Kolay gelsin, iyi çalışmalar hocam...

İlk önce çok teşekkür ederim sadece 2 noktayı anlamadım

*Verileri nasıl Flash'a yazacağım. Keil kullanıyorum
*Anlatımınızdaki belii bir sektöre atlamayı nasıl yapabilirim.

Saygılar..

fatih6761

@Farukc hocam en kolay yöntem StdPeriph standart kütüphanelerini kullanmak. Orada zaten EraseSector, WriteDoubleWord gibi gerekli temel fonksiyonlar var. Eğer hazır kullanmayacağım derseniz ve ingilizceniz yeterliyse datasheet'leri iyice karıştırmanız gerekiyor. İsterseniz StdPeriph kodunu da inceleyerek kendi fonksiyonlarınızı yazabilirsiniz.
Sektöre atlama işi kolay. Flash bellek zaten adres uzayında. RAM adresi gibi görünüyor diye biliyorum.
Mesela şöyle bir uygulama var:
http://markdingst.blogspot.com/2012/06/make-own-bootloader-for-arm-cortex-m3.html
Yapılan işlem basit. Dahili flash'a önceden programladığınız kodun adresinden itibaren programın bir sektörünü ram'e kopyalıyorsunuz ve ramdeki kopyaladığınız adrese atlıyorsunuz. Program kendi .text ve .data kısımlarını kendisi rame kopyalayıp devam edecek. Atlama işini Assembly Branch komutlarıyla veya C için function pointer ile yapabilirsiniz.

Farukc

Türkçe kaynak bulabilmem mümkünmü? :-\

camby

Alıntı yapılan: Farukc - 29 Temmuz 2013, 16:30:00
Türkçe kaynak bulabilmem mümkünmü? :-\

değil.

ancak burada tecrübesini yazan vardır belki. ST'nin tüm kaynakları ingilizce.

armsistem

Hocam lpc23xx bootloader yazdım epey uğraştırıyor , baştan hex son bin çevir flsah yaz programı oraya dallandır. VS.....

Farukc

Örnek kod payşabilme imkanı olan varsa bir el atsın?
Veyatta kendi bootloaderini kullanabilirim

XX_CİHAN_XX

Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Farukc

Ya ben bu işten hiç anlamdım pes ediyorum dahli bootloader nasıl kullanılıyor.