STM32 hex to binary

Başlatan mr.engineer, 15 Şubat 2020, 13:58:00

mr.engineer

Merhaba,

USB üzerinden bir .bin uzantılı dosyayı MCU'ya yollamaya çalışıyorum. Hex uzantılı dosyayı srec.exe isimli bir uygulama ile .bin uzantılı dosyaya çevirdim fakat hex dosyası 12 KB iken .bin dosyası 128 MB görünüyor. Bu durum pek normal gelmedi bir yerde hata mı yaptım acaba?

Bir diğer sorum da .bin dosyasını yollamak için realterm serial capture isimli bir program kullanıyorum. Bu program ile .bin uzantılı dosyayı göndermek istedim fakat bu yöntem doğru mu emin değilim. Yollama işlemi çok hızlı yapılıyor mcu da bu dataları yakalayıp kaydedebilir miyim?

z

#1
Islemcinin kapasitesi ne kadar?

Hex formatta sadece programin hangi bolgesinde kod varsa buna ait baslangic adresi ve icerdigi veriler oldugundan boyu kisa olur.
Arada farkili bolgelere ziplanip bos bolgeler birakilsa da bos bolgelere ait veriler hex kodda yer almaz.

Fakat binary dosya bosluk falan dinlemez bos alanlar genellikle 0xff ile doldurulur.

Ornegin vector tablosu 0x0000 dan basliyor ve 0x100 de bitiyor, program 0x2000 de basliyor 0x2100 de bitiyorsa

hex formattaki veriler 0x0000 - 0x100 ve 0x2000 - 0x2100 araligini kapsar.

Eger bunu binary yaparsan 0x0000-2100 araligini kapsar. Hatta tum rom boyunu kapsayabilir.

Aslinda bununla ilgili bir ayar da olabilir.

Daha once onermistim. Konverter programi sen yaz. Cok basit bir sey.

Binary verileri hex dosyadan kendin uretecegin icin nereye ne yuklenecek sorularina kendi daha kolay cozumler uretebilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mr.engineer

Alıntı yapılan: z - 15 Şubat 2020, 14:10:03Islemcinin kapasitesi ne kadar?


32 bit bir işlemci 128 KB Main Flash memory var. Memory map'e göre tüm code region(rom) 512 MB. Dediğiniz gibi gereksiz yer kaplıyor galiba.

Converter programını nasıl yazabilirim. MCU'ya gelen hex dosyasını bin e çevireceğim yani? Bu işlem mcu'da yapılacak. Fakat bu kısımla ilgili araştırarak hiçbir şey bulamıyorum.

Mesela converter programını nasıl yazacağım .hex dosyasında sadece hex sayılar var galiba. Bunları sadece binary sayılara mı çevireceğim? Adresleri ve dataları nasıl ayırt edeceğim? Bu çevirdiklerimi word veya double word şeklinde flash memory'e yazmam lazım.

z

Hex dosya text bir dosyadir. Gerci bir kac cesit hex var ama..

Her bir satirda

Datalarin yerlesecegi adres, kac byte, datalar, check sum gibi verilerden olusyor.

https://en.wikipedia.org/wiki/Intel_HEX
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

volkanunal

Bunu direkt olarak IDE aracılığı ile yapabilmektesiniz.

http://www.keil.com/support/docs/274.htm

mr.engineer

#5
Alıntı yapılan: z - 15 Şubat 2020, 16:49:18Hex dosya text bir dosyadir. Gerci bir kac cesit hex var ama..

Her bir satirda

Datalarin yerlesecegi adres, kac byte, datalar, check sum gibi verilerden olusyor.

https://en.wikipedia.org/wiki/Intel_HEX


Evet, şimdi anladım. Yapmam gereken her satırdaki 16 byte datayı memory'e yazmak bunu da yaparken satırlar string olduğu için bunları sayıya (char to int conversion) çevirmek gerekecek. Sonra da her byte'ı bir memory bölümüne kaydediyoruz. Doğru anlamış mıyım?

Fakat şu anda bir sorunum daha var. Bu dosyayı USB ile nasıl MCU ya aktaracağım. (St link kullanmıyorum). Pc den realterm programı ile dosyayı kendi bootloaderıma yollamaya çalışıyorum. Bu realterm programı hex dosyalarını da görmüyor. Bu kısmı da programsız çözme şansım var mı?

mr.engineer

Program .hex dosyasını tanımadığından bu dosyanın içeriğini, ayrı bir txt dosyası açıp oraya kaydettim. Şu anda realterm prrogramı ile dosyayı MCU'ya USB ile gönderebiliyorum. Gönderilen dosyayının doğru iletildiğinden emin olmak için dosyayı MCU'dan tekrar terminale yolluyorum; fakat bazı satırlarda hata oluşuyor. Bazı satırlar eksik geliyor. Bunun sebebi ne olabilir?

baran123

Dosyayı satır satır yolladıktan sonra CRC kontrolü yap.
Zaten HEX dosyası içerisinde CRC var.
HEX->BIN dönüşümü zor bir şey değil.
Bir kaç sene önce Pythonda bu işi yapan basit bir program yapmıştım.
Bulursam paylaşayım.

mr.engineer

Alıntı yapılan: baran123 - 16 Şubat 2020, 14:21:33Zaten HEX dosyası içerisinde CRC var.
HEX->BIN dönüşümü zor bir şey değil.
Bir kaç sene önce Pythonda bu işi yapan basit bir program yapmıştım.
Bulursam paylaşayım.

HEX->BIN dönüşümünü anladım. Benim sorunu dosyayı yollarken datanın bir kısmında hata olması. Dosyayı yollamak için kullandığım programda delay ekleme seçeneği var, delay ekleyince hatasız yolladım.

Alıntı yapılan: baran123 - 16 Şubat 2020, 14:21:33Dosyayı satır satır yolladıktan sonra CRC kontrolü yap.

Satır satır yollama işini nasıl yapacağım. Kodda newline gördükten sonra satırı kaydetsem olur mu? Fakat çok satır var bu da çok fazla yer kaplayacak. Bu bana yanlış bir yöntem gibi geliyor.