STM32 için HEX Dosyası okuma ve Flash'a yazma

Başlatan baran123, 02 Eylül 2017, 22:52:46

baran123

Geçenler bir takım stm32 flash sorularını şu konuda konuşmuştuk;
https://www.picproje.org/index.php/topic,70589.0.html

bin uzantılı bir soyadan sırayla 4 byte veri okuyup flash'a yazılabiliyor.
peki derlenmiş bir projeden çıkan ham hex dosyasını nasıl okuyup flash'a yazabiliriz. (Yeni program olarak kastediyorum)
Proje derlenince bu hex dosyası nasıl bir yapıda olur ?
Örneğin bir hex dosyasını açtığımızda şu şekilde ibareler görürüz
:020000040800F2
:10000000A8040020C1010008C9010008CB010008B4
:10001000CD010008CF010008D10100080000000058
:10002000000000000000000000000000D3010008F4

Bu kodların anlamlarını çözemedim. Direk olarak ':' sonra 32 bit değer okuyup flash'a yazmaya başlayabilir miyiz ? CRC gibi vs bir takım kontroller olması gerekiyor.

Kısaca : Bu hex formatını nasıl çözümleyebilirim ?

HexfeT


baran123

#2
@HexfeT çok teşekkürler bayağı işime yaradı.
Şu kaynakta çok iyi ;
http://www.keil.com/support/docs/1584/
Ve şu :)
https://en.wikipedia.org/wiki/Intel_HEX


Son olarak anlamadığım bir kısım Record Type in 0x05 olduğu bölüm.
Data ve EOF'ı anladım.
CheckSum hesabını da yapabiliyorum peki bu "Start Linear Address" satırı neyi ifade ediyor ?
Örneğin
:04000005080001AD41 // programlama esnasında bu satır nasıl değerlendirilmeli ?
Start Code  = ':'
Byte Count = 0x04
Address = 0x0000
Record Type = 0x05
Data = 080001AD
CheckSum = 0x41

Ekleme : 80386 ve daha yüksek CPU'nun EIP Register'ına yükleniyormuş
Acaba bunu en son olarak mı yükleyeceğiz ?

baran123

"The Start Linear Address specifies the address of the __main (pre-main) function but not the address of the startup code which usually calls __main after calling SystemInit(). An odd linear start address specifies that __main is compiled for the Thumb instruction set."

Konu çözülmüştür.

qeek

Hocam bir katkıda benden olsun gerçi konuyu çözmüşsünüz. Hexleri intel sistemine göre ayırınca oluyor birde seri port gibi bir şeyden basıcaksanız 0x00 gibi değerler sıkıntı oluyor ben şu şekilde çözmüştüm
0x00 => '0' ve '0' şeklinde ayırıp ascii tablosundaki değere göre gönderip flasha 32 bit şeklinde yazdırmıştım bi sıkıntı olmadı ama buda biraz yavaş oluyor :)

baran123

Hocam ben sd karttan okuduğum için problem olmuyor. PC den yapacagim zaman denerim:)
Tesekkurler.