STM32 MCU Önyükleyicisi Uygulamaya Geçiş

İçindekiler

STM32 MCU Bootloader Jump to Application

Günümüzde giderek daha fazla gömülü cihaz, indirme programlarına gerek kalmadan uzaktan otomatik güncellemeleri desteklemekte ve bu da cihaz bakımını son derece kolay hale getirmektedir. Bir cihazda uzaktan güncellemeleri etkinleştirmek için, güncelleme sürecini destekleyen bir program kodu yazmamız gerekir. Bu programa genellikle BootLoader adı verilir.

Esasen, cihazın program kodu iki bölüme ayrılır: BootLoader ve APP. BootLoader, APP'yi güncellemekten ve çalıştırılmasını başlatmaktan sorumludur. APP ise cihazın operasyonel işlevlerini uygulamaktan sorumludur ve esasen cihazın temel işlevselliğini barındırır.

Cortex-M serisi mikrodenetleyicilerde, BootLoader'dan APP'ye güvenli bir geçiş sağlamak için belirli yapılandırmalar gerekir. Bu makale, STM32 mikrodenetleyicileri örnek alarak, BootLoader'dan APP'ye başarılı bir geçişi gerçekleştirmek için gerekli olan temel yapılandırma adımlarını özetlemektedir.

Önyükleyici Uygulamaya Geç

1. Adım: Flash Bölümü

Programlama ve tasarım aşamasında, Flash belleği belirli uygulama gereksinimlerine göre bölümlere ayırmak önemlidir. Bu, BootLoader ve APP'nin nereye depolanacağının yanı sıra her birine ayrılacak alanın belirlenmesini de içerir. Bu depolama yerleşimi, programın yürütülmesini ve geçişlerini doğrudan etkiler.

En basit yükseltme stratejilerinden biri, bir BootLoader ve bir APP'ye sahip olmaktır. BootLoader, geçişleri yönetir ve APP yükseltmelerini kolaylaştırır. Bu makale, açıklama amacıyla bu yükseltme stratejisini örnek olarak kullanmaktadır.

STM32 mikrodenetleyiciler için, program başlatma için eşlenen adres 0x8000000'dır.

BootLoader, 0x8000000 adresinde depolanabilir ve ayrılan alan, çipin belirli Flash boyutuna göre ayarlanabilir; örneğin, 0x10000 veya 64KB.

APP'nin depolama adresi, BootLoader'ın arkasına, özellikle 0x8010000 adresine yerleştirilir. Flash'taki kalan alan APP'ye ayrılabilir.

2. Adım: BootLoader Proje Yapılandırması

BootLoader projesinin yapılandırılması birkaç adımdan oluşur. MDK'yı örnek olarak alırsak, BootLoader programı 0x8000000 adresinde 0x10000 boyutunda FLASH bellekte depolanır.

BootLoader Flash Configuration of STM32 MCU
BootLoader Flash Configuration of STM32 MCU

Program kodu kullanarak APP'ye geçiş yaparken aşağıdaki hususları göz önünde bulundurun:

  • Yığın üst adresinin geçerliliğini, yani APP'nin başlangıç adresinin geçerli olup olmadığını doğrulayın.
				
					if(((*(__IO uint32_t *)APP_FLASH_ADDR) & 0x2FFE0000) == 0x20000000)

				
			
  • Geçiş sırasında istisnalara yol açabilecek aksaklıkları önlemek için tüm kesmeleri devre dışı bırakın.
  • İkinci kelime olarak depolanan APP programının başlangıç adresini alın (başlangıç adresi + 4, veriler Flash'ta depolanır).
  • Yığın işaretçisini başlatın (kullanıcı kodu alanındaki ilk kelime yığın üst adresini içerir).
  • APP'nin başlangıç adresini bir işlev işaretçisi türüne dönüştürün ve geçişi gerçekleştirin.

Geçiş için kullanılan kod şu şekildedir:

				
					/* Define type */
typedef void (*pFunction)(void);

/* APP flash address */
#define APP_FLASH_ADDR             (0x8010000)

void jump_to_app(void)
{
  uint32_t JumpAddress;
  pFunction Jump_To_Application;

  /* Check if the stack top address is valid */
  if(((*(__IO uint32_t *)APP_FLASH_ADDR) & 0x2FFE0000) == 0x20000000)
  {
    /* Disable all interrupts to prevent disturbances during transition */
    __disable_irq();

    /* The second word in the user code area is the program's start address (reset address) */
    JumpAddress = *(__IO uint32_t *) (APP_FLASH_ADDR + 4);

    /* Initialize the user application's Stack Pointer */
    __set_MSP(*(__IO uint32_t *) APP_FLASH_ADDR);

    /* Type conversion */
    Jump_To_Application = (pFunction) JumpAddress;

    /* Transition to the APP */
    Jump_To_Application();
  }
}

				
			

3. Adım: APP Proje Yapılandırması

Benzer şekilde, APP projesi de belirli yapılandırmalar gerektirir. MDK'yı örnek olarak alırsak, APP programı 0x8010000 adresinde, 0x30000 boyutunda FLASH bellekte depolanır.

APP Flash Configuration of STM32 MCU
APP Flash Configuration of STM32 MCU

APP programının yapılandırılması aşağıdaki adımları içerir:

  • SCB->VTOR'u değiştirerek APP'deki dahili Flash vektör tablosunun konumunu değiştirin.
  • APP çalışmaya başladıktan sonra, programın sorunsuz bir şekilde yürütülmesini sağlamak için başlatma işlevinde kesmeleri etkinleştirmek çok önemlidir. Aksi takdirde programda anormallikler meydana gelebilir.

Normalde, başlangıç dosyasında SystemInit() işlevi çağrılır. Bu işlev, Flash'ın arayüz bilgilerini yapılandırır.

				
					SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET
				
			
APP Program Code of STM32 MCU
APP Program Code of STM32 MCU

VECT_TAB_OFFSET makro tanımının değerini 0x10000 olarak değiştirin.

Define VECT_TAB_OFFSET of STM32 MCU
Define VECT_TAB_OFFSET of STM32 MCU

APP programı başladıktan sonra, genel kesmeleri etkinleştirmek çok önemlidir. Aşağıdaki kodu başlatma bölümüne ekleyebilirsiniz:

				
					/* Enable interrupts */
__enable_irq();

				
			

Uygulama: BootLoader'a Git

Cihaz çalışırken, uygulama (APP) açık durumdadır ve işlevlerini yerine getirmektedir. Uygulamayı güncellemek istiyorsanız, uygulamadan BootLoader moduna geçmeniz gerekir. Peki, uygulamanın BootLoader moduna geçişi nasıl gerçekleştirilir? Bunun için iki yöntem vardır:

  1. Donanım modu, cihazın kapatılıp yeniden başlatılması veya sıfırlama düğmesi
  2. Yazılım modu, yazılım kontrolü yoluyla MCU'yu sıfırlama

Yazılım modunda, kontrol komutları APP koduna eklenebilir ve APP atlama komutunu (veya yükseltme komutunu) aldığında MCU sıfırlanır. Aşağıdaki kod MCU'yu sıfırlayabilir:

				
					/* reset chip */
HAL_NVIC_SystemReset();
				
			

Abone ol

Aylık blog güncellemeleri, teknoloji haberleri ve vaka analizleri almak için abone listemize katılın. Asla spam göndermeyeceğiz ve istediğiniz zaman aboneliğinizi iptal edebilirsiniz.

Yazar Hakkında

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Yardıma mı ihtiyacınız var?

Scroll to Top

Instant Quote