답변:
코드에 필요한 플래시 메모리 양이 2 배 이상인 칩을 사용하십시오. 이렇게하면 문제가 발생할 경우를 대비하여 이전 펌웨어를 그대로두고 새 펌웨어를이 메모리에 가져올 수 있습니다.
새 펌웨어의 체크섬을 해독하고 확인한 후 부트 로더는이를 이전 위치를 대체하여 최종 위치로 복사 할 수 있습니다. 이 부분에서 문제가 발생하면 하드 리셋 후 부트 로더는 새 펌웨어가 유효하지 않은 것을 확인하고 (체크섬을 다시 한 번 실행하여) 복사를 다시 시도해야합니다.
이것이 내가 아는 가장 간단하고 가장 멍청한 방법입니다. 또한 부트 로더에는 코드가 거의 필요하지 않으며 메인 프로그램과 부트 로더 사이에 기능을 복제 할 필요가 없습니다 (부트 로더에 통신 로직이 필요하지 않음).
부트 로더와 몇 KB의 추가 플래시를 사용하십시오.
UART, USB, I2C 또는 다른 프로토콜을 통해 특정 명령을 보내 부트 로더가 업그레이드를 수행합니다. 메인 코드 만 업데이트됩니다. 부트 로더 코드는 외부 프로그래머 (예 : PIC 용 JTAG / PICkit 등)를 제외하고는 절대로 건드리지 않습니다.
업데이트가 실패하면 (정전, 누군가가 전선을 넘어서 넘어 지거나 다른 이유로) 위젯이 작동하지 않지만 부트 로더는 여전히 존재하므로 업그레이드를 다시 시도 할 수 있습니다.
메인 코드가 완전히 업데이트되지 않았기 때문에 메인 코드가 잘못 실행되는 것을 방지하는 플래그를 어딘가에 바이트로 설정할 수 있습니다.
장치가 비교적 비싸고 비용을 감당할 수 있고 (고객이 업그레이드에 관심을 기울이면)이 작업을 수행 할 수 있습니다 ...
(일반적으로이 기술은 외부 저장소 또는 jtag의 악의적 인 사용이 필요합니다.)
시스템을 정지시키고 다시 프로그래밍 할 수있는 고정 된 프로그램 마이크로 (예 : 작은 PIC)가 있어야합니다.
"업그레이드 프로세서"펌웨어를 변경할 수 없으므로 잘못 될 수 없습니다.
1) 사용자가 장치를 업그레이드 할 수 있습니다
2) 업그레이드가 실패하면 항상 다시 시도 할 수 있습니다. 벽돌로 만들 수 없습니다
3) 대상 장치가 부트 로더를 지원하지 않는 경우에도 (부팅하고 실행하고 싶어 함) 여전히 원하는 작업을 수행 할 수 있습니다.
FPGA, DSP 및 기타 홀수 대상에 사용됩니다.
정말 깔끔한 사용자 인터페이스를 가질 수 있습니다 (PIC도 웹 서버를 실행할 수 있습니다 ....)
제품에 간단한 직렬 인터페이스 (예 : EIA232) 가 있는지 확인하십시오 . DB-9를위한 공간이 없으면 비표준 커넥터는 정상입니다. 예를 들어 TxD, RxD 및 접지에 TRS 커넥터 만 있으면됩니다.
장치를 처음 프로그래밍 할 때는 부트 로더를 포함하십시오 . 이것은해야 가능한 한 간단하게 조만간 당신이 새로운 기능을 필요로한다면 부트 로더 자체를 업그레이드 할 것이기 때문. (아마도 업그레이드 할 수 없습니다 )
그런 다음 TRS 커넥터입니다. 커넥터가있는 경우 감지 할 수 있도록 스위치가있는 잭을 사용하십시오. 리셋을 바로 확인하고 플러그가 있으면 부트 로더를 시작하고 그렇지 않으면 응용 프로그램을 시작하십시오. 그렇게하면 부트 로더와 사용자 응용 프로그램이 잘 분리되어 있습니다. (수표는 실제로 부트 로더의 일부입니다. 응용 프로그램의 버전에 관계없이 필요합니다. 그렇지 않으면 부트 로더에 들어갈 수 없습니다!)
'업그레이드'는 어떤 장비를 사용할 수 있습니까? PC, USB 스틱, 마이크로 SD 카드?
한 가지 방법은 응용 프로그램을 이동식 항목 (USB 스틱, SD 카드 등)에 두는 것입니다. 칩은 해당 응용 프로그램을 항목에서로드합니다. 업그레이드 프로그램은 단순히 항목을 교체하고 재부팅합니다.
내가 아는 ARM 및 Cortex 마이크로 컨트롤러 칩 (NXP, Atmel)에는 모두 내장형 직렬 부트 로더가 있으므로 업데이트 프로그램이 PC 및 직렬 케이블과 함께 제공되는 경우 (COM 포트 인터페이스를 준비한 경우) 간단하게 다운로드 할 수 있습니다. 최신 정보.