GSM 모뎀이 내장 된 ARM 보드를 만듭니다.
무선으로 ARM 펌웨어를 업그레이드 할 수 있기를 원합니다.
이를위한 좋고 신뢰할 수있는 오픈 소스 솔루션이 있습니까?
그렇지 않은 경우이 기능을 갖춘 유료 OS가 있습니까?
GSM 모뎀이 내장 된 ARM 보드를 만듭니다.
무선으로 ARM 펌웨어를 업그레이드 할 수 있기를 원합니다.
이를위한 좋고 신뢰할 수있는 오픈 소스 솔루션이 있습니까?
그렇지 않은 경우이 기능을 갖춘 유료 OS가 있습니까?
답변:
나는 미리 만들어진 솔루션을 알지 못하지만 한 프로젝트에서 어떻게 해결했는지 설명 할 것입니다. 완전히 '깨끗한'것은 아니지만 수천 번의 업그레이드로 실패한다는 것을 알지 못합니다. 이 애플리케이션에서 매우 낮은 고장률은 여전히 유닛에 액세스하는 것보다 저렴합니다.
기본 응용 프로그램에는 일반적인 통신 프로토콜에 추가 된 세 가지 추가 패킷 유형이 있으며 여기에는 오류 감지 및 재시도 상태가 포함됩니다.
펌웨어 업데이트 시작 명령은 외부 SPI 플래시에서 예약 된 메모리 영역을 지 웁니다. 장치가 백업 배터리에서 실행 중이거나 외부 전원에서 실행 중이지만 배터리 충전 상태가 25 % 미만인 경우 오류를 반환합니다.
쓰기 블록 명령은 오프셋 주소와 외부 플래시 메모리에 작은 청크로 작성된 데이터를 받아들입니다. 높은 수준의 프로토콜은 오류 감지 및 재전송을 처리합니다. 각 블록이 작성된 후에는 명령이 승인되기 전에 읽혀지고 확인됩니다.
펌웨어 업데이트 완료 명령에는 추가 검증을 위해 수신 된 펌웨어가 전체 이미지의 CRC32와 함께 있어야하는 길이가 포함됩니다. 그것이 외부 플래시 메모리의 내용과 일치하고 전원 상태가 여전히 정상이면 CRC32는 펌웨어 업데이트가 보류 중임을 나타내는 '매직 번호'와 함께 EEPROM 영역으로 전송됩니다.
기본 응용 프로그램에서 하드 루프가 실행되어 워치 독을 강제로 다시 시작합니다.
부트 로더 (ARM 플래시의 쓰기 방지 영역에 있음)는 EEPROM에서 매직 번호를 확인하고 다시 이미지의 CRC32를 확인합니다. 모두 정상이면 이미지를 외부 플래시에서 ARM 플래시의 주 프로그램 영역으로 전송합니다.
보류중인 업그레이드 정보는 EEPROM에서 지워지고 하드 루프는 다른 재부팅을 강제합니다. 이번에는 부트 로더가 기본 응용 프로그램을 정상적으로 시작합니다.
필자는 업데이트 단계에서 새로운 펌웨어 릴리스 테스트에 실패한 것을 본 적이 없지만이 방법을 사용하여 배포하는 것이 중요합니다. 새 릴리스에서 GSM 네트워크에 연결할 수없고 향후 업데이트 명령을 수용 할 수있는 경우 현장 펌웨어 업데이트가 필요합니다.
Linux 또는 RTOS 또는 베어 메탈을 실행 중입니까? 데비안을 사용하는 경우 현재 파일 시스템의 스냅 샷을 찍을 수 있고 "apt-get"을 통해 업그레이드 한 다음 작동 여부에 따라 변경 사항을 유지하거나 롤백 할 수 있습니다.