펌웨어 (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 실행 시 대부분의 장치들을 초기화 한 상태로 재 시작 가능)
부트로더는 펌웨어에서의 호출인지 알 수 있어야 한다.
'자동차 임베디드 스터디 > SW' 카테고리의 다른 글
E2E Protocol 개념 (0) | 2025.01.30 |
---|---|
UDS on CAN (0) | 2025.01.19 |
[HMG Developer Conference] 모뎀기반 고성능 제어기 속 OTA 개발 (1) | 2024.06.15 |