2016-07-05 2 views
0

이 부트 로더에 새로운 기능입니다. SWD를 사용하여 stm3205를 프로그램합니다. 그래서 내 프로그램은 stm32f05 마이크로 컨트롤러를 프로그램 할 때 어떤 위치에있게됩니까? 나 자신의 부트 로더를 만들어 st의 기본 부트 로더로 바꿀 수 있습니까?stm32f051 용 사용자 정의 부트 로더를 만들 수 있습니까?

+0

ST의 부트 로더를 대체 할 수는 없겠지만 자신 만의 것을 만들 수는 있습니다. 당신이 couldnt 할 이유는 없습니다. (어쩌면 어쩌면 일부 플랫폼에서는 플래시의 다른 부분에서 응용 프로그램을 사용할 수 없습니다.)하지만 지금까지 stm32의 모든 기능을 사용할 수있었습니다. –

+0

st 문서에 모든 내용이 있습니다. 어쩌면 부트 로더를 교체 할 수 있습니다. SWD 나 부트 로더를 사용하면 프로그램을 어디에 두 었는지, 어떻게 실행하는지 알 수 없습니다. SWD를 사용하여 램에 프로그램을로드하고 실행할 수 있습니다. 프로그램이 전원을 켠 상태에서 실행되면 설명서에 문서를 넣으라고 명시된 위치에 넣었습니다. 그것의 문서에. –

+0

dwelch에 감사드립니다. 그 문서를 살펴 보겠습니다. –

답변

1

나는 어려운 단어와 의견이 다를 것이다. 부트 로더는 쓰기가 매우 간단한 프로그램으로 대부분의 마이크로 컨트롤러 애플리케이션보다 훨씬 간단합니다.

로직은 boot0 및 다른 스트랩을 사용하여 내부 st 부트 로더를 부팅할지 또는 응용 프로그램을 부팅할지 결정합니다. 이것은 레퍼런스 매뉴얼에도 설명되어있다. 나는 boot0을 찾고 두 번째 장에서 바로 그걸 보았다. 칩에 boot1 핀이 없다면 놀라지 말라. 부팅 모드 표에서 기본적으로 boot0은 rom/flash의 st 부트 로더 또는 플래시의 응용 프로그램에서 부팅하도록 결정합니다.

전체 문서를 다시 읽지 않습니다. 그러나 메모리 맵은 프로그램이 시작될 0x08000000에 플래시를 표시합니다. cortex-m이 될 수도 있습니다 (아마도 st에는 버전이 있거나 팔 공급 장치가있는 팔 구조 참조 자료, 기술 참조 설명서). cortex-m은 주소의 벡터 테이블을 사용하므로 프로그램을 올바르게 빌드하면 스택 포인터를 미리로드 한 다음 리셋 벡터 (주소를 표시하도록 설정된 lsbit)로 시작하지만, 이 오른쪽의 toolchain은 0x08000000 + offset 영역에 이상적입니다). boot0이 접지 (제로)에 묶여 있으면 기본 플래시 메모리에서 부팅되며, 기본적으로 0x08000000은 코어 프로세서의 주소 0에 매핑됩니다. 그러나 벡터 테이블은 기본적으로 실행을 위해 기본 플래시로 점프합니다.

부팅 모드의 동일한 섹션은 boot0이 1 (연결되어있는 높이)이고 st 부트 로더가 시스템 메모리에 있고 직렬로드에 사용할 핀을 사용하는 시스템 메모리를 보여줍니다. 다른 일부 st 문서는 직렬 로더에 대해 설명합니다. 호스트에서이 로더와 인터페이스를 작성하여 프로그램을 지우고 메인 플래시 메모리로 다운로드하는 것은 매우 간단한 프로그램입니다. 의심의 여지가 이미 거기에 무수한 이미 작성된 프로그램입니다. 하지만 부트 로더를 어떻게 디자인 하느냐에 따라 프로토콜의 측면을 구현하기 위해 호스트 프로그램이 필요할 수도 있습니다. 어느 쪽이든 st 부트 로더를 인터페이스하는 오후 프로젝트이며 이러한 유형의 작업을 뒷 주머니에 넣을 수있는 좋은 기술입니다.

물론 uart 및 gpio와 같은 주변 장치를 활성화하는 방법을 알아야합니다. 깜박임으로 시작하여 타이머를 사용하여 프로그램 사용 중 실제로 사용중인 클럭을 파악하는 방법을 익히는 것으로부터 시작하여 올바른 uart를 설정하고 실행되도록하는 것이 좋습니다. 가장 좋은 방법은 프로그램을 RAM에 다운로드 한 다음 분기하여 부트 로더 작업의 절반을 처리 한 다음 플래시 작업에 대한 내용을 처리하는 것입니다. 적어도 첫 번째 부트 로더 사용자 인터페이스로 uart를 사용하는 것이 가장 좋습니다. 주식 터미널 터미널 프로그램은 xmodem을 말할 수 있으며 원시 파일도 덤프 할 수 있어야합니다. 그래서 제 부팅 로더를 사용하여 xmodem을 사용했습니다. 빠르고 지저분한 상태 머신은 수십 줄의 코드였습니다. 하지만 지금은 인텔 16 진수 또는 더 나은 모토로라 기록을 사용합니다. 나는 한 줄에 전체 32 비트 주소를 갖는 기록을 좋아합니다. 무리 중 가장 쉬운 것입니다. xmodem에서와 마찬가지로 들어오는 텍스트 스트림 (인텔 중 하나를 선택하면 인텔 16 진수 또는 srecord)을 처리하고 올바른 주소의 RAM에 들어오는 내용을 쓰려면 수십 줄의 코드 만 필요합니다.그런 다음 바보 터미널에서 파일을 전송할 수 있으며 호스트 코드를 작성하지 않아도됩니다.

다음은 플래시를 프로그래밍하는 방법을 배우고 이상적으로는 실행중인 공간을 지우지 마십시오. 다른 블록 중 하나를 지우고 그 블록에 내용을 적어 다시 작성하여 작성한 것을 확인하십시오. 필자는 printfs를 사용하여 라이브러리를 다루어 그 일을하고 나쁜 생각을 품었습니다. 필자는 매우 작은 10 개의 라인을 가지고 있습니다. 어쩌면 15 개는 UART에서 16 진수를 출력하고, 10 년 이상은 이러한 종류의 디버깅과 "보기"로 충분합니다. 참고 저는 직장에서나 집에서 재미있게 생활하기 위해 베어 메탈 및 부트 로더를 비롯한 모든 작업을 수행합니다. 이 장치의 프로그램에서 플래시를 다루는 것은 어렵지 않습니다. 플래시 메모리 장은 높은 수준의 흐름을 다루며 다시 어렵지 않습니다. 스크류를 올리면 boot0 핀과 st 부트 로더가 계속 떨어집니다 (당연히 칩에서 연기가 나오지 않는 한).

이제 부트 로더가 원하는 것을 결정해야합니다. 항상 거기에있게 될 것입니까? st 사람들처럼 스트랩 핀을 사용하고 싶습니까? 당신이 클럭/pll을 프로그래밍하는 법을 배울 때와 같이 칩을 벽돌로 덮어 버리기 전에 자신 만의 스트랩을 확실히 사용하고 싶어하는 칩과는 다른 칩입니다. 나는 너무 많은 과격한 보드를 벽돌로 만들었지 만, 부트 로더 (bootloader)와 칩과 같은 게임에 대한 폴백 (fallback)이 벽돌에 새겨 져 있지 않다는 사실을 잊어 버렸습니다. 어쨌든 흔한 일은 키 스트로크를 몇 초 동안 기다리는 것입니다. 그렇지 않으면 응용 프로그램을 부팅합니다. 또는 스트랩을 사용하여 응용 프로그램을 부팅하고 다른 하나를 부트 로더로 설정 한 후 명령을 기다리십시오. 후자는 앱을 훨씬 빠르게 부팅하고 이전에는 점퍼 나 단추를 아래로 움직여야합니다.

다음으로 부트 로더를 어디에 보관 하시겠습니까? 프로세서가 부팅 할 수 있도록 벡터 테이블을 올바른 위치에 두어야 만하지만 부트 로더가 바로 뒤에 있어야한다는 것을 의미하지는 않습니다. 이 부품 군은 최대 256Kbytes의 플래시를 가지고 있습니다. 예를 들어, 0x08000000 근처에 부트 로더가있을 수 있으며, 응용 프로그램을 가지고 있고 부트 로더를 칩에 유지하려는 경우 플래시의 다른 주소에 살도록 응용 프로그램을 설계해야합니다. 아마도 플래시 기반 부트 로더를위한 최상의 솔루션 일 것입니다. 당신이 우리의 관점에서 우리의 프로그램이 우리를 위해 숫양에로드되는 나무 딸기 파이에 말한다면. 테스트중인 응용 프로그램에 대한 하위 주소 공간을 남겨두고 부트 로더에 대한 브랜치를 깊게 배치하여 테스트중인 응용 프로그램이 준비되면 sd 카드에 커밋 할 때 링커 스크립트를 변경하지 않아도되도록 할 수 있습니다. 그러나이 칩은 그렇지 않습니다. 부트 로더와 응용 프로그램을 동시에 플래시에 넣고 플래시에서 더 깊게 사용하려면 부트 로더와 응용 프로그램을 먼저 설치해야합니다.

인터페이스가 쉬운 스트랩 드 부트 로더가있는 부분은 지울 수도 있지만 초보자도 지울 수 있습니다. 원하는 경우 부트 로더를 폴백 할 때 폴백으로 사용할 수 있습니다. 의지. 나는 당신이 그것을 지울 수 있다고 생각하지 않는다. 최소한 ST는 그 의미가 무엇이든 그것들을 위해 예약되어 있다고 말한다 :

시스템 메모리 : 시스템 메모리 부팅 모드에서 장치를 부팅하는 데 사용됩니다. 영역은 STMicroelectronics에서 사용하도록 예약되어 있으며 통신 인터페이스를 통해 플래시 메모리를 다시 프로그래밍하는 데 사용되는 부트 로더를 포함합니다. 장치를 제조 할 때 ST가 프로그래밍하고 가짜 쓰기/지우기 작업으로부터 보호합니다. 자세한 내용은 AN2606을 참조하십시오.

어떻게 작동하는지 이해하고 싶지 않으면 절대적으로 ST 라이브러리 중 하나를 사용할 수 있습니다. 나는 두 가지를 시도하는 것을 권장한다. 라이브러리를 사용하는 것이 훨씬 쉽지만, 일부 사람들은 라이브러리를 더 쉽게 찾을 수있다. 하루가 끝나면 프로그램을 소유하고 유지 관리해야하므로 코드 또는 코드와 모든 코드를 함께 소유해야하므로 책임은 사용자에게 있습니다.이 칩은 각 구성 요소에 대해 몇 분/시간의 경험을 얻으면 쉽게 프로그래밍 할 수 있습니다 (라이브러리가있는 경우 가끔씩 시간이 오래 걸리는 경우가 있습니다). 기본적으로 두 경로를 시도하거나 둘 이상의 라이브러리 경로가있을 수 있습니다. 확실히이 cmsis 물건은 인생을 더 쉽게 만들기 위해 노력하고 있습니다 (삶을 전반적으로 어렵게 만들거나 느리게 만드는 등). 경로를 선택해도 다른 사람이 경험이 변경되었는지 자주 확인하십시오. 공급 업체는 기본적으로 라이브러리를 계속 변경해야합니다. 모든 작업이 끝날 때까지 기다려야하므로, 배운 apis 세트에 대한 장기적인 지원은 기대하지 않습니다. Windows 나 Linux 또는 Mac이 아닙니다. 그들이 이렇게하는 이유는 여러 가지입니다. 주변 장치와 직접 대화하는 것뿐만 아니라 새로운 방향으로 시도해야합니다. 보스가 실패했거나 생산 중단이나 리콜이 발생했을 때 책임지고있는 코드를 누가 작성했는지 기억하지 마십시오. 코드를 소유하고 코드를 작성하지 않은 경우에도 책임을집니다. 따라서 코드를 빌려보고 코드에서 얼마나 많은 코드를 책임지고 있는지 결정하십시오. 그것은 하루 또는 일주일 또는 한 달간의 개발 시간을 절약 할 수는 있지만 1 년 후에 일하는 데 드는 비용입니다. 파고 들어 보지 않아도 되겠습니까?

+0

시간 내 주셔서 감사합니다! ST의 애플리케이션 노트를 살펴볼 것이다. 귀하의 응답은 도움이 종료되었습니다 ..! –

1

STM 부트 로더를 교체 할 필요가 없습니다. 첫 번째 플래시 페이지 (또는 페이지)에 배치 된 부트 로더를 작성합니다. 내장 로더, ST-Link, JTAG 등으로로드합니다.이 부트 로더는 메인 어플리케이션을 다른 플래시 페이지에로드 할 수 있습니다. 예를 들어 시리얼을 통해이 작업을 수행 할 수 있습니다. 부트 로더는 항상 시작되는 코드의 첫 번째 비트 일 것이고, 그러면 주 응용 프로그램으로 점프합니다.

웹상에는 많은 것들이 있습니다. 이것, 특히 다이어그램을 보아라. http://embeddedsystemforu.blogspot.co.uk/p/microcontroller-bootloader-generally.html

0

stm32f05 마이크로 컨트롤러를 프로그램 할 때 어느 위치에서 프로그램이 실행됩니까?

부품의 플래시 메모리에.

내가 직접 부트 로더를 만들고 st의 기본 부트 로더로 바꿀 수 있습니까?

아니요. ST 부트 로더는 부품의 ROM에 내장되어 있으므로 덮어 쓸 수 없습니다. 그러나 다른 사람들이 언급했듯이 별도의 부트 로더를 개발하여 플래시 메모리에 둘 수는 있습니다 (어렵긴하지만).

+0

@duskwuff을 삭제 해 주셔서 감사합니다. –

관련 문제