자동차 임베디드 스터디/SW

펌웨어 기본 개념 공부

kkingjae 2024. 7. 6. 13:28

펌웨어 (Firemware)

복잡한 하드웨어를 간단하게 할 목적의 하드웨어와 소프트웨어의 중간

 

▶︎ 펌웨어 프로그래밍

void main (void)

{

  초기화( ):

  ,,,
  while() {  // 펌웨어 일정 부분 연속으로 도는 While 문 안에 있음

    ,,,  // 이 while 문 안에 수행해야 할 프로그램을 넣음

    ,,,

  }

}

부트로더

MCU 레벨의 펌웨어에서 사용되는 부트로더 기준 

부트코드가 필요 없는 MCU는 FLASH 메모리에서 바로 실행 가능 

부팅시 처음 실행되면서 아래 기능을 수행하는 펌웨어의 한 종류

- Boot 기능 : 펌웨어 실행하기 위한 최소한의 초기화, 부팅 디바이스 선택

- Loader 기능 : 펌웨어를 실행할 메모리에 Load, 펌웨어를 실행

- Update 기능 : 펌웨어를 다양한 방식으로 업데이트 진행 (통신, sd카드를 통해서)

 

펌웨어 저장 위치와 실행 위치가 다른 경우

- 펌웨어는 SD카드에 있고 실행은 SDRAM에서 하는 경우

- SPI 플래시 메모리에 여러개의 펌웨어를 넣고 모드에 따라서 다른 펌웨어를 실행하고자 하는 경우

 

부트로더 적용 시 메모리 구조

부트로더는 반드시 리셋시 처음 실행되는 위치에 있어야 함

 

펌웨어 실행

부트로더에서 펌웨어의 시작 주소로 Jump

(jump 전 펌웨어가 정상인지 확인 - CRC나 체크섬 등, 부트로더에서 사용한 장치들을 Disable)

강제로 부트로더를 실행할 수 있는 방법이 있어야 하는데, 대부분 보드에 특정 버튼을 누르면 강제 리셋

 

펌웨어 실행

펌웨어가 정상인지 판단하기 위한 Tag 정보가 같이 Flash에 Write 되어야 함

펌웨어 tag 정보는 다운로드 프로그램 생성해서 Flash에 Write 한다.

프로젝트를 빌드하면 펌웨어 binary가 나오고, 다운로드 프로그램을 통해 펌웨어 binary에서 tag를 계산해서 만든다.

중요한 것은, 이 tag 위치 정보를 부트로더가 어디에 있는 지 확인 가능해야 한다. 

 

펌웨어에서 부트로더 실행

펌웨어 동작 중 부트로더로 갈 때는 Soft Reset을 사용

(jump로 할 수도 있지만 soft reset 실행 시 대부분의 장치들을 초기화 한 상태로 재 시작 가능)

부트로더는 펌웨어에서의 호출인지 알 수 있어야 한다.