STM32 Boot Kısmı için yardım

Başlatan argelojik, 01 Şubat 2021, 10:11:07

argelojik

Merhabalar Stm32 ailesinde var olan Bootloader nasıl bir yapıya sahip? Mevcut Boot pinlerine göre kendi belleğinde bir adrese dallanıyor ama burada var olan Boot code'a biz müdahele edebiliyor muyuz? Yoksa kendi belirlediği şekilde mi kodu yüklüyor?

MCU'lar daki Bootloader meselesini biraz izah edebilir misiniz? Boot dallanma kısmını tam algılayamadım.

Aslında sormak istediğim şu; ben Boot pinine 1 adet buton koydum diyelim. Butona basıldığında, main bölümünde bulunan kullanıcı şifresini Default şifreye "1-2-3-4" getirip tekrar main programdan başlamasını nasıl sağlarız? Acaba bu mümkün mü?

Tagli

İşlemci içinde fabrikada gömülmüş bootloader'a müdahale edemezsin. Ancak kullanıcı kodundan bu bootloader'a atlayabilirsin. Ben nasıl yapıldığını bilmiyorum ama internette denk gelmiştim, süreci anlatıyorlar.

Şifre ile ilgili sorduğun şeyi anlamadım ama bana sanki bootloader ile ilgisi yokmuş gibi geldi.
Gökçe Tağlıoğlu

MT

Genel mantığını bu dökümandan anlayabilirsiniz.

https://cmb-tech.com/stm32Info/bootloader/stm32Bootloader.pdf

interrupt vector table'ın düzenlemesini ve jump komutunun nasıl çalıştığını anlamalısınız.
 

volkanunal

#3
Merhabalar, st serilerinde sistem bootloaderları mevcut @Tagli hocamızın dediği gibi bu adrese kullanıcı kodundan atlayabilirsin. Örnek bir senaryo vermem gerekirse, sahada bulunan bir cihaza usb takıldığında dfu moda geçerek yazılım yüklemeni sağlayan sistem bootloaderine geçiş yapabilirsin. Bununla ilgili bir yazıyı şurada paylaşmıştım.

https://engineeringvolkan.wordpress.com/2020/05/08/1928/


Eğer bootloader tarafının nasıl çalıştığını merak ediyorsan şu yazıma bakabilirsin,

https://engineeringvolkan.wordpress.com/2020/01/31/iki-main-tek-islemci/

Eğer daha çok merak ediyorsan, sd kart üzerinden yeni bir programı stm32 flashına nasıl yazdırdığımız ile ilgili şurada da bir içerik yazmıştım.

https://engineeringvolkan.wordpress.com/2020/12/12/stm32-sd-kart-uzerinden-boot-etmek/


Bahsetmiş olduğunuz yapıyı da cihaz açıldığında 0x8..... adresten başladıktan sonra konumlandırdığınız bir yazılım ile (şifre yazılımı) butona basıldığında şifre girilip daha sonra diğer kodunuzun bulunduğu adrese atlatarak yapabilirsiniz.
Primum nil nocere

argelojik

Alıntı yapılan: volkanunal - 01 Şubat 2021, 17:32:28Merhabalar, st serilerinde sistem bootloaderları mevcut @Tagli hocamızın dediği gibi bu adrese kullanıcı kodundan atlayabilirsin. Örnek bir senaryo vermem gerekirse, sahada bulunan bir cihaza usb takıldığında dfu moda geçerek yazılım yüklemeni sağlayan sistem bootloaderine geçiş yapabilirsin. Bununla ilgili bir yazıyı şurada paylaşmıştım.

https://engineeringvolkan.wordpress.com/2020/05/08/1928/


Eğer bootloader tarafının nasıl çalıştığını merak ediyorsan şu yazıma bakabilirsin,

https://engineeringvolkan.wordpress.com/2020/01/31/iki-main-tek-islemci/

Eğer daha çok merak ediyorsan, sd kart üzerinden yeni bir programı stm32 flashına nasıl yazdırdığımız ile ilgili şurada da bir içerik yazmıştım.

https://engineeringvolkan.wordpress.com/2020/12/12/stm32-sd-kart-uzerinden-boot-etmek/


Bahsetmiş olduğunuz yapıyı da cihaz açıldığında 0x8..... adresten başladıktan sonra konumlandırdığınız bir yazılım ile (şifre yazılımı) butona basıldığında şifre girilip daha sonra diğer kodunuzun bulunduğu adrese atlatarak yapabilirsiniz.
Cevap için teşekkür ederim. Verdiğiniz tüm linkleri inceleyeceğim. Bir ürün geliştirdim. Ürünün fiyatının düşük olması için daha küçük bir MCU'ya geçmek istedim. Fakat pin sayım 1 tane eksik kalıyor. Bunu çözmek için buton olarak kullandığım pinden tasarruf etmek istedim. Normalde butona basıldığında yazılım interrupta giriyordu. Buton kullanıcının unutmuş olduğu şifreyi resetlemeye yarıyordu. Default şifre olan "1-2-3-4" olarak resetleyerek şifreyi kendi RAM hafızasına yazıyordu. Sonra yazılım baştan başlıyordu.                          Şimdi  Boot0 pinini butona bağlarsam dediğiniz gibi başka bir satırdan başlatıp şifreyi default şifre ("1-2-3-4") yapabilir miyim? Yani buton bırakıldıktan sonra şifre default olacak ve yazılım bir daha butona basılıncaya kadar normal şekilde çalışacak. Bu olabilir mi? Boot0 kodlarını nereye yazacağım? O satırdan nasıl başlatırım burası tam netleşmedi?

volkanunal

Linklerde detayları mevcut hocam, özellikle iki main tek işlemci sizin bahsettiğiniz uygulamanın mantığı.
Primum nil nocere

yldzelektronik

Alıntı yapılan: argelojik - 01 Şubat 2021, 18:21:31Cevap için teşekkür ederim. Verdiğiniz tüm linkleri inceleyeceğim. Bir ürün geliştirdim. Ürünün fiyatının düşük olması için daha küçük bir MCU'ya geçmek istedim. Fakat pin sayım 1 tane eksik kalıyor. Bunu çözmek için buton olarak kullandığım pinden tasarruf etmek istedim. Normalde butona basıldığında yazılım interrupta giriyordu. Buton kullanıcının unutmuş olduğu şifreyi resetlemeye yarıyordu. Default şifre olan "1-2-3-4" olarak resetleyerek şifreyi kendi RAM hafızasına yazıyordu. Sonra yazılım baştan başlıyordu.                          Şimdi  Boot0 pinini butona bağlarsam dediğiniz gibi başka bir satırdan başlatıp şifreyi default şifre ("1-2-3-4") yapabilir miyim? Yani buton bırakıldıktan sonra şifre default olacak ve yazılım bir daha butona basılıncaya kadar normal şekilde çalışacak. Bu olabilir mi? Boot0 kodlarını nereye yazacağım? O satırdan nasıl başlatırım burası tam netleşmedi?

Çözümü yanlış yerde arıyorsunuz. Yani o işin çözümü boot0 pini değil. O pine yapacağınız müdahale yalnızca power up sırasında etkili olur. Daha sonra herhangi bir etkisi olmaz. Ayrıca o pindeki değeri de okuyamazsınız (o pin üzerinden).
O pin power up sırasında lojik 1 olursa bellekte özel bir adrese gidip ilgili portlardan veri gelmesini bekler. Başka bir şey olmaz. Zaten ilgili adresteki kodu da değiştiremezsiniz.
Butona basıldığında sizin belirlediğiniz bir fonksiyonun çağırılmasını sağlamanız daha hoş olabilir.
Kullandığınız mcu ne kadar belleğe sahip bilmiyorum ama eğer uygun sector size ve yeterli sector var ise çok sorun olmadan yapabilirsiniz.
Ha bence sizin anlattığınız şekilde çalışmasına da gerek yok o ayrı...
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

argelojik

Alıntı yapılan: yldzelektronik - 04 Şubat 2021, 09:57:27Çözümü yanlış yerde arıyorsunuz. Yani o işin çözümü boot0 pini değil. O pine yapacağınız müdahale yalnızca power up sırasında etkili olur. Daha sonra herhangi bir etkisi olmaz. Ayrıca o pindeki değeri de okuyamazsınız (o pin üzerinden).
O pin power up sırasında lojik 1 olursa bellekte özel bir adrese gidip ilgili portlardan veri gelmesini bekler. Başka bir şey olmaz. Zaten ilgili adresteki kodu da değiştiremezsiniz.
Butona basıldığında sizin belirlediğiniz bir fonksiyonun çağırılmasını sağlamanız daha hoş olabilir.
Kullandığınız mcu ne kadar belleğe sahip bilmiyorum ama eğer uygun sector size ve yeterli sector var ise çok sorun olmadan yapabilirsiniz.
Ha bence sizin anlattığınız şekilde çalışmasına da gerek yok o ayrı...
Haklısınız aslında ama benim istediğim yalnızca şifreyi resetlemek olduğu için başlangıçta butona basılsa da olur.  Daha sonra buton okunmayacak. Zaten MCU değiştirmekten vazgeçtim. Kullandığım MCU STM32F030K6T6 (32 pin) idi. STM32F030F4 (20 pin) ile değiştirmek istedim. Flash hafızada 1 kilobyte eksik kaldı. Bu yüzden vazgeçtim. Ama BOOT işlemini anladım. Yardım eden herkese teşekkür ederim.