인프런 커뮤니티 질문&답변

김상현님의 프로필 이미지
김상현

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s204_STM32F42x 프로세서의 구조

BOOT 핀을 통해 부팅 모드 변경시 리맵핑이 따로 필요한가요?

해결된 질문

작성

·

461

1

강의 잘 보고 있습니다.

강의를 듣다가 질문이 생겨서 남깁니다.

강의를 보면 SRAM에서 부팅을 하고 싶을 때? SYSCFG_MEMRMP의 MEM_MODE[2:0] 비트로 제어를 한다고 설명하신거 같은데요. (이 경우 MEM_MODE = 2'b001이 되겠죠?)

BOOT[1:0] 핀을 하드웨어에서 2'b11로 만들으면 따로 SYSCFG_MEMRMP 레지스터 값 변경없이 자동으로 변경이 되는건가요??

추가적으로 System 메모리에 UART로 데이터를 플래시메모리에 다운로드할 수 있는 코드를 삽입하고 유저가 플래시메모리로 부팅할지 아니면 프로그램 다운로드를 할지 선택하는 것을 주로 봐와서 System 메모리로 부팅한다라는 것은 이해가 가는데 SRAM으로 부팅하는 경우가 잘 이해가 되질 않습니다.

코드 영역에 있는 데이터를 굳이 SRAM으로 복사를 해서 부팅해야하는 경우가 있나요?

답변 2

1

홍영기님의 프로필 이미지
홍영기
지식공유자

안녕하세요. 김상현님!

강의 잘 보고 있습니다.

강의를 듣다가 질문이 생겨서 남깁니다.

강의를 보면 SRAM에서 부팅을 하고 싶을 때? SYSCFG_MEMRMP의 MEM_MODE[2:0] 비트로 제어를 한다고 설명하신거 같은데요. (이 경우 MEM_MODE = 2'b001이 되겠죠?)

BOOT[1:0] 핀을 하드웨어에서 2'b11로 만들으면 따로 SYSCFG_MEMRMP 레지스터 값 변경없이 자동으로 변경이 되는건가요??

[ANS] 네 ,그렇습니다.

추가적으로 System 메모리에 UART로 데이터를 플래시메모리에 다운로드할 수 있는 코드를 삽입하고 유저가 플래시메모리로 부팅할지 아니면 프로그램 다운로드를 할지 선택하는 것을 주로 봐와서 System 메모리로 부팅한다라는 것은 이해가 가는데 SRAM으로 부팅하는 경우가 잘 이해가 되질 않습니다.

코드 영역에 있는 데이터를 굳이 SRAM으로 복사를 해서 부팅해야하는 경우가 있나요?

[ANS] SRAM 을 부팅 메모리로 간혹 필요한 경우 사용되는 경우가 아래처럼 있을 수 있습니다.

BOOT[1:0] 핀을 조작하는 것은 파워온에서만 효과가 있는 것이 아니고, 이미 전원이 공급되고 있는 상태에서의 하드웨어 리셋에도 효과가 있기 때문에 SRAM 부팅은 시도해 볼만한 가치는 있겠습니다.

다만, SRAM에서의 부팅은 전원이 켜져있는 상태에서의 부팅에만 효과가 있을겁니다. 전원 꺼져있는 상태에서 전원 켰을때 SRAM 에는 쓰레기 값만 존재하기 때문이지요.

그렇다면 이런 기능을 언제 사용하면 좋을까요.

첫번째 이용 가능한 사례는 부트로더입니다

자체 제작한 부트로더를 SRAM 에서 실행하는 것을 생각해볼 수 있겠습니다. 이 부트로더의 핵심 기능은 내장 플래시(유저 플래시) 메모리에 사용자가 원하는 펌웨어를 기록하는 것을 말합니다. 시스템 메모리에 있는 부트로더를 이용하여 플래싱(Burning Flash Memory)을 하는 것이 아닌 내가 자체 제작한 부트로더를 이용하여 시도한다는 가치가 있죠. 전원이 켜져 있는 상태에서 SRAM 에 프로그램(부트로더)을 로딩하는 것은 STLINK 나 JTAG 을 이용하여 가능합니다.

두번째 이용 가능한 사례는 FLASH 메모리의 대체입니다.

SRAM 은 기본적으로 플래시 메모리보다 고속으로 작동한다고 알려져 있습니다. 프로그램은 플래시메모리에 저장해놓고 SRAM 에 코드를 재배치(relocation 이라고 함) 한 이후에 실행을 SRAM 에서 수행합니다. 단점은 콜드부트(POWER ON 부트)에서는 사용할 수 없습니다. 전원이 켜져있는 상태에서만 리셋 신호 트리거로만 프로그램이 시작될 수 있습니다.

세번째 이용 가능한 사례는 디버깅할 때입니다.

FLASH 메모리는 기술적으로 하드웨어 브레이크 포인트 만을 사용할 수 있기 때문에 STM32CubeIDE 경우 브레이크 포인트를 (아마도) 6개까지만? 사용 가능합니다. 하지만 프로그램 실행 메모리로 SRAM 을 사용하게 된다면 이론적으로 브레이크 포인트 설정 갯수는 제한이 없습니다. 또한 플래시 메모리의 쓰기 횟수가 10,000 번 정도로 횟수 제한이 있다는 점을 생각한다면 SRAM 을 이용할 경우 그 횟수만큼 플래시 메모리의 번아웃 횟수를 절약할 수도 있습니다. 하지만 단점도 있긴 한데요, SRAM 의 크기가 평균적인 STM32 의 경우 수십키로 바이트 정도이므로 이 작은 메모리를 데이터(data, bss, stack) 저장 용도외에 코드(text) 저장 용도로까지 확대하기에는 어려움이 있다는 사실입니다.

지금까지 질문에 답변으로 부팅용 메모리로써 SRAM 에 대하여 알아보았습니다.

하지만, 사실 이런 방법도 있다는 것을 말씀드린 것 뿐이지, 이 사용 방법을 권장하는 의도는 아니라는 점을 참고바랍니다

 

 

0

김상현님의 프로필 이미지
김상현
질문자

감사합니다. 많은 도움이 되었습니다.

김상현님의 프로필 이미지
김상현

작성한 질문수

질문하기