원문주소 : http://blog.naver.com/unijun/37834300


1. Hexa파일과 BIN파일의 비교

1) 일반적으로 Hexa파일이 BIN파일보다 용량이 크다.

  - Hexa파일은 ASCII로 되어 있으며 BIN파일은 Binary로 되어 있다.

  - Hexa파일은 Address영역이 있으며 Bin파일은 Address영역이 없다.

  - 하지만 경우에 따라선 BIN파일 용량이 더 커질 수 있다. 특히 시작번지가 0번지에서

    멀어질수록 BIN파일이 더 불리하다.

 

2) Hexa파일은 시작Address를 자유롭게 바꿀수 있으나 BIN파일은 그러지 못한다.

  - BIN파일은 0번지부터 시작Adress까지 '00'이나 'FF'로 채워두어야 한다.

  - 중간에 빈 영역이 있을경우에도 BIN파일은 그 영역을 '00'이나 'FF'로 채워두어야

    한다.

 

3) Hexa파일은 자체적으로 Check Sum을 가지고 있어서 통신오류에 대응할 수 있다.

  - BIN파일은 프로그램에서 통신오류에 대응할 수 있도록 제작해 주어야 한다.

 

4) Hexa파일은 다운로드 프로그램을 대부분 공용으로 쓸 수 있다.

  - BIN파일은 0번지부터 시작Adress까지를 없애려면 강제로 시작 Address를 지정해야

    한다.

 

2. Hexa파일의 기본적인 구조



 

1) 시작표시 : ':'로 나타내며 레코드의 시작을 나타낸다.

2) 데이터길이 : 데이터항목의 크기 n을 나타낸다.

3) 주소옵셋 : 시작주소로부터 얼마나 떨어진 부분부터 쓸 것인지를 나타낸다.

4) 데이터타입

  - 00 : Data Record (16/20/32bit Address형식에 모두 사용)

  - 01 : End of File Record (16/20/32bit Address형식에 모두 사용)

  - 02 : Extended Segmented Address Record (20bit Address형식에 사용)

  - 03 : Start Segment Address Record (20bit Address형식에 사용)

  - 02 : Extended Linear Address Record (32bit Address형식에 사용)

  - 03 : Start Linear Address Record (32bit Address형식에 사용)

5) 테이터

  -  데이터타입이 00일때 : 기록할 데이터

  -  데이터타입이 01일때 : 무의미

  -  데이터타입이 02 또는 04일때 : 시작 Address

  -  데이터타입이 03 또는 05일때 : 실행 Address

6) 체크섬 : 모든 레코드 영역을 모두 더한 후에 2의 보수를 취한값

    byte i, 체크섬 = 0 ;
    for ( i = 0 ; i < 레코드길이 ; i ++ ) 체크섬 += 레코드[i] ;
    체크섬 = ~체크섬 + 1 ;

 

3. Hexa파일의 예 (20bit Address형식)

:020000023000CC
:10000000B8FF9F8EC026813E0A004F4D7402EB0957
:1000100026813E08006F527405EA4900A7FFC70613
:10002000BA00FE9FC706B8000000C7060C80FF1983
:10003000C7060C800000C70608800000C7066C8059
:040000032FFE0000CC
:00000001FF

 

각 문장을 해석해 보자.

 

1) : 02 0000 02 3000 CC

  - 02 : 데이터항목이 2바이트이므로 02이다.

  - 0000 : 이 문장은 시작 Address를 설정하는 문장이므로 옵셋이 필요없다.

  - 02 : 데이터가 20비트 형식의 시작주소를 나타낸다는 의미이다.

  - 3000 : 데이터인데 여기서는 데이타타입이 02이므로 시작주소이다.

    단 20비트형식이므로 실제 주소는 4비트 쉬프트되어 0x030000이 된다.

  - CC : 체크섬이다. 02+00+00+02+30+00 = 34, 34의 2의 보수는 CC이다.

 

2) : 10 0000 00 B8FF9F8EC026813E0A004F4D7402EB09 57

  - 10 : 데이터항목이 16바이트이므로 10이다.

  - 0000 : 실제주소는 시작주소+주소옵셋=0x030000+0x0000=0x030000이다.
  - 00 : 데이터가 저장될 코드라는 것을 나타낸다는 의미이다.

  - 뒤의 16바이트 : 실제로 저장될 코드이다.

  - 57 : 체크섬이다.

 

3) 세번째 줄부터 다섯번째 줄까지는 2)번항목과 동일하며 주소만 16씩 증가한다.

 

4) : 04 0000 03 2FFE0000 CC

  - 04 : 데이터항목이 4바이트이다.

  - 0000 : 이문장은 실행 Address를 설정하는 문장이므로 옵셋이 필요없다.

  - 03 : 데이터가 20비트 형식의 실행주소를 나타낸다는 의미이다.

  - 2FFE0000 : 실행주소이며 20비트형식이므로 실제 주소는 4비트 쉬프트되어 0x02FFE0

    이다. 뒤의 0000은 IP(Interupt Priority) 레지스터의 값이다.

  - CC : 체크섬이다.

 

5) : 00 0000 01 FF
  - 00 : 데이터항목이 없다.

  - 0000 : 이문장은 종료를 나타내는 문장이므로 옵셋이 필요없다.

  - 01 : 이 문장이 종료를 나타낸다는 의미이다.

  - FF : 체크섬이다.

'Engineering > C Language' 카테고리의 다른 글

[C언어] 구조체사용하기  (0) 2014.01.16
[C언어] 포인터 사용하기-2  (0) 2014.01.15
[C언어] 포인터 사용하기-1  (0) 2013.11.30
[C언어] 기본적인 개념들  (0) 2013.11.28
[C언어] 평균값필터, moving average  (2) 2012.11.01

+ Recent posts