Ynt: Bootloader çalışıyor ancak uygulama programına atlayamıyor [ÇÖZÜLDÜ]

Başlatan XX_CİHAN_XX, 22 Kasım 2012, 18:25:04

XX_CİHAN_XX

Bir süredir STM32 serileri için Yazılımsal bootloader üzerinde çalışıyorum. Çalışmalarım tamamlanmak üzere.

Şuanda STM32F4 discovery kitim üzerinde USB DFU komutlarını harfiyle yerine getiren ve .DFU dosyasını 0x0800C000 dan itibaren Flash ına yazabilen kodlar çalışıyor.
Bootloader programı ise 0x08000000 adresinden başlamaktadır.
Tek bir sorunum kaldı onu da halledersem picproje bünyesine güzel bir kod kazandırmış olacağız.

Sorunum şudur; Bootloader modundan çıktığımda 0x0800C000 adresine yazılan applicatian programına geçiş yapamıyorum Reset alıyorum devamlı.
Yani program 0x0800C000 bölgesine sıçrayacağı yerde 0x08000000 başlangıç adresine geri gidiyor (Software reset durumu var.)

Programım da uygulama kodlarımın çalışacağı yere sıçramamı sağlayan kod kısmı aşağıdaki gibidir.

    if (((*(__IO uint32_t*)APP_DEFAULT_ADD) & 0x2FFE0000 ) == 0x20000000)
    { /* Jump to user application */		
      JumpAddress = *(__IO uint32_t*) (APP_DEFAULT_ADD + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APP_DEFAULT_ADD);
		  Jump_To_Application();
    }


Jump_To_Application();
çalıştığı anda program en başa reset vektörüne geri dönüyor oysa APP_DEFAULT_ADD + 4 noktasına atlatabilsem işlem tamam olacak ama bir türlü beceremedim.
Sıçrayamadan kesme geliyor da Stack Pointer saçma sapan bir yerlere mi gidiyor acaba?

mesaj birleştirme:: 22 Kasım 2012, 18:27:10

Debug ederken gördüğüm kadarıyla programım bootloader yazılımından çıkıp
Jump_To_Application();
Satırına kadar geliyor ancak bu satır işletildikten sonra 0x0800C000 adresine gitmek yerine resetlenip en başa dönüyor (Tekrar bootloader programının olduğu yere giriyor)

mesaj birleştirme:: 23 Kasım 2012, 10:26:58

Benzer sorun başkalarının da başına gelmiş.

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FSelf%20made%20bootloader&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=1309

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0800C000); //tam olarak ne işe yarar?

Application programımı bu adresten nasıl başlatabilirim?

mesaj birleştirme:: 23 Kasım 2012, 11:14:40

Arkadaşlar olay çözüldü :))

Bütün olay application programının option->target ayarından başlangıç adresini 0x800C000 olarak değiştirmekmiş.

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/23342/STM32_USB-Host-Device_Lib_V2.0.0.zip

Buradaki firmware indirip kulllanabilirsiniz.
Device Examples klasöründen DFU klasöründeki projeyi kullanın.
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.