본문 바로가기

Embedded

[PIC] Bootloader

반응형

1. 개념

펌웨어는 일반적으로 한번 출시되면 수정하기가 매우매우 어렵다.

일반적인 앱이야 앱스토어에 올리면 사용자가 업데이트를 할 수 있지만, 전자제품은 사용자가 as를 하지 않는 이상 불가능하다.

하지만 추가적인 통신 인터페이스를 통해 업데이트를 할 수 있게 만드는 방법이 있는데, 그것이 부트로더다.

 

2. 이론

일반적으로 메모리영역을 살펴보자면 0x0000 이 reset vector 이며 이 리셋 벡터에 application 주소가 저장되어있다.

따라서 mcu가 작동되자마자 이 주소를 따라가서 application이 실행되는 원리이다.

하지만 부트로더를 삽입하게 되면 일정한 조건에 따라서 부트로더가 먼저 실행되며, 일정 조건에 따라 다시 application이 실행된다.

 

3. 방법

1.

결과적으로 PIC 8bit MCU에서는 MCC라는 plug-in을 통하여 비교적 간단하게 생성할 수 있게 해준다.

먼저 해당 칩셋을 standalone으로 프로젝트를 생성한 이후 MCC를 통해 필요한 LIB를 포함해준다. ex)Bootloader, UART 등.

이후 빌드를 해본 후 롬영역을 얼추 추산해본다. 만약 0x800정도를 사용한다면 다시 MCC의 부트로더 설정에서 해당 용량을 참고하여 다시 설정 해 준다.

그리고 프로젝트 설정에 들어가 링커쪽 메모리 영역을 0-0x8FF정도로 설정하여 준다.

부트로더는 이정도이며 주의할점은 configuration bit가 application의 configuration bit와 동일하여야 하기때문에 해당 시스템 설정에 유의하여 준다.

2.

application 프로젝트를 추가로 생성하여 자신이 원하는 확인코드를 넣어준다.

프로젝트 설정에 들어가서 loading쪽에 우리가 만들어놓은 부트로더 프로젝트를 add 하여주고

마찬가지로 링커쪽 additional에 들어가보면 메모리 offset이 있는데, 우리는 위에서 0x8FF까지 사용함으로 0x900으로 설정하여 준다.

3.

모든 설정이 완료되고 빌드하면 통합이된 hex파일이 튀어나온다.

이제부터는 pic tool과 uart를 통하여 윈도우에서 새로운 펌웨어를 밀어 넣을 수 있게 되었다.

주의할점은 새로운 어플리케이션은 주소가 무조건 0x900부터 시작되어야한다. pic tool 설정 또한 데이타시트를 보고 잘 설정 해 주자.

 

4.결론

단순히 uart로 넣는 방법이지만 프로토콜을 파악하고, 다른 인터페이스를 활용한다면 무선이나 또다른 mcu 등에서 밀어넣을 수 있는 기반이 될 것이다.

'Embedded' 카테고리의 다른 글

[STM32] Mac으로 STM32 Board Control  (0) 2022.08.27
[Security] ATECC508A, 608A, 608B EVK  (0) 2022.08.04
[Arduino] Second compile fail because policy  (0) 2022.08.04
[Security] ATECC608B 개요  (0) 2022.07.14
HAL(Hardware Abstraction Layer)  (0) 2022.05.24