SREC(파일 형식)

SREC (file format)
S-레코드
Motorola SREC Chart.png
Motorola SREC 형식의 빠른 참조 차트.(기록 예제 이미지에서 "바이트"라는 단어가 문자를 지정하는 데 대체적으로 사용된다는 점에 유의하십시오.)
파일 이름 확장명
.s19,.s28,.s37,.s,.s1,.s2,.s3,.sx,.srec,.exo,[1] .mot,.mxt
개발자모토로라

모토로라 S레코드는 1970년대 중반 모토로라가 만든 파일 포맷으로 이진수 정보를 ASCII 텍스트 형태로 16진수 값으로 전달한다.이 파일 형식은 SREC, S19, S28, S37로도 알려져 있다.그것은 일반적으로 마이크로컨트롤러, EPROM, EEPROM 및 기타 프로그래밍 가능한 논리 소자의 유형에서 플래시 메모리를 프로그래밍하는 데 사용된다.일반적인 애플리케이션에서 컴파일러나 어셈블러는 프로그램의 소스 코드(C 또는 어셈블리 언어 등)를 기계 코드로 변환하여 HEX 파일로 출력한다.그런 다음 프로그래머가 HEX 파일을 가져와 기계 코드를 비휘발성 메모리로 "굽기"하거나 로딩 및 실행을 위해 대상 시스템으로 전송한다.

개요

역사

S-레코드 형식은 1970년대 중반 모토로라 6800 프로세서를 위해 만들어졌다.그것과 다른 임베디드 프로세서를 위한 소프트웨어 개발 도구는 실행 가능한 코드와 데이터를 S-레코드 형식으로 만들 것이다.그런 다음 PROM 프로그래머는 S-record 형식을 읽고 데이터를 내장형 시스템에 사용되는 PROM 또는 EPROM에 "굽혀넣기"할 것이다.

기타 16진수 형식

비슷한 목적을 가진 다른 ASCII 인코딩도 있다.BPNF, BHLF, B10F는 초기 이진 형식이었지만 컴팩트하지도 않고 유연하지도 않다.16진수 형식은 문자당 1비트보다 4비트를 나타내기 때문에 더 콤팩트하다.S-record와 같은 다수는 PROM의 일부만 지정할 수 있도록 주소 정보를 포함하기 때문에 더 유연하다.Intel 프로세서에서 Intel HEX 포맷을 사용하는 경우가 많았다.TekHex는 디버깅을 위한 기호 표를 포함할 수 있는 또 다른 16진수 형식이다.

포맷

기록구조

S 유형 바이트 수 주소 데이터 체크섬

SREC 형식 파일은 일련의 ASCII 텍스트 레코드로 구성된다.이 기록은 왼쪽에서 오른쪽으로 다음과 같은 구조를 가지고 있다.

  1. 레코드 시작 - 각 레코드는 "기록 시작"을 나타내는 대문자 "S" 문자(ASCII 0x53)로 시작한다.[2]
  2. 레코드 유형 - 단일 숫자 "0"에서 "9"까지, 레코드 유형을 정의.
  3. 바이트 수 - 나머지 레코드(주소 + 데이터 + 체크섬)에서 이어지는 바이트 수(헥스 자릿수 쌍)를 나타내는 두 개의 16진수.이 필드는 16비트 주소 필드의 최소 3에 체크섬 바이트 1을 더한 값이며, 최대값은 255(0xFF)이다.
  4. 주소 - 레코드 유형에 따라 결정된 4/6/8 16진수.주소 바이트는 빅 엔디안 형식으로 배열되어 있다.
  5. 데이터 - 데이터의 n바이트에 대한 2n 16진수의 시퀀스.S1/S2/S3 레코드의 경우, 특정 주소에서 각 바이트를 시각적으로 디코딩하는 것이 16바이트가 더 쉽지만 80자 폭의 터미널 화면에 맞기 때문에 레코드당 최대 32바이트가 일반적이다.
  6. 체크섬 - 두 개의 16진수, 바이트 수, 주소 및 데이터 필드에 대해 두 개의 16진수 쌍으로 대표되는 값의 을 보완하는 가장 바이트인 두 개의 16진수.자세한 체크섬 예는 예제 섹션을 참조하십시오.

텍스트 줄 종단기

SREC 레코드는 하나 이상의 ASCII 줄 종료 문자로 구분되어 각 레코드가 텍스트 줄에 단독으로 표시되도록 한다.이는 시각적으로 레코드를 구분하여 가독성을 향상시키며, 또한 기계 파싱 효율성을 향상시키는 데 사용할 수 있는 레코드 사이의 패딩을 제공한다.

HEX 레코드를 생성하는 프로그램은 일반적으로 운영 체제의 규약에 부합하는 라인 종료 문자를 사용한다.예를 들어 Linux 프로그램에서는 단일 LF 문자(라인 피드, 0x0A를 ASCII 문자 값으로 사용)를 사용하여 라인을 종료하는 반면, 윈도우즈 프로그램에서는 CR 문자(캐리지 리턴, 0x0D를 ASCII 문자 값으로 사용)에 이어 LF 문자를 사용한다.

기록유형

다음 표에는 10개의 가능한 S-레코드가 설명되어 있다.S4는 예약되어 있고 현재 정의되어 있지 않다.S6는 원래 예약되어 있었으나 나중에 다시 정의되었다.

기록하다
밭을 갈다
기록하다
목적
주소
밭을 갈다
데이터
밭을 갈다
기록하다
설명
S0 헤더 16비트
"0000"
No 이 기록에는 일련의 16진수 쌍으로 대표되는 벤더별 ASCII 텍스트 설명이 포함되어 있다.이 레코드의 데이터를 null-terminated 문자열 형식으로 보는 것이 일반적이다.텍스트 데이터는 파일/모듈 이름, 버전/개정 번호, 날짜/시간, 제품 이름, 벤더 이름, PCB의 메모리 지정자, 저작권 고지, 로그인 등의 정보를 포함하는 모든 것이 될 수 있다.[3]흔히 볼 수 있다: 48 44 52는 ASCII H, D, R - "HDR"이다.[4]
S1 데이터 16비트
주소
Yes 이 레코드에는 16비트 주소 필드에서 시작하는 데이터가 포함되어 있다.[5][3]이 기록은 일반적으로 AVR, PIC, 8051, 68xx, 6502, 80xx, Z80과 같은 8비트 마이크로컨트롤러에 사용된다.이 레코드에 포함된 데이터의 바이트 수는 "바이트 수 필드"에서 3을 뺀 값(즉, "16비트 주소 필드"의 경우 2바이트, "체크섬 필드"의 경우 1바이트)이다.
S2 데이터 24비트
주소
Yes 이 레코드에는 24비트 주소에서 시작하는 데이터가 들어 있다.[5]이 레코드에 포함된 데이터의 바이트 수는 "바이트 수 필드" - 4(즉, "24비트 주소 필드"의 경우 3바이트, "체크섬 필드"의 경우 1바이트)이다.
S3 데이터 32비트
주소
Yes 이 레코드에는 32비트 주소에서 시작하는 데이터가 들어 있다.[5]이 기록은 일반적으로 ARM 및 680x0과 같은 32비트 마이크로컨트롤러에 사용된다.이 레코드에 포함된 데이터의 바이트 수는 "바이트 수 필드" - 5(즉, "32비트 주소 필드"의 경우 4바이트, "체크섬 필드"의 경우 1바이트)이다.
S4 예약됨 해당 없음 해당 없음 이 기록은 보존되어 있다.
S5 카운트 16비트
카운트
No 이 선택적 레코드에는 S1/S2/S3 레코드의 16비트 카운트가 포함되어 있다.[5]이 기록은 기록 카운트가 65,535 (0xFFF) 이하인 경우에 사용된다. 그렇지 않으면 S6 레코드가 사용될 것이다.
S6 카운트 24비트
카운트
No 이 레코드는 S1/S2/S3 레코드의 24비트 카운트를 포함한다.이 기록은 기록 카운트가 16,777,215 (0xFFFFF) 이하인 경우에 사용된다.65,536 (0x10000) 미만이면 S5 레코드가 사용될 것이다.참고: 이 새로운 기록은 가장 최근의 변화다(공식적이지 않을 수도 있다).[5]
S7 시작 주소
(종료)
32비트
주소
No 이 레코드에는 32비트 주소의 시작 실행 위치가 포함되어 있다.[5][6]이것은 일련의 S3 레코드 종료를 위해 사용된다.SREC 파일이 메모리 장치를 프로그래밍하는 데만 사용되며 실행 위치가 무시되면 0의 주소를 사용할 수 있다.
S8 시작 주소
(종료)
24비트
주소
No 이 레코드에는 24비트 주소의 시작 실행 위치가 포함되어 있다.[5][6]이것은 일련의 S2 레코드를 종료하는 데 사용된다.SREC 파일이 메모리 장치를 프로그래밍하는 데만 사용되며 실행 위치가 무시되면 0의 주소를 사용할 수 있다.
S9 시작 주소
(종료)
16비트
주소
No 이 레코드에는 16비트 주소의 시작 실행 위치가 포함되어 있다.[5][6]이것은 일련의 S1 레코드 종료를 위해 사용된다.[3]SREC 파일이 메모리 장치를 프로그래밍하는 데만 사용되며 실행 위치가 무시되면 0의 주소를 사용할 수 있다.

기록순번

일부 유닉스 문서에는 "파일 내의 S-레코드 순서는 중요하지 않으며 특별한 순서는 가정할 수 없다"[5]고 명시되어 있지만, 실제로는 대부분의 소프트웨어가 SREC 레코드를 주문하였다.일반적인 기록 순서는 S0 헤더 레코드로 시작하고, 하나 이상의 S1/S2/S3 데이터 레코드로 계속되며, 하나의 선택적 S5/S6 카운트 레코드가 있을 수 있으며, 하나의 적절한 S7/S8/S9 종료 레코드로 종료된다.

S19 스타일의 16비트 주소 레코드
  1. S0
  2. S1 (하나 이상의 레코드)
  3. S5(옵션 레코드)
  4. S9
S28 스타일 24비트 주소 레코드
  1. S0
  2. S2(하나 이상의 레코드)
  3. S5(옵션 레코드)
  4. S8
S37 유형 32비트 주소 레코드
  1. S0
  2. S3(하나 이상의 레코드)
  3. S5(옵션 레코드)
  4. S7

제한 사항

레코드 길이 - Unix 수동 페이지 문서에는 "S-record 파일은 특수하게 포맷된 ASCII 문자열을 시퀀스로 구성된다.S-레코드는 길이가 78바이트 이하가 될 것이다."수동 페이지는 데이터 필드의 문자 수를 64자(32 데이터 바이트)로 추가로 제한한다.[5]8헥스 문자 주소와 64개의 데이터 문자가 있는 레코드는 78자(2 + 2 + 8 + 64 + 2)자(이 카운트는 가능한 줄 끝 또는 문자열 종료 문자를 무시함)가 된다.그 파일은 80자 폭의 텔레프린터에 인쇄될 수 있었다.매뉴얼 페이지 하단의 메모에는 "이 [수동 페이지]는 총 기록 길이에 대한 78바이트 제한 또는 데이터 길이에 대한 64바이트 제한이 문서화된 유일한 장소"라고 적혀 있다.이 값들은 일반 사례에 대해 신뢰되어서는 안 된다"[5]고 말했다.이 제한을 무시하면 S 레코드의 최대 길이는 514자이므로 바이트 카운트가 0xFF(255자)라고 가정하면 주소/데이터/체크섬 필드의 경우 레코드 유형 필드 + 2(2 * 255)가 된다.라인 및 문자열 터미네이터에는 추가 버퍼 공간이 필요할 수 있다.긴 줄 길이를 사용하는 것은 문제가 있다: "모토로라 S-레코드 형식 정의는 최대 255바이트의 페이로드 또는 514자 라인에 라인 종료를 허용한다.모든 EPROM 프로그래머는 이 정도 크기의 레코드에 대처할 수 있도록 충분히 큰 라인 버퍼가 있어야 한다.하는 사람은 거의 없소."[7]

데이터 필드 - 일부 문서에서는 이 필드에서 최대 32바이트의 데이터(64자)를 권장한다.[5]S0/S1/S2/S3 레코드의 최소 데이터 양은 0이다.최대 데이터 양은 주소 필드의 크기에 따라 달라진다.바이트 수 필드는 255(0xFF)보다 클 수 없으므로, 데이터의 최대 바이트 수는 255 - (체크섬 필드의 경우 1바이트) - (주소 필드의 바이트 수)로 계산된다.S0/S1 레코드는 최대 252바이트의 데이터를 지원한다.S2 레코드는 최대 251바이트의 데이터를 지원한다.S3 레코드는 최대 250바이트의 데이터를 지원한다.

주석 - SREC 파일 형식은 주석을 지원하지 않는다.일부 소프트웨어는 "S"로 시작하지 않는 모든 텍스트 줄을 무시하고 체크섬 필드 이후의 모든 텍스트를 무시하며, 코멘트에 추가 텍스트가 사용되는 경우도 있다.예를 들어 CCS PIC 컴파일러는 Intel HEX 파일의 상단 또는 하단에 ";" 코멘트 라인을 배치할 수 있도록 지원하며, 설명서에는 "일부 프로그래머(특히 MPLAB)가 헥스 파일 상단의 코멘트를 좋아하지 않는다"고 명시되어 있어 컴파일러가 헥스 파일 하단에 코멘트를 배치할 수 있는 옵션이 있다.[8]

컬러 레전드

기록유형 바이트 수 주소 데이터 체크섬

체크섬 계산

다음 예시 기록:

S1137AF00A0A0D00000000000000000000000000000000000000000061 

체크섬 값이 계산되는 방법을 보여주기 위해 디코딩된다.다음 예제는 달러 기호($)를 사용하여 16진수 값(모토로라 협약)을 나타낸다.

  1. 추가: 각 바이트당 $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ...을 추가하십시오. + $00 = $019E.
  2. 마스크: 합계의 가장 유의한 바이트(01달러)를 버리고 최소 유의 바이트(LSB)를 9E 달러로 유지하십시오.
  3. 보완책: 61달러 LSB의 보완책을 계산하십시오.일반적으로 이는 모토로라 6800 마이크로프로세서에서 축전지 $FF독점 OR함으로써 이루어진다.

16비트 메모리 주소

S00F000068656C6C6F2020202000003C S11F00007C0802A69001000421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFE5398000007D836378800100143821007C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC 

참고 항목

참조

  1. ^ "AR#476 PROMGen - Description of PROM/EEPROM file formats: MCS, EXO, HEX, and others". Xilinx. 2010-03-08. Motorola EXORmacs - File Format Code 87. Archived from the original on 2020-03-03. Retrieved 2020-03-03.
  2. ^ Wiles, Mike; Felix, Andre (2000-10-21) [1975]. Holley, Michael (ed.). MCM6830L7 MIKBUG / MINIBUG ROM (PDF) (Engineering note). Motorola Semiconductor Products, Inc. Note 100. Archived from the original (PDF) on 2019-06-16. Retrieved 2019-06-16. (23쪽)
  3. ^ a b c Hennig-Roleff, Werner (1993-02-01) [1988]. "HEX.DOC: Motorola - HEX Format". SIM51. 1.04 (in German). Archived from the original on 2017-08-11. Retrieved 2021-12-08. (NB. 이것은 SIM51의 이전 버전이며, 소프트웨어와 문서는 1996년까지 유지되었다.)
  4. ^ Tareski, Val. "Motorola S-record description". www.amelek.gda.pl. Retrieved 2018-06-26.
  5. ^ a b c d e f g h i j k l "Motorola S-records from Unix man pages". Retrieved 2014-06-30.
  6. ^ a b c "Appendix C". M68000 Family Programmer's Reference Manual (PDF). Revision 1. Motorola (Freescale). 1992. pp. C-1–C-5. ISBN 978-0-13723289-5.
  7. ^ "srec_examples". sourceforge.net.
  8. ^ CCS Compiler Reference Manual PCB/PCM/PCH (PDF), Custom Computer Services, Inc., May 2014, p. 107, retrieved 2015-02-08

추가 읽기

외부 링크

  • SRECord는 SSREC 형식 파일을 조작하기 위한 도구 모음입니다.
  • BIN2MOT, BINION에서 Motorola S-Record 파일 변환기 유틸리티.
  • SRecordizer는 S19 형식 파일을 보고 편집하며 오류를 확인하는 도구다.
  • 빈코피는 SREC 포맷 파일을 조작하기 위한 파이썬 패키지다.
  • kk_srec는 SREC 형식을 읽기 위한 C 라이브러리 및 프로그램이다.