카테고리 없음

STM32 L432KC 부트로더 개발하기(4)

jisungjay 2023. 8. 6. 17:26

PC의 부트로더 프로그램은 컴파일하여 생성된 빌드 산출물을 통신을 통해 전달해주는 역할을 합니다.

 

저는 이번 프로젝트에서 다음과 같이 프로토콜을 설정하였고 이를 구현해보았습니다.

 

통신 방식 : UART

빌드 산출물 format: 인텔 hex

 

위와 같은 프로토콜은 본인의 프로젝트에 맞게 바뀔 수 있습니다.

UART 대신 CAN 통신, 인텔 hex 대신 srec 방식 등이 있습니다.

 

IDE에서 hex 산출물을 확인하기위해 몇가지 설정을 해줍니다.

 

프로젝트를 오른쪽 클릭 후 properties에 들어가면 아래와 같은 설정창을 확인할 수 있습니다.

여기에서 intel Hex file에 체크해줍니다.

 

이후 새로 빌드하게되면  Debug 하위 폴더에 아래와 같이 .hex 파일이 생성됩니다.

 

 

hex 파일은 아래와 같은 형태의 데이터로 구성되어 있습니다.

중요한 부분을 살펴보겠습니다.

 

1) 레코드 04인 부분은 상위 16비트의 주소를 표현합니다.

아래 그림 첫째줄이(초록색박스)  0x0800****의 주소를 의미하고

둘째줄부터는  0x0800**** 주소의 하위 16비트 주소를 의미합니다.

따라서 둘째줄에서 가리키는 주소는 0x0800C800이 되겠습니다.

2) 체크섬은 데이터의 정합성을 체크하기 위한 필드입니다.

바로 계산을 통해 첫째줄의 체크섬 0xF2가 나오는지 확인해보겠습니다.

출처:https://developer.arm.com/documentation/ka003292/latest/

1- 체크섬 필드를 제외하고 모든 바이트를 더합니다.

0x02 + 0x00 + 0x00 + 0x04+ 0x08 +0x00 = 0x0E

2- 이 값에 대한 2의 보수를 취합니다. 0x0E의 경우

0x0E(00001110b) =>  0xF1(11110001b) 가 되며 여기에 1을 더하면 2의 보수가 됩니다.

3- 최종 결과 0xF2 가 체크섬과 동일한 것을 확인할 수 있습니다.

 

이 데이터를 순차적으로 MCU로 전송하고 MCU측에서는 체크섬을 통해 놓친 데이터가 없는지 확인할 수 있습니다.