2016-11-01 8 views
1

내 질문에 내가 어떤 종류의 부트 로더를 개발하고 플래시하면 (MCU에 부트 로더를 넣을 때 부트 로더라고 부르는가?), 끔찍하게 작동한다. MCU 전체를 벽돌로 만들어 완전히 사용할 수 없게 만든다. 영구적으로?나쁜 부트 로더가 마이크로 컨트롤러 일 수 있습니까?

내가 묻는 이유는 STM32F407 용 부트 로더를 개발해야한다는 것입니다. 문제는 부트 로더 나 그와 비슷한 것에 대해 아무것도 모르기 때문에 배울 것이 많다는 것을 의미합니다. 답변을 주셔서 감사합니다. 감사합니다.

답변

1

일반적으로 절대적으로 필자는 벽돌로 덮인 마이크로 컨트롤러를 가지고 있습니다. 매번 게으르다가 또 다른 곳으로갑니다.

마이크로 컨트롤러 및 제품군에 따라 다릅니다. 예를 들어, 핀 수는 매우 중요합니다. 마이크로 컨트롤러가 회로의 특정 핀 (또는 프로그래밍 고정 장치)에 의존하고 소프트웨어를 통해 해당 용도로 사용할 수있는 경우 얻을 수있는 것만 큼 많은 돈을 벌 수 있습니다. 예를 들어 jtag 핀은 gpio 핀일 수 있습니다. 그리고 어떤 이유로 든 코드가 gpio 핀으로 사용되며, 칩 디자인은 칩이 리셋되었을 때 jtag 인터페이스를 사용할 수 없기 때문에 벽돌을 만들 수 있습니다.

또 다른 매우 쉬운 하나는 일반적으로 PLL 또는 클럭입니다. /를 사용하여 시계 시스템을 초기화하는 코드를 개발할 경우 (칩 공급 업체가 제공 한 코드를 사용한다고해도), 제대로 초기화하지 않았거나 거기에 있지 않은 시계로 칩을 전환하는 버그가 있습니다 , 그것은 벽돌이 될지도 모른다.

이제 몇 가지 칩 디자인이 다양하게 도움이됩니다. 일반적으로 AVR 제품군에는 칩이 리셋되거나 리셋과 관련된 프로그래밍 모드가있어 플래시에있는 코드가 기능에 영향을 미치지 않아 보드 디자인을 잘못 설정할 수는 있지만 코드가 막을 수는 없습니다 그것은 작동합니다. 또 다른 방법은 부트 기능 전용의 "스트랩"핀 (또는 핀)입니다. 한 방향으로 정상 부팅을 설정하고 다른 부트를 다른 부트 로더에 연결합니다. 이것은 stm32 boot0과 boot1에 따라 다릅니다. 그 칩 가족을위한 감옥 무료 카드에서 나가면, 당신은 칩 (pll/시계 또는 엉망으로 gpio로 그들을 사용하여 SWD 핀) 벽돌 경우, 당신은 단순히 "boot0을 변경하고 내부 부트 로더로 부팅합니다 (어느 AFAIK 당신 can not 엉망) 작동하는 것으로 알려져 있습니다. 해당 부트 로더에서 SWD (지금은 벽돌로 만들어지지 않은 칩) 또는 부트 로더 자체 (항상 직렬, 때로는 USB 또는 기타 지원)를 사용할 수 있습니다. NXP 비슷한 거래. Atmel ARMs는 SAM-BA를 사용 했었지만 이제는 SWD 만 지원합니다. 일부 삼바 코드를 가져 와서 플래시에 잠글 수는 있지만 너무 쉽게 플래시를 잠금 해제하거나 휴지통으로 옮길 수 있습니다. 그들의 부분에 실패하십시오.

STM32의 boot0과 같은 브릭 닝 기능을 사용하지 못하도록 시스템 설계에 포함시키지 않으면 시스템 설계의 일부로 추가 할 것을 권장합니다. 매우 초기 코드는 gpio 핀이 소프트웨어에 스트랩으로 전용 gpio 핀을 초기화합니다. 그 gpio 핀이 정상 부팅을 한 경우 다른 하나를 무한 루프로 돌리거나 버그 코드가 아닌 다른 것으로 점프하면 정상 부팅을 수행합니다. 프로젝트를 잘못 작성하고이 코드를 지우지 않을 것이라는 완전한 보장은 아니지만 적어도 벽돌을 만들 수있는 주변 장치를 통해 작업하면서 부트 로더/프로젝트를 개발하고 파트/보드로 가득 찬 트레이를 벽돌로 만들 수는 없습니다.

부품에서 연기를 내보내는 것은 벽돌을 만드는 또 다른 방법이며 때때로 수시로 발생할 수도 있습니다.

STM32를 부팅하는 방법과 시작 지점으로 사용할 수있는 ST의 다양한 코드에 대한 예제가 많이 있습니다. (모두 다양한 품질을 지니고 있습니다. 그들의 문서는 경쟁 제품보다 뛰어나고 좋으며 주변 장치를 부팅하고 구성하는 것이 전혀 어렵지 않으며 때로는 통조림을 사용하는 것보다 쉽습니다. YMMV, 다양한 솔루션을 시도해야합니다.그러나 만약 당신이 처음이라면 벽돌을 칠하는 가능성이 높습니다. 다행스럽게도 보드 디자인이 boot0 핀을 벗어나는 한 벽돌을 칠할 수없는 칩이 있습니다. STM32를위한 프로토 타입 보드의 경우, boot0 버튼과 리셋 버튼을 선호합니다. 리셋 만하면 칩을 재설정하고 실행하며, boot0을 누르고 리셋을 누르면 부트 로더로 들어갑니다. 이 작업을 위해 필요에 따라 오른쪽을 위아래로 당겨 제대로 연결해야합니다. 또는 점퍼가 넥타이 boot0을 직접 높게 또는 낮게 설정 한 다음 재설정을 클릭하면 시간이 많이 걸리지 만 작동합니다.

+0

매우 철저한 답변, 감사합니다. 나는 당신의 대답을 받아 들일 것이고 개발할 때 매우 조심해야 할 것입니다. 건배! – jmkjaer

3

간단히 말해서 부트 로더가있는 마이크로 컨트롤러를 연결할 수 없습니다. 최종 부트 로더에서 은 펌웨어이며 플래시를 삭제 SWD 를 통해 프로그래머를 사용하여 멀리 삭제 될 수 있으며, 컨트롤러 상태를 회복하지에 마이크로 컨트롤러의 새로운

+0

예, 정답입니다! ... 그리고 AFAIK 일부 ​​STM에는 부트 로더가 내장되어 있습니다 (ROM 영역에 내장되어 있음). 왜 다른 부트 로더를 작성해야합니까? –

+1

@groenhen STM의 프로토콜을 사용하는 기본 인터페이스를 넘지 않는 모든 종류의 ICP에 대해 사용자 정의 부트 로더가 필요합니다. 펌웨어가 암호화되거나 일부 WiFi 인터페이스를 통해 제공되는 경우 – JimmyB

+0

@JimmyB : 그렇습니다. 그렇지만 커스텀 부트 로더는 또 다른 이야기입니다. 그러나 OP는 부트 로더를 통해 마이크로를 브릭 할 수 있는지 질문했다. 대답은 간단합니다 : 설정/퓨즈 등으로 연주하더라도 프로그래머와 함께 컨트롤러를 지우기 만하면 컨트롤러를 복구 할 수 있습니다. 일단 RC 오실레이터 (ext.circuit)와 물론 AVR-ISP 프로그래머를 사용하여 AVR (CLK 퓨즈로 재생 한 후)을 복구했습니다. –

1

예 당신이 할 수있는 벽돌로 좋다. 나는 이것을했고 나는 STM32F427에서 그것을했다.

부트 로더는 Clock, Peripharals 및 Interrupts priority를 ​​신중하게 선택합니다. 이렇게하면 컨트롤러를 벽돌로 만드는 기회가 줄어 듭니다. 또한 일부 회사는 JTAG 라인을 날려 버릴 수있는 독점 정보를 저장하기를 원하기 때문에 코드를 공개하기 전에 모든 것을 테스트하십시오. 프로그램을 작성하는 유일한 방법은 부트 로더를 통해 이루어지며 완벽한 것이 아니라면 컨트롤러 만 벽돌로 만들면됩니다.