Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Farukc - 29 Temmuz 2013, 07:56:38

Başlık: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 07:56:38
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?
Başlık: Ynt: STM32F4 Bootloader
Gönderen: 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.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: camby - 29 Temmuz 2013, 08:36:43
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 ?
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 09:02:07
Pei kaynak nereden bulabilirim?  :-\
Başlık: Ynt: STM32F4 Bootloader
Gönderen: X-Fi - 29 Temmuz 2013, 10:16:11
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.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 11:43:40
Ben kendim yazmak istiyorum. Öğrenmek amaçlı  ;D
Başlık: Ynt: STM32F4 Bootloader
Gönderen: 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...
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 14:53:08
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..
Başlık: Ynt: STM32F4 Bootloader
Gönderen: fatih6761 - 29 Temmuz 2013, 16:23:57
@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 (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.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 16:30:00
Türkçe kaynak bulabilmem mümkünmü? :-\
Başlık: Ynt: STM32F4 Bootloader
Gönderen: camby - 29 Temmuz 2013, 16:34:00
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.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: armsistem - 29 Temmuz 2013, 16:47:15
Hocam lpc23xx bootloader yazdım epey uğraştırıyor , baştan hex son bin çevir flsah yaz programı oraya dallandır. VS.....
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 16:53:07
Örnek kod payşabilme imkanı olan varsa bir el atsın?
Veyatta kendi bootloaderini kullanabilirim
Başlık: Ynt: STM32F4 Bootloader
Gönderen: XX_CİHAN_XX - 29 Temmuz 2013, 16:59:52
https://www.picproje.org/index.php/topic,43551.msg317841.html#msg317841 (https://www.picproje.org/index.php/topic,43551.msg317841.html#msg317841)
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 17:10:32
Ya ben bu işten hiç anlamdım pes ediyorum dahli bootloader nasıl kullanılıyor.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: armsistem - 29 Temmuz 2013, 17:25:02
hocam kusura bakma bootloader nedir biliyorsun dimi ?
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 17:26:23
O kadarda düşmedik canım. Sorun şuki ingilizcem kötü ve sayfalarca kod görünce gözüm korkuyor.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: X-Fi - 29 Temmuz 2013, 17:35:11
Örnek kod üzerine odaklanma bu iş bir flash hapis oyunu gibidir öncelikle;

- keil programını iyi kullanman gerekiyor flash adreslemelerini oradan yapacaksın. (scatter dosyası üzerinde durman gerekicek)
- 2 adet proje olacak; daimi bootloader yazılımı ve ana program.
- Vektör adreslerini bootloader yazılımındaki startup dosyası belirler. Çünkü ilk yazılan program odur yüklenecek ana program bu vektör adreslerini kullanır.
- kullanmadığın bir ram adresi bölümlersin.
- ram üzerinde çalışacak fonksiyonları kütüpaneler  __RAM olarak tanımlıyor. Bu fonksiyonları içeren .c dosyasını options/memory assignment ile bölümlediğin ram adresine taşımalısın.
- Güncelleme yapmadan önce flash adresini sileceksin. (bu bir flash memory kuralı) Flash yazma silme işlemleri sırasında tüm keslemleri kapatmalısın systick timer dahil.
- yeni yazılımı adreslerine dolduracaksın .hex protekolü kullanırsan adresler her paketin içinde geliyor .s19 da kullanabilirsin ikiside checksum güvenlikli.(fazladan önlem olarak aktarım bitince tüm flashın CRC32 bilgisini alıp karşılaştırabilirsin)
- yazma işlemi bitince bootloaderı tekrar kullanmaması için oluşturduğun giriş anahtarını değiştirip nvic system reset fonksiyonuyla işlemciyi resetlersin.


Bu standart bir yöntem eksi yönleri bootloader kısmını güncelleyemezsiniz ve vektör adreslerini değiştiremezsiniz. Benim kullandığım bir yöntem var oda şöyle flash hafızası geniş işlemcilerde hafızayı 2 ye bölmek. İlk kısmı main diğer kısmı buffer olarak kullanmak. Güncellenecek yazılım önce buffer kısmına doldurulur, kontrol edilir. Doğru ise ram e atlayıp ana programı silip buffer'ı main bölümüne kopyalıyorum. Bootloader da ana programın içinde bulunduğu için tek proje üzerinden yürüyorsunuz vektörler de sabit kalıyor.   

Bilgiler sana dağınık gelebilir sistem biraz karmaşık çalışıyor. Sadece kod kopyalamak yeterli değil. Böyle bir iş yapılacaksa çok araştıracaksın demektir. Elimden gelen bu kadar ben kod vermem ama yardımcı olmaya çalışırım.

Kolay gelsin.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 29 Temmuz 2013, 17:50:16
 :-\ Kfam karıştı. iyice tırstım ben bu işten dahili bootloader nasıl kullanılıyor?
Başlık: Ynt: STM32F4 Bootloader
Gönderen: X-Fi - 29 Temmuz 2013, 18:15:14
işlemciyi  usart1 veya usb yoluyla bilgisayara bağla boot0 pinini 1 e çekip işlemciyi resetle cihaz dfu modunda başlar.

Dfuse demonstration yazılımıyla programı yüklersin youtube da örnekleri var.
Başlık: Ynt: STM32F4 Bootloader
Gönderen: Farukc - 30 Temmuz 2013, 09:41:25
Teşekkkürler  ;D