Uzaktan microcontroller kodu güncelleme

Başlatan kimlenbu, 25 Nisan 2014, 15:55:48

kimlenbu

Selamlar,

Henüz araştırma yapmadım, buradan bir ön bilgi alıp araştırmam gereken konular ve izlemem gereken yollar hakkında fikir sahibi olmak istedim.

Diyelim STM32F407 kullanarak bir cihaz yaptık, gsm üzerinden veri alışverişi yapabiliyor, sd kart, usb bellek desktekliyor. şehir dışına hatta ülke dışına sattık. Oldu bir hata tespit ettik, ek özellik koymamız gerekti vs vs.

Tek tek satılan cihazları ziyaret edemeyiz.
Hex kodunu veremeyiz, adamlar cihazın aynısını yaptırırlar.

Ben cihazın sitesinden bir update dosyası yayınlayacağım ve adam bunu sd karta vs atıp kendisi yükleyecek ya da cihaz gsm üzerinden veri alacak ve kendini programlayacak.

Özetle

1) Uzaktaki cihaza yeni yazılımı nasıl kodu çaldırmadan ulaştırırım ?
2) Bu kodu nasıl cihaza yüklerim ?

yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

SpeedyX

Bir çok kez yaptım, ciddi bir iş ama bir okadar da kolay aslında.

İlk adım olarak; senin seçeceğin bir hafıza bölgesinde (ROM/Flash, SPI Flash, EEPROM, SD card...) yazılı olan hex kodu ile işlemcini upgrade edebilmen gerekiyor. Bunun için bilindik bir bootloader ı modifiye edebilirsin.
İkinci adım ise "o" hafıza bölgesine hex kodunu uzaktan yazmak. Arada şifreleme yada kodlama kullanabilirsin, bu da kodu korur.

kimlenbu

Teşekkür ederim, STM32 bootloader dokümanına bakıyordum, gözüm korkmuştu :)

O zaman yöntem kriptola->cihaza gönder->kriptoyu çöz->bootloader ile çözülmüş kodu yaz.

MrDarK

Yazılımın CRC bilgisini de unutmayalım :) Sonra yazılımı güncelleyeceğim derken cihazı gümletmeye gerek yok :)
Picproje Eğitim Gönüllüleri ~ MrDarK

kimlenbu

Ben kesinlikle unuturdum crc kontrolünü :D

Mr.Java

Güzel konu.Peki bununla ilgili fikir alabileceğimiz bir link varmıdır?

kimlenbu

Ben bir kaç doküman buldum kısa araştırmam sonrası, fazla bakamadım şimdilik. Çözene kadar biraz zaman geçecek ama mekanizmayı anlayınca projelere kolayca dahil edilebilir gibi görünüyor.

STM32F4 Discovery'yi usb bellekten güncelleme :

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

STM32F4 Boot Modu :

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

program içinden nasıl halledileceğinin videosu :

Calling the STM32 SystemMemory Bootloader from your application

armsistem

Alıntı yapılan: SpeedyX - 25 Nisan 2014, 16:21:26
Bir çok kez yaptım, ciddi bir iş ama bir okadar da kolay aslında.

İlk adım olarak; senin seçeceğin bir hafıza bölgesinde (ROM/Flash, SPI Flash, EEPROM, SD card...) yazılı olan hex kodu ile işlemcini upgrade edebilmen gerekiyor. Bunun için bilindik bir bootloader ı modifiye edebilirsin.
İkinci adım ise "o" hafıza bölgesine hex kodunu uzaktan yazmak. Arada şifreleme yada kodlama kullanabilirsin, bu da kodu korur.

Merhaba , bende bir ara çok kasmıştım firmware update konusunda; çok kapsamlı olmasada yapmayı başardım. Tecrübelerinize dayanarak , işlemciyi açılışta eint0 ayağını gndye çektiğimizde factory bootloader düşüyor daha sonra flash magic tarzı programla program atabiliyoruz. Yapmak istediğim işlemci factory bootloader modunda iken başka bir platformdan başka mcu olur yazılım güncellemek istiyorum. Kısacası pc kullanmadan bir işlemciye program atmam mümkün müdür ?

SpeedyX

@armsistem, mümkündür. Onu da birçok kez yaptım. Diğer bir yöntem ise kendi bootloaderını yazarak, hex i kendi bildiğin protokolde göndermek.
içindeki bootloadera ait protokol genelde paylaşılır. Flash magic kodlarını direkt kullanarak da standalone programmer yapabilirsin, zamanında yapmıştık.
Web sitesindeki Resources sekmesini inceleyin.

z

Bu konuda benim de bir calismam var.

Ozgur yazilim felsefesinin tam tersi Tutsak yazilim felsefesi icin kendimce koydugum kurallar burada tartisilan konu ile siki sikiya baglantili.

https://www.picproje.org/index.php/topic,52838.msg400327/topicseen.html#msg400327
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

armsistem

Alıntı yapılan: z - 26 Nisan 2014, 14:40:48
Bu konuda benim de bir calismam var.

Ozgur yazilim felsefesinin tam tersi Tutsak yazilim felsefesi icin kendimce koydugum kurallar burada tartisilan konu ile siki sikiya baglantili.

https://www.picproje.org/index.php/topic,52838.msg400327/topicseen.html#msg400327

Hımmm gerçekten çok iyi çalışmalar aslında benim tam olarak merak ettiğim belkide hayatımın geri kalan kısmında hiç kullanmayacağım bir konu ,

1- lpc23xx eint butonuna gnd çektim ve kendini program moduna aldı.
2- Flash magic program atmak için işlemcinin uart0 kullanıyoruz ki hem rx-tx ikiside aktif ,fm değişiki bir işlemci seçtiğimizde program atılacak işlemcinin signature arıyor. lpc2368 atılacaksa işleciyi lpc2365 seçercek diyor bu doğru işlemci diye.
3- program atılacak işleci lpc2368 ve programın yazılacak yeri flashmemory ve bununla ilgili ayrıntıları biliyoruz diyelim.
? -Ben program atmak için pc ve flash magic kullanmak istemiyorum yapacağım başka bir devre lpc2368 ile bunu yapacağım yani flashmagic görevini lpc2368 başka bir işlemci yapacak , bunun teknik detayını merak ettim işlemci program modundayken uarttan nasıl bir veri bekliyor dataflashına şu adrese şu veriyi yaz şeklinde mi ?

z

#12
Kullandigin islemciyi bilmiyorum.

Cipe yazacagin Flash programlama kodlari sayesinde, rama bir sekilde yukleyecegin verileri flasha atabilirsin.

Flash rom parcalara ayrilmis durumda. Her bir parcayi bagimsiz olarak silip yeniden programlayabiliyorsun. Dolayisi ile senin yapmak gereken cekirdek bir kod yazmak. Bu cekirdek herhangi bir iletisim kanali uzerinden cipe atilacak kodlari byte byte okuyup ramda depolayacak.

Ardindan flash programlama rutinlerin bu verileri ramdan alip flasha atacak. En sonunda koruma altina alinacak sektorler varsa bunlar kilitlenecek.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Neden NXP nin IAP ve bootloader SWD dökümanlarını incelemiyorsun?
Burada dökümanın aynısını anlatmamız gerekiyor.
autobaud var, ilk c karakteri gönderiliyor işlemci Syncronized kelimesini gönderiyor. Sonra komutlar var, komutlara göre veri katarı değişiyor...

Çekirdek bir kod yazmaya gerek yok

kimlenbu

@armsistem,

eğer harici bir programlama birimi kullanacaksan güvenlik açığı oluşur. Programlamak için gerekli standartlar belli. Sen dediğin gibi lpc serisiyle esas cihazın çipini programlarsan ben bütün iletişimi loglarım, oradan bütün kodu çekerim.