Arm Mimariye Sahip MCU'ları Flash Bellekten Programlamak

Başlatan fthsev, 01 Ekim 2015, 16:32:07

fthsev

Arkadaşlar merhaba,

Cortex M3 bir işlemciyi bilgisayar olmadan flash bellek üzerinden programlayabilir miyiz? Yani benim yapmak  istediğim flash bellek içerisinde hex dosyam olsun ve bootloader burdan hex dosyasını program hafızasına kopyalasın. Bunun için yeni bootloader yazmak mı gerekir yoksa üreticilerin yayınladığı bootloader'lar var mı? Araştırdım ama hazır bir bootloader bulamadım.

Gökhan BEKEN

Başka bir stm'i kullanırım derseniz, flash belleği okuyan stm, diğer stm'i teorik olarak seriporttan programlayabilir.
Protokolü bilmek lazım ama...
Özel mesaj okumuyorum, lütfen göndermeyin.

fthsev

Alıntı yapılan: Gökhan BEKEN - 01 Ekim 2015, 16:41:11
Başka bir stm'i kullanırım derseniz, flash belleği okuyan stm, diğer stm'i teorik olarak seriporttan programlayabilir.
Protokolü bilmek lazım ama...

Stm eğitim kitlerinde olan mantık gibi heralde, bir ana işlemci birde sadece programlama için kullanılacak küçük bir işlemci. Ama önceliğim
ana işlemci üzerinden bunu yapmak.

Gökhan BEKEN

#3
Aradaki fark, sizin dediğinizde SWD arayüzü kullanılıyor, benim dediğimde seriport kullanılıyor. Sizin dediğiniz bilgisayara bağlanıyor, benim dediğimde bilgisayar şart değil.
Özel mesaj okumuyorum, lütfen göndermeyin.

CoşkuN

Flash'ı yeterli büyüklükte bir modelle önce SD-karttan flash'a yeni yazılımın kopyalanıp sonra bootloader ile açılışta bu yazılımın önceki yerine kopyalanıp çalıştırılması sağlanabilir belki.

MrDarK

Bootloader ile bu işi yapmak mümkün, kendine özgü bir bootloader yazacaksın. Standart komutlar dışında özel olarak usb okuyup usb'deki bir dosyayı arayacak örneğin. Sonrada o dosyadan okuduğun bilgileri ana programınla değiştirebilirsin. Tabi bu değişimlerde dosyanın doğruluğunu onaylamak oldukça önemli. Birde bu okuduğun yazılımı usb flash içinden başka bir hafızaya almanı tavsiye ederim. Örneğin harici bir 4mbit flash kullanılabilir.
Picproje Eğitim Gönüllüleri ~ MrDarK

kimlenbu

amaç müşteriye güncelleme göndermekse bir de kriptolama kullanman gerekecek. kopyalamaya değecek bir cihazsa affetmezler.

fthsev

Alıntı yapılan: MrDarK - 01 Ekim 2015, 17:21:52
Bootloader ile bu işi yapmak mümkün, kendine özgü bir bootloader yazacaksın. Standart komutlar dışında özel olarak usb okuyup usb'deki bir dosyayı arayacak örneğin. Sonrada o dosyadan okuduğun bilgileri ana programınla değiştirebilirsin. Tabi bu değişimlerde dosyanın doğruluğunu onaylamak oldukça önemli. Birde bu okuduğun yazılımı usb flash içinden başka bir hafızaya almanı tavsiye ederim. Örneğin harici bir 4mbit flash kullanılabilir.

Üreticilerin yayınladığı bootloaderlar anladığım kadarıyla PC tabanlı programlama için oluyor. Bu bootloaderlar üzerinde küçük değişiklikler ile istenilen yapılabilir mi yoksa
baştan yazmayı gerektirecek zor bir süreç mi? Daha önce bootloader ile uğraşmadığım için nasıl olacağını kestiremiyorum.

Usb bellekleri neden önermiyor sunuz?


mesaj birleştirme:: 01 Ekim 2015, 17:33:52

Alıntı yapılan: kimlenbu - 01 Ekim 2015, 17:24:21
amaç müşteriye güncelleme göndermekse bir de kriptolama kullanman gerekecek. kopyalamaya değecek bir cihazsa affetmezler.

Evet gerektiğinde firmware update için sahada bilgisayar ile uğraşmadan usb bellek yada sd karttan programlansın istiyorum.

MrDarK

Alıntı yapılan: fthsev - 01 Ekim 2015, 17:31:07
Üreticilerin yayınladığı bootloaderlar anladığım kadarıyla PC tabanlı programlama için oluyor. Bu bootloaderlar üzerinde küçük değişiklikler ile istenilen yapılabilir mi yoksa
baştan yazmayı gerektirecek zor bir süreç mi? Daha önce bootloader ile uğraşmadığım için nasıl olacağını kestiremiyorum.

Usb bellekleri neden önermiyor sunuz?

Zorluğu yazılımcıyla alakalı bir durum olmakla birlikte size verilen bootloader kodu ile bunu yapamazsınız. Dediğiniz gibi onlar kendine ait bir mantıkla yazılımı paketleyip saf bir şekilde göndermeyi tercih ediyorlar. Memory erişimleri memory write işlemlerini başarılı bir şekilde yapabiliyorsanız ve usb iletişiminde sıkıntı yaşamıyorsanız rahat yazarsınız. Usb bellek önermiyorum demedim, usb bellekten okunan bilgiyi direkt yüklemek yerine bir yere tamponlayıp doğruluğundan emin olman gerektiğini söylemiştim. Şöyle ki ana yazılımı bozarsan geri dönemezsin elinde bi yere tamponlanmış "çıkarılamayacak" bir update dosyan olmalı diye düşündüm :) Tabi uygulamının özelliğine göre bu göz ardı edilebilir.

Kimlenbu'nun dediği gibi de kriptolamanın önemli olduğunu düşünüyorum. AES tercih edilebilir.
Picproje Eğitim Gönüllüleri ~ MrDarK

desert

Usb bellek kullanarak yapman için usb host olarak kullanmanı destekleyen bir işlemci kullanman gerekli. Ayrıca onun kütüphanelerini bootloader içerisinde kullanman lazım o yüzden biraz lüks olabilir bilmiyorum belki kullandığın işlemci usb haberleşmeyi desteklemiyor olabilir, onun yerine sd kart ve SPI protokolü ile halledebilirsin bu kısmını. Bootloader yazmak zor değildir aslında ama uygulama programındaki ayarları biraz değiştirmen gerekir programın başlangıç adresi değişecek çünkü. Her açılışta bootloader programımı yükleyecek yoksa program bir sefer yüklenip sonra her açılışta uygulama programı mı çalışacak ve update gerektiğinde sadece boot kısmına girecek gibi şeyleri düşünmen lazım. İkinci secenek daha mantıklı tabi. Bir de arkadaşların söylediği gibi güvenlik önemli, hex dosyanı bir şifreleme algoritması ile şifreleyip yükleme sırasında bootloader da açıp öyle yüklemen gerekebilir eğer ki güvenlik istemiyorsan buna gerek yok tabi

Kolay gelsin

serdararikan

Usb host özelliğine ihtiyaciniz olacak.o kadar uğraşmak yerine sd karttan guncelleme daha kolay olur

fthsev

Evet orayı yanlış anlamışım dediğinizde haklısınız önce bir yere depolayıp emin olduktan sonra tamamen kopyalanabilir yada  değişen bölümler kopyalanabilir.
Kriptolama konusunu hiç düşünmemiştim bir de o çıktı :)

mesaj birleştirme:: 02 Ekim 2015, 08:02:11

Alıntı yapılan: serdararikan - 01 Ekim 2015, 17:55:12
Usb host özelliğine ihtiyaciniz olacak.o kadar uğraşmak yerine sd karttan guncelleme daha kolay olur

SD kart ikinci tercihti ama daha az zaman harcayarak olacaksa sd kartı da tercih edebilirim. Sonuç olarak benim bir bootloader yazıp sd kart veya usb bellekten binary dosyasını
program hafızasına kopyalamam lazım. Peki bu çok tercih edilmeyen bir programlama şeklimi ki üreticiler bu konuda destek sunmuyorlar?

mesaj birleştirme:: 01 Ekim 2015, 18:37:23

Alıntı yapılan: desert - 01 Ekim 2015, 17:54:29
Usb bellek kullanarak yapman için usb host olarak kullanmanı destekleyen bir işlemci kullanman gerekli. Ayrıca onun kütüphanelerini bootloader içerisinde kullanman lazım o yüzden biraz lüks olabilir bilmiyorum belki kullandığın işlemci usb haberleşmeyi desteklemiyor olabilir, onun yerine sd kart ve SPI protokolü ile halledebilirsin bu kısmını. Bootloader yazmak zor değildir aslında ama uygulama programındaki ayarları biraz değiştirmen gerekir programın başlangıç adresi değişecek çünkü. Her açılışta bootloader programımı yükleyecek yoksa program bir sefer yüklenip sonra her açılışta uygulama programı mı çalışacak ve update gerektiğinde sadece boot kısmına girecek gibi şeyleri düşünmen lazım. İkinci secenek daha mantıklı tabi. Bir de arkadaşların söylediği gibi güvenlik önemli, hex dosyanı bir şifreleme algoritması ile şifreleyip yükleme sırasında bootloader da açıp öyle yüklemen gerekebilir eğer ki güvenlik istemiyorsan buna gerek yok tabi

Kolay gelsin


Evet bahsettiğiniz gibi bootloader bir sefer programı yükleyecek ve sonrasında uygulama çalışacak, update gerektiğinde reset atılıp işlemcinin boot kısmına girmesi sağlanacak(buton vs) sonrada bootloader sd kart veya usb bellekten yeni programı yükleyecek. Son gelen mesajlar doğrultusunda sd kart daha mantıklı görünüyor.

Yalnız bir önceki mesajımda da yazdığım gibi bu şekilde bir programlama için üreticiler neden bootloader yayınlayarak destek sunmuyorlar? Tercih edilmeyen bir programlama yöntemi mi?

leblebitozu

@fthsev

ST'nin application note'u ve örnek uygulaması var, usb host desteği şart. Ben ürünlerimizden birinde kullanıyorum, çünkü fabrika ortamında tezgaha monte cihazlarda bilgisayarla falan uğraşıp güncelleme işi oldukça dertli.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00039672.pdf

fthsev

Alıntı yapılan: leblebitozu - 01 Ekim 2015, 18:43:29
@fthsev

ST'nin application note'u ve örnek uygulaması var, usb host desteği şart. Ben ürünlerimizden birinde kullanıyorum, çünkü fabrika ortamında tezgaha monte cihazlarda bilgisayarla falan uğraşıp güncelleme işi oldukça dertli.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00039672.pdf

Kullanılacak MCU nun usb host desteği mi olmalı?

kantirici

Alıntı yapılan: fthsev - 01 Ekim 2015, 18:57:57
Kullanılacak MCU nun usb host desteği mi olmalı?

Usb okuma işini başka bir çip yapmayacaksa MCU nun USB host desteği şart.