무선으로 ARM 업그레이드


9

GSM 모뎀이 내장 된 ARM 보드를 만듭니다.
무선으로 ARM 펌웨어를 업그레이드 할 수 있기를 원합니다.

이를위한 좋고 신뢰할 수있는 오픈 소스 솔루션이 있습니까?
그렇지 않은 경우이 기능을 갖춘 유료 OS가 있습니까?


2
ARM은 매우 일반적입니다. ARM 아키텍처를 포함하는 많은 제조업체가 있으며 그 중 일부는 해당 기능을 제공 할 수 있습니다.
clabacchio

1
사용하려는 ARM 칩 / 패밀리에 대한보다 구체적인 정보가 좋습니다. 모든 Cortex-M 마이크로 컨트롤러가 사용자 코드에서 플래시 쓰기를 지원하는 것은 아닙니다. Maple bootloader leaflabs.com/docs/bootloader.html 과 같은 오픈 소스 구현의 예가 존재 하며 일부 쿼드 콥터에서 지원되는 무선 링크를 통한 펌웨어 업그레이드를 보았습니다.
Thorn

우리는 현재 ARM 장치를 선택하지 않았습니다.)
hotips

7
펌웨어 업그레이드의 큰 문제는 펌웨어에 문제가있을 때 칩을 업데이트 모드로 만드는 방법입니다. 칩에 접근 할 수 있으면 칩을 리셋하고 부트로드 핀을 강제로 높게 할 수 있지만 무선으로 어떻게 할 것입니까? 내가 믿을 수있는 유일한 해결책은 기본 통신을 처리하고 메인 칩을 업데이트 할 수있는 두 번째 칩 (업데이트 할 수 없음)을 갖는 것입니다. 이 문제를 해결 한 후 실제 부트 로딩은 칩에 내장 된 부트 로더를 사용하는 것만 큼 간단 할 수 있습니다 (예를 들어, LPC uC는 모두 시리얼 부트 로더가 있음을 알고 있습니다).
Wouter van Ooijen

2
@Hernan 하나의 칩 (어떻게 든 잘못된 코드를 실행)처럼 다른 칩을 리셋 상태로 유지하는 등 미묘한 실패 모드를 가능하게합니다. 실제로 신뢰할 수있는 유일한 솔루션은 기능을 하나의 칩에 단순하게 유지하여 업데이트 할 필요가 없도록하는 것입니다.
Wouter van Ooijen

답변:


9

나는 미리 만들어진 솔루션을 알지 못하지만 한 프로젝트에서 어떻게 해결했는지 설명 할 것입니다. 완전히 '깨끗한'것은 아니지만 수천 번의 업그레이드로 실패한다는 것을 알지 못합니다. 이 애플리케이션에서 매우 낮은 고장률은 여전히 ​​유닛에 액세스하는 것보다 저렴합니다.

기본 응용 프로그램에는 일반적인 통신 프로토콜에 추가 된 세 가지 추가 패킷 유형이 있으며 여기에는 오류 감지 및 재시도 상태가 포함됩니다.

  1. 펌웨어 업데이트 시작 명령은 외부 SPI 플래시에서 예약 된 메모리 영역을 지 웁니다. 장치가 백업 배터리에서 실행 중이거나 외부 전원에서 실행 중이지만 배터리 충전 상태가 25 % 미만인 경우 오류를 반환합니다.

  2. 쓰기 블록 명령은 오프셋 주소와 외부 플래시 메모리에 작은 청크로 작성된 데이터를 받아들입니다. 높은 수준의 프로토콜은 오류 감지 및 재전송을 처리합니다. 각 블록이 작성된 후에는 명령이 승인되기 전에 읽혀지고 확인됩니다.

  3. 펌웨어 업데이트 완료 명령에는 추가 검증을 위해 수신 된 펌웨어가 전체 이미지의 CRC32와 함께 있어야하는 길이가 포함됩니다. 그것이 외부 플래시 메모리의 내용과 일치하고 전원 상태가 여전히 정상이면 CRC32는 펌웨어 업데이트가 보류 중임을 나타내는 '매직 번호'와 함께 EEPROM 영역으로 전송됩니다.

  4. 기본 응용 프로그램에서 하드 루프가 실행되어 워치 독을 강제로 다시 시작합니다.

  5. 부트 로더 (ARM 플래시의 쓰기 방지 영역에 있음)는 EEPROM에서 매직 번호를 확인하고 다시 이미지의 CRC32를 확인합니다. 모두 정상이면 이미지를 외부 플래시에서 ARM 플래시의 주 프로그램 영역으로 전송합니다.

  6. 보류중인 업그레이드 정보는 EEPROM에서 지워지고 하드 루프는 다른 재부팅을 강제합니다. 이번에는 부트 로더가 기본 응용 프로그램을 정상적으로 시작합니다.

필자는 업데이트 단계에서 새로운 펌웨어 릴리스 테스트에 실패한 것을 본 적이 없지만이 방법을 사용하여 배포하는 것이 중요합니다. 새 릴리스에서 GSM 네트워크에 연결할 수없고 향후 업데이트 명령을 수용 할 수있는 경우 현장 펌웨어 업데이트가 필요합니다.


1

Linux 또는 RTOS 또는 베어 메탈을 실행 중입니까? 데비안을 사용하는 경우 현재 파일 시스템의 스냅 샷을 찍을 수 있고 "apt-get"을 통해 업그레이드 한 다음 작동 여부에 따라 변경 사항을 유지하거나 롤백 할 수 있습니다.


우리는 어플리케이션에 따라 리눅스와 베어 메탈을 가지고있다 ;-)
hotips

1
Linux가 있다면 많은 인프라를 활용할 수 있습니다. 현재 프로젝트에서 업데이트를 처리하는 방법은 사용자 지정 응용 프로그램의 .deb 파일을 만든 다음 apt-get update를 사용하여 시스템을 업데이트하는 것입니다. 나는 또한 btrfs를 실험하고 있습니다. 해당 파일 시스템을 통해 스냅 샷을 만들 수 있습니다. 그래서 내 계획은 원하는 디렉토리를 스냅 샷하고 시도하고 업데이트 한 다음 작동하지 않으면 스냅 샷을 되 돌리는 것입니다. 베어 메탈을 사용하는 경우 일반적인 이중 메모리 접근 방식, 최신 작업 코드 용 이미지 및 새로 다운로드 한 코드 용 이미지를 사용해야합니다.
프레드 바셋
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.