본문 바로가기

카테고리 없음

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

부트로더를 설계하기 위해 메모리 구조를 설계하였습니다.

 

Boot:리프로그래밍 관련 담당 부

Metadata: boot와 app 간에 데이터를 공유하는 부

Application: 실제 기능을 담당하는 부

 

[memory map]

 

최초 공장 출하 상태의 MCU에 디버거를 이용해 BOOT 영역 메모리를 write 하게 됩니다.

이후 MCU가 부팅되면서 metadata 영역의 특정 값을 확인하여 application 유무를 확인합니다.

application이 아직 쓰이지 않은 경우 host의 명령을 받아 memory erase/write를 수행합니다.

application이 쓰여있는 경우, app reset handler로 jump하여 application 동작을 수행합니다.

application 상에서도 host의 명령을 받아 boot 모드에 진입할 수 있도록 명령을 대기할 수 있도록 합니다.

 

Trace32와 같은 장비를 사용하면 flash 전영역에 원하는 메모리를 쓸 수 있지만, 현재 사용중인 디버거로는 여러 이미지를 다운로드 할 수가 없어서 boot 영역만 우선 다운로드 하도록 하였습니다.

 

void boot_task()
{

	switch(step)
	{
		case DEFAULT_STEP:
			default_task();
			break;
		case ERASE_STEP:
			erase_task();
		case WRITE_STEP:
			write_task();
			break;
		case RESET_STEP:
			reset_task();
			break;
		default:
			break;
	}

}

 

default task에서는 meta 영역 확인후 jump할 것인지, boot 모드에 대기할 것인지 결정합니다.

erase, write step 에서는 말그대로 erase, write 동작을 수행합니다.

reset task에서는 meta 영역에 다음 power cycle 에서 app으로 jump 할 수 있도록 "BOOT DONE" 을 써놓고 reset 시킵니다.