STM32 Bootloader bölümüne kod yazmak.

Başlatan Klein, 29 Temmuz 2015, 12:38:46

Klein

STM32'lerde bootloader alanına kod atılabliyor mu?
İçimizde bootloader kodu yazan var mı?


Aslında yapmak istediğim şey şu:
MCU hangi boot pinleri ne durumda olursa olsun, hep main flash'tan başlasın.
Ya da bootloader içinden ana programa dallansın.
STM32'nin bazılarında bu opsiyon var. Otion byte ile bunu seçebiliyorsun.
Ancak benim kullandığımda yok. tek yolu , "ReadOut Protection"u lvl 2 yapmak.
korumayı level 2 yaparsam, bir daha çipe kod atamam.

X-Fi

var.

level 2 de çipin içerisindeki yazılımı kendi bootloaderım ile güncelleyebiliyorum.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Klein

Evet ancak öyle olur. Fakat şimdilik  komple loader yazmaktansa, bootloaderden ama programa  sıçrama yapmak daha kolayıma geliyor.
Eğer öyle bir çözüm bulamazsam  loader yazmayı düşünürüm sanırım.

mr.engineer

Merhaba,
Şu an ben de bununla uğraşıyorum. Sormak istediğim şey sıçrama olayını nasıl yapacağıma dair sıkıntılarım var. Anladığım kadarıyla bir jump fonksiyonu yazmam gerekiyor. ST-link veya USB kullanmak bir şeyi değiştiriyor mu?
Böyle bir uygulamanın detaylı anlatıldığı bir link verebilecek varsa sevinirim.

mr.engineer

Yapmak istediğim şeyi de anlatayım. İki farklı uygulama(main fonksiyonu) çalıştırmak istiyorum. Bir buton yardımıyla birinden diğerine geçmeyi düşünüyorum. Bootloader üzerinden istediğim uygulamaya jump edebilmem gerekiyor. Benzer şeyler yapanlar olmuş ama ben anlayamadım. Nereden nasıl başlayabilirim, kafam karıştı.

MrDarK

#5
Linker file üzerinden her kodun ROM alanları ayır, sonrasında da atlama yapacağın zaman vector tablolarını kaydır ve jump yap.

Aşağıda atlama işlemi için örnek bir kod bulunuyor.

/**
 * @brief   Actually jumps to the user application.
 * @param   void
 * @return  void
 */
void flash_jump_to_app(void)
{
  /* Function pointer to the address of the user application. */
  fnc_ptr jump_to_app;
  jump_to_app = (fnc_ptr)(*(volatile uint32_t*) (FLASH_APP_START_ADDRESS+4u));
  HAL_DeInit();
  /* Change the main stack pointer. */
  __set_MSP(*(volatile uint32_t*)FLASH_APP_START_ADDRESS);
  jump_to_app();
}

Birde bu konu stm32 bootloader bölümüne kod yazmakla alakalı değil, yeni bir başlık açmanı tavsiye ederim.
Picproje Eğitim Gönüllüleri ~ MrDarK

mr.engineer

Alıntı yapılan: MrDarK - 23 Ocak 2020, 14:54:23Linker file üzerinden her kodun ROM alanları ayır, sonrasında da atlama yapacağın zaman vector tablolarını kaydır ve jump yap.

Aşağıda atlama işlemi için örnek bir kod bulunuyor.

/**
 * @brief   Actually jumps to the user application.
 * @param   void
 * @return  void
 */
void flash_jump_to_app(void)
{
  /* Function pointer to the address of the user application. */
  fnc_ptr jump_to_app;
  jump_to_app = (fnc_ptr)(*(volatile uint32_t*) (FLASH_APP_START_ADDRESS+4u));
  HAL_DeInit();
  /* Change the main stack pointer. */
  __set_MSP(*(volatile uint32_t*)FLASH_APP_START_ADDRESS);
  jump_to_app();
}


Ben bu konuya biraz yabancıyım. Bu vektör tablolarını kaydırmayla ilgili şeyler okudum falan ama bu kodlar nereye yazılacak ayarlar (register, peripheral vb.) nasıl yapılacak nereden başlayacam anlayamadım. İlk dediğiniz linker fileları ayırmayı ROM 'dan yer ayırmayı bilmiyorum. ROM'dan ikinci bir main fonksiyonu için yer ayırmamı söylüyorsunuz anladığım kadarıyla. Bunların anlatıldığı bir yer var mı? Kaynak verebilirseniz çok sevinirim. Reference manuele (stm32) ve birkaç datasheete baktım fakat beceremedim henüz. Teşekkürler

Alıntı yapılan: MrDarK - 23 Ocak 2020, 14:54:23Birde bu konu stm32 bootloader bölümüne kod yazmakla alakalı değil, yeni bir başlık açmanı tavsiye ederim.

Teşekkürler. Konu burayla alakalı olabilir gibi geldi o yüzden yeni konu açmadım.

MrDarK

Yeni bir başlık açarsan oradan devam edelim. Yardımcı olayım sana.
Picproje Eğitim Gönüllüleri ~ MrDarK