KR102277238B1 - 업데이트가능한 집적 회로 무선장치 - Google Patents

업데이트가능한 집적 회로 무선장치 Download PDF

Info

Publication number
KR102277238B1
KR102277238B1 KR1020167019679A KR20167019679A KR102277238B1 KR 102277238 B1 KR102277238 B1 KR 102277238B1 KR 1020167019679 A KR1020167019679 A KR 1020167019679A KR 20167019679 A KR20167019679 A KR 20167019679A KR 102277238 B1 KR102277238 B1 KR 102277238B1
Authority
KR
South Korea
Prior art keywords
firmware module
software application
wireless communication
bootloader
new
Prior art date
Application number
KR1020167019679A
Other languages
English (en)
Other versions
KR20160100391A (ko
Inventor
마틴 티베르달
조엘 데이비드 스테이플턴
Original Assignee
노르딕 세미컨덕터 에이에스에이
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 노르딕 세미컨덕터 에이에스에이 filed Critical 노르딕 세미컨덕터 에이에스에이
Publication of KR20160100391A publication Critical patent/KR20160100391A/ko
Application granted granted Critical
Publication of KR102277238B1 publication Critical patent/KR102277238B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/66Updates of program code stored in read-only memory [ROM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/50Service provisioning or reconfiguring

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Telephone Function (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

집적 회로 무선 통신 디바이스(1)는 프로세싱 수단(7), 메모리(13), 및 무선 통신 로직(17)을 포함한다. 메모리(13)는 (i) 부트로더(22)를 저장하고 (ii) 펌웨어 메모리 영역에 펌웨어 모듈(23)을 저장하고 (iii) 소프트웨어 애플리케이션 메모리 영역에 소프트웨어 애플리케이션(27)을 저장한다. 펌웨어 모듈(23)은 사전결정된 무선 프로토콜에 따라 무선 통신 로직(17)을 제어하기 위한 명령어를 포함하고, 소프트웨어 애플리케이션(27)은 펌웨어 모듈(23)의 무선 통신 기능을 호출하기 위한 명령어를 포함한다. 부트로더(22) 또는 펌웨어 모듈(23)은 무선 통신 로직(17)을 사용하여 신규 펌웨어 모듈(40)을 수신하기 위한 명령어를 포함하고, 부트로더(22) 또는 펌웨어 모듈(23)은, 소프트웨어 애플리케이션(27)의 적어도 일부가 신규 펌웨어 모듈(40)에 의해 덮어쓰기되도록 소프트웨어 애플리케이션 메모리 영역에 신규 펌웨어 모듈(40)을 저장하기 위한 명령어를 포함한다. 부트로더(22)는 신규 펌웨어 모듈(40)을 소프트웨어 애플리케이션 메모리 영역으로부터 펌웨어 메모리 영역으로 이동 또는 복사하기 위한 명령어를 포함한다.

Description

업데이트가능한 집적 회로 무선장치{UPDATABLE INTEGRATED-CIRCUIT RADIO}
본 발명은 집적 회로 무선 통신 디바이스(integrated-circuit radio-communication device) 및 이러한 디바이스를 업데이트하는 방법에 관한 것이다.
집적 회로 무선 통신 디바이스는 통상적으로 프로세서, 메모리 및 무선 통신 로직을 실리콘 칩 상에 집적한다. 안테나가 실리콘 상에 제조될 수도 있거나 또는 외부적으로 접속될 수도 있다. 디바이스는 보통은, 디바이스를 전원(power supply), 클록 소스 및 임의의 외부 주변장치 예컨대 센서, 타이머, 디지털 아날로그 변환기 및 출력 디바이스에 접속하기 위한 핀을 구비할 것이다. 프로세서는, 디바이스에 의한 무선 메시지의 전송 및/또는 수신을 관리하기 위해 무선 통신 로직과 인터페이싱한다.
이러한 무선 통신 디바이스는 광범위한 무선 제품, 예컨대 무선 마이크 및 키보드, 게임 콘솔용 컨트롤러, 자전거 속도계, 리모콘, 창고문 개폐기(garage-door opener), 무선 라우드스피커, 등등에서 사용될 수 있다.
이러한 디바이스 상의 프로세서는, 미리 결정된 무선 프로토콜, 예컨대 Bluetooth™ 또는 ZigBee™에 따라 무선 통신 로직을 제어하기 위해서, 디바이스 상의 비휘발성 메모리(예를 들면, EEPROM 또는 플래시) 상에 저장되는 소프트웨어를 실행할 수도 있다.
이러한 디바이스의 일 예는 본 출원인의 nRF51822 라디오 온 칩(radio-on-a-chip)이다. 이것은 무선 트랜스시버(radio transceiver)뿐만 아니라 256kB의 임베딩된 플래시 메모리 및 16kB의 RAM을 갖는 32비트 ARM™ Cortex™ M0 CPU를 포함한다. 그것은 사전컴파일되고 링크된 바이너리 펌웨어 모듈을 플래시 메모리에 미리 로딩한 상태에서 고객(customer)에게 제공될 수 있거나, 또는 펌웨어 모듈은 고객이 디바이스로 로딩할 바이너리 이미지로서 공급될 수도 있다. 펌웨어 모듈은 무선장치(radio)의 소프트웨어 제어뿐만 아니라 다른 기능을 제공할 수 있다. 그 다음, 고객은 또한, 집적된 무선 디바이스(예를 들면, 무선 컴퓨터 키보드)를 통합하는 최종 제품을 엔드 유저(end user)에게 발송하기 이전에, 별개의 사전 링크된 바이너리 모듈로서, 자기 자신의 소프트웨어 애플리케이션을 플래시 메모리에 추가할 수 있다.
본 출원인은, 펌웨어 모듈 및 소프트웨어 애플리케이션이 디바이스 상으로 로딩된 이후에도, 펌웨어 모듈에서 코드를 변경하거나 업데이트하는 것이(예를 들면, 신규 피쳐를 추가하거나, 또는 버그를 수정하는 것이) 바람직할 수도 있다는 것을 인식하였다. 몇몇 경우에서, 디바이스가 엔드 유저의 소유 하에 있는 경우에 이러한 코드를 변경하는 것이 바람직할 수도 있다.
본 발명은 이러한 코드 업데이팅을 용이하게 하기 위한 효율적인 방식을 제공하는 것을 추구한다.
제1 양태로부터, 본 발명은 집적 회로 무선 통신 디바이스를 업데이트하는 방법을 제공하는데,
디바이스는 프로세싱 수단, 메모리, 및 무선 통신 로직을 포함하고;
메모리는 (i) 부트로더를 저장하고 (ii) 펌웨어 메모리 영역에 펌웨어 모듈을 저장하고 (iii) 소프트웨어 애플리케이션 메모리 영역에 소프트웨어 애플리케이션을 저장하며, 펌웨어 모듈은 사전결정된 무선 프로토콜에 따라 무선 통신 로직을 제어하기 위한 명령어를 포함하고, 소프트웨어 애플리케이션은 펌웨어 모듈의 무선 통신 기능을 호출하기 위한 명령어를 포함하고,
그 방법은:
프로세싱 수단이, 무선 통신 로직을 사용하여 신규 펌웨어 모듈을 수신하기 위해, 부트로더 또는 펌웨어 모듈로부터의 명령어를 실행하는 것; 및 소프트웨어 애플리케이션의 적어도 일부가 신규 펌웨어 모듈에 의해 덮어쓰기되도록 소프트웨어 애플리케이션 메모리 영역에 신규 펌웨어 모듈을 저장하기 위해, 부트로더 또는 펌웨어 모듈로부터의 명령어를 실행하는 것; 및
프로세싱 수단이, 신규 펌웨어 모듈을 소프트웨어 애플리케이션 메모리 영역으로부터 펌웨어 메모리 영역으로 이동 또는 복사하기 위해, 부트로더로부터의 명령어를 실행하는 것을 포함한다.
제2 양태에서, 본 발명은 집적 회로 무선 통신 디바이스를 제공하는데, 집적 회로 무선 통신 디바이스는:
프로세싱 수단;
메모리; 및
무선 통신 로직을 포함하고,
메모리는 (i) 부트로더를 저장하고 (ii) 펌웨어 메모리 영역에 펌웨어 모듈을 저장하고 (iii) 소프트웨어 애플리케이션 메모리 영역에 소프트웨어 애플리케이션을 저장하며, 펌웨어 모듈은 사전결정된 무선 프로토콜에 따라 무선 통신 로직을 제어하기 위한 명령어를 포함하고, 소프트웨어 애플리케이션은 펌웨어 모듈의 무선 통신 기능을 호출하기 위한 명령어를 포함하고;
부트로더 또는 펌웨어 모듈은 무선 통신 로직을 사용하여 신규 펌웨어 모듈을 수신하기 위한 명령어를 포함하고, 부트로더 또는 펌웨어 모듈은, 소프트웨어 애플리케이션의 적어도 일부가 신규 펌웨어 모듈에 의해 덮어쓰기되도록 소프트웨어 애플리케이션 메모리 영역에 신규 펌웨어 모듈을 저장하기 위한 명령어를 포함하고;
부트로더는 신규 펌웨어 모듈을 소프트웨어 애플리케이션 메모리 영역으로부터 펌웨어 메모리 영역으로 이동 또는 복사하기 위한 명령어를 포함한다.
따라서, 본 발명에 따르면, 집적 회로 무선 통신 디바이스는 현존하는 펌웨어 모듈을 사용하여 신규 펌웨어 모듈을 무선으로 수신할 수 있고, 이전(old) 펌웨어 모듈을 신규 펌웨어 모듈로 업데이트 또는 대체하기 이전에, 신규 펌웨어 모듈에 대한 임시 저장소로서 소프트웨어 애플리케이션 메모리 영역을 사용할 수 있다는 것을 당업자는 알 수 있을 것이다. 이 방식에서는, 신규 펌웨어 모듈을 수신하기 위한 전용 메모리 영역을 확보할 필요가 없다. 디바이스의 사이즈 및 비용에 더 큰 메모리 요건이 추가될 것이기 때문에, 이것은 바람직하다. 또한, 업데이팅은 엔드 유저에 의해 편리하게 수행될 수 있는데, 무선 디바이스를 케이블에 의해 호스트 컴퓨팅 디바이스에 접속할 필요 없이, 그것이 무선으로 수행될 수 있기 때문이다.
바람직한 실시형태의 세트에서, 부트로더 또는 신규 펌웨어 모듈은, 무선 통신 로직을 사용하여 신규 소프트웨어 애플리케이션을 수신하기 위한 명령어를 포함하고, 부트로더 또는 신규 펌웨어 모듈은 소프트웨어 애플리케이션 메모리 영역에 신규 소프트웨어 애플리케이션을 저장하기 위한 명령어를 포함한다. 신규 소프트웨어 애플리케이션이 수신될 때 이전 펌웨어 모듈의 사본이 소프트웨어 애플리케이션 메모리 영역에 남아 있으면, 이전 펌웨어 모듈의 적어도 일부는 신규 소프트웨어 애플리케이션에 의해 덮어쓰기되는 것이 바람직하다. 이 신규 소프트웨어 애플리케이션은 이전 소프트웨어 애플리케이션과 동일할 수도 있거나, 또는 그것은 적어도 약간의 차이, 예컨대 새로운 코드 또는 삭제된 코드를 포함할 수도 있다.
신규 펌웨어 모듈은, 그것이 소프트웨어 애플리케이션 메모리 영역에 저장될 때 이전 소프트웨어 애플리케이션을 완전히 덮어쓸 수도 있다. 이것은, 예를 들면, 신규 펌웨어 모듈이 소프트웨어 애플리케이션보다 더 큰 경우에 그럴 수도 있다.
메모리는: ROM, 비휘발성 메모리, 및 휘발성 메모리 중 임의의 하나 이상을 포함할 수도 있다. 몇몇 실시형태에서, 그것은, 비휘발성의 판독 기록 메모리, 예컨대 EEPROM, 플래시(예를 들면, NOR 타입 플래시), 또는 임의의 다른 적절한 기술을 포함하거나 또는 이들로 구성된다. 펌웨어 메모리 영역 및/또는 소프트웨어 애플리케이션 메모리 영역 각각은, 비휘발성의 판독 기록 메모리를 포함하거나 또는 이것으로 구성되는 것이 바람직하다. 메모리는, 코드가 메모리로부터 직접적으로 실행될 수 있도록 랜덤 액세스를 허용하는 것이 (비록 이것이 필수는 아니지만) 바람직하다. 프로세싱 수단은 펌웨어 모듈의 및/또는 소프트웨어 애플리케이션의 명령어를, 어쩌면 프로세서 캐시를 통해, 그러나 전체 펌웨어 모듈 또는 소프트웨어 애플리케이션을 RAM으로 먼저 복사하지 않고, 메모리로부터 직접적으로 실행하는 것이 바람직하다. 메모리는 개별적으로 소거가능한 페이지를 포함할 수도 있다. 메모리의 비휘발성 부분은, 페이지보다 더 미세한 크기로 소거될 수 없는; 예를 들면, 개개의 비트, 바이트 또는 워드 레벨에서 소거될 수 없는 그러한 것일 수도 있다. 여기서, 소거는, 메모리 내용을 디폴트 상태(통상적으로는 모두 "1" 또는 모두 "0" 중 어느 하나)로 리셋하는 것을 의미하는데, 이것으로부터 개개의 비트 또는 바이트의 상태는 기록 동작에서 변경될 수도 있다.
덮어쓰기는, 소거 동작과 후속하는 쓰기 동작을 수행하는 것을 포함할 수도 있거나, 또는 그것은, 메모리 타입에 따라, 단일의 동작으로서 수행될 수도 있다.
디바이스는 또한, 휘발성 메모리, 예컨대 RAM을 포함하는 것이 바람직하다. 그러나, 바람직한 실시형태에서, RAM의 양, 또는 이용가능한 RAM의 양은 소프트웨어 애플리케이션 메모리 영역보다 더 작다. 신규 펌웨어 모듈은 통상적으로 RAM 또는 이용가능한 RAM보다 더 클 수도 있다. 신규 펌웨어 모듈을 소프트웨어 애플리케이션 영역에 저장하는 것은, 신규 펌웨어 모듈의 수신과 시간적으로 중첩하는 것이 바람직하다.
펌웨어 메모리 영역은, 메모리 어드레스의 단일의 연속하는 범위를 점유하는 것이 바람직하지만; 그러나, 이것은 필수는 아니며, 펌웨어 메모리 영역은 두 개 이상의 비연속적인 서브영역을 포함할 수도 있다. 마찬가지로, 소프트웨어 애플리케이션 메모리 영역은 메모리 어드레스의 단일의 연속하는 범위를 점유하는 것이 바람직하지만; 그러나, 이것은 필수는 아니며, 소프트웨어 애플리케이션 메모리 영역은 두 개 이상의 비연속적인 서브영역을 포함할 수도 있다. 펌웨어 메모리 영역은 소프트웨어 애플리케이션 메모리 영역과는 별개인 것이(즉, 중첩하지 않는 것이) 바람직하다.
소프트웨어 애플리케이션은 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 위치되는 것이 바람직하다(즉, 소프트웨어 애플리케이션 중 일부 또는 전체는, 사전결정된 메모리 어드레스로부터 연장하는 어떤 범위의 메모리 어드레스를 점유한다). 이 사전결정된 어드레스는, 소프트웨어 애플리케이션을 디바이스 상으로 링크 및/또는 로딩할 때 사용하기 위해, 소프트웨어 애플리케이션의 개발자에게 제공될 수도 있다. 그것은, 예를 들면, 인터럽트를 소프트웨어 애플리케이션으로 포워딩하기 위한 펌웨어 모듈에 의해 사용될 수도 있다.
신규 펌웨어 모듈은, 그것이 소프트웨어 애플리케이션 메모리 영역에 기록될 때 동일한 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에, 또는 대략적으로 동일한 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 저장되는 것이 바람직하다(즉, 신규 펌웨어 모듈 중 일부 또는 전체는 소프트웨어 애플리케이션 메모리 어드레스로부터 연장하는 메모리 어드레스의 어떤 범위를 점유한다). 이것은, 덮어쓰기된 소프트웨어 애플리케이션과의 최대 중첩을 보장하는 것에 의해, 메모리의 특히 효율적인 사용을 제공한다.
부트로더 또는 신규 펌웨어 모듈은, 신규 소프트웨어 애플리케이션을 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 기록하기 위한 명령어를 포함하는 것이 바람직하다.
(이전) 펌웨어 모듈은 사전결정된 펌웨어 메모리 어드레스에 위치되는 것이 바람직하다(즉, 펌웨어 모듈 중 일부 또는 전체는, 사전결정된 펌웨어 메모리 어드레스로부터 연장하는 어떤 범위의 메모리 어드레스를 점유한다). 신규 펌웨어 모듈은 사전결정된 펌웨어 메모리 어드레스에 위치되도록 이동되거나 복사되는 것이 바람직하다(즉, 신규 펌웨어 모듈 중 일부 또는 전체는, 펌웨어 메모리 어드레스로부터 연장하는 어떤 범위의 메모리 어드레스를 점유한다). 펌웨어 모듈 및/또는 소프트웨어 애플리케이션의 각각은 명령어뿐만 아니라 데이터를 포함할 수도 있고, 각각은 인터럽트 벡터 테이블을 포함할 수도 있다. 신규 펌웨어 모듈은 이전 펌웨어 모듈보다 더 작을 수도 있거나, 또는 그것보다 더 클 수도 있거나, 또는 그들은 서로 실질적으로 동일한 사이즈일 수도 있다.
몇몇 실시형태에서, 소프트웨어 애플리케이션 메모리 영역 중 일부 또는 전체는, 신규 펌웨어 모듈이 펌웨어 메모리 영역으로 이동된 이후, 소거될 수도 있다. 다른 실시형태에서, 신규 펌웨어 모듈의 사본은 소프트웨어 애플리케이션 메모리 영역에 남아 있을 수도 있거나, 소거될 수도 있거나 또는 (예를 들면, 디바이스 리셋 이후, 또는 신규 소프트웨어 애플리케이션이 로딩될 때) 나중에 덮어쓰기될 수도 있다.
부트로더는 ROM에 또는 플래시와 같은 판독 기록 메모리에 저장될 수도 있다. 그것은 펌웨어 모듈과 비교하여 상대적으로 작은 것(예를 들면, 대략적으로 1/10의 사이즈 또는 그 미만)이 바람직하다. 실시형태의 한 세트에서, 부트로더는 사이즈가 대략적으로 4kB일 수도 있고, 한편 펌웨어 모듈은 사이즈가 대략 80kB 이상일 수도 있다. 부트로더는 펌웨어 메모리 영역에, 또는 별개의 부트로더 메모리 영역에 위치될 수도 있다. 부트로더는, 펌웨어 모듈을 저장하기 위해 사용되지 않는, 하나 이상의 개별적으로 소거가능한 메모리 페이지에 저장되는 것이 바람직하다. 이것은, 부트로더 코드에 영향을 주지 않으면서, 이전 펌웨어 모듈의 특히 효율적인 소거 또는 덮어쓰기를 가능하게 할 수 있다.
프로세싱 수단은, 파워 온 이후에 또는 리셋 이후에, 부트로더의 하나 이상의 명령어를 실행하도록 정렬될 수도 있다. 부트로더는 디바이스를 업데이트하는 것 이외의 기능을 가질 수도 있지만, 적어도 몇몇 실시형태에서는, 그것은 다른 어떤 기능도 제공하지 않는다. 몇몇 실시형태에서, 부트로더는, 무선 통신 로직을 직접적으로 사용하기 위한(즉, 펌웨어 모듈로 또는 소프트웨어 애플리케이션으로 실행을 전달하지 않고, 무선 통신 로직에 의한 액션을 직접적으로 호출하기 위한) 명령어를 포함하지 않는다. 이것은 부트로더가 가능한 한 간단하고 작게 남아 있는 것을 허용할 수 있어서, 부트로더 코드에서 버그가 발생하는 가능성을 최소화하게 된다. 대신, 부트로더는 무선 통신이 필요로 될 때 이전 펌웨어 모듈로 및/또는 신규 펌웨어 모듈로 실행을 양도할 수도 있다. 몇몇 실시형태에서, 부트로더는, 유효한 펌웨어 모듈 및 소프트웨어 애플리케이션이 디바이스 상에 이미 로딩되어 있을 때마다 (예를 들면, 파워 온 이후 또는 리셋 이후) 펌웨어 모듈로 또는 소프트웨어 애플리케이션으로 분기할 실행을 야기시키기 위한 명령어를 포함한다.
프로세싱 수단은 임의의 형태를 취할 수도 있지만, 몇몇 바람직한 실시형태에서, 그것은, ARM™에 의해 설계된 프로세서, 예컨대 ARM™ Cortex™-M 패밀리(예를 들면, Cortex™-M0)로부터의 프로세서를 포함하거나, 또는 그 프로세서이다. 디바이스는, 명령어 실행을 임의의 적절한 방식으로 공유할 수도 있는 복수의 프로세서, 예를 들면, 두 개 이상을 포함할 수도 있다. 몇몇 실시형태에서, 펌웨어 모듈로부터의 명령어는 제1 프로세서에 의해 실행될 수도 있고, 소프트웨어 애플리케이션으로부터의 명령어는, 제1 프로세서와는 상이한 제2 프로세서에 의해 실행될 수도 있다. 무선 통신 로직은 프로세서와는 물리적으로 및/또는 논리적으로 별개인 것이 바람직하다. 그것은 아날로그 및/또는 디지털 회로부(circuitry)를 포함할 수도 있다. 디바이스는 집적된 안테나를 포함할 수도 있거나, 또는 그것은 오프 칩 안테나에 대한 접속부를 포함할 수도 있다. 디바이스는, 다양한 외부 컴포넌트 예컨대 레지스터, 커패시터, 전원, 증폭기, 무선 안테나, 수정 발진기, 센서, 출력 디바이스 등등을 접속하기 위한 접속부를 포함할 수도 있다.
바람직한 실시형태에서, 펌웨어 모듈은 사전링크된 바이너리 이미지이다. 소프트웨어 애플리케이션도 사전링크된 바이너리 이미지인 것이 또한 바람직하다. 바람직하게는, 펌웨어 모듈과 소프트웨어 애플리케이션 사이에 어떠한 링크도 발생하지 않는다. 몇몇 실시형태에서, 소프트웨어 애플리케이션은, 프로세싱 수단으로 하여금, 펌웨어 모듈에 의해 핸들링되는 인터럽트를 생성하는 슈퍼바이저 호출 명령어를 실행하게 하는 것에 의해, (예를 들면, 무선 기능을 호출하기 위해) 펌웨어 모듈로 제어를 양도한다.
펌웨어 모듈과 소프트웨어 애플리케이션 사이의 이 분리는, 이전 펌웨어 모듈을 손상시키지 않으면서 이전 소프트웨어 애플리케이션이 신규 펌웨어 모듈에 의해 쉽게 덮어쓰기되는 것을 가능하게 한다. 이것은, 펌웨어 모듈과 소프트웨어 애플리케이션이 단일의 바이너리 이미지로 함께 컴파일되고/되거나 링크되면 간단하지 않을 것인데, 소프트웨어 애플리케이션 코드만을 포함하는 메모리의 쉽게 식별가능한 영역이 존재할 가능성이 없기 때문이다. (예를 들면, 링커 지령(linker directive)의 조심스러운 사용을 통해) 그것이 불가능하다는 것은 말할 것도 없고, 펌웨어 모듈이 소프트웨어 애플리케이션에 완전하게 링크되는 배치는 배제된다.
디바이스는, 소프트웨어 애플리케이션 메모리 영역의 코드가 펌웨어 메모리 영역의 어드레스를 직접적으로 액세스하는(판독하는 및/또는 기록하는 및/또는 실행하는) 것을 방지할 수 있는 메모리 보호 로직을 포함할 수도 있다.
몇몇 실시형태에서, 소프트웨어 애플리케이션은, 프로세서로 하여금, 무선 통신 로직을 사용하여 신규 펌웨어 모듈을 수신하기 위한 펌웨어 모듈의 명령어를 실행하게 하기 위한 명령어를 포함한다. 소프트웨어 애플리케이션은 (예를 들면, 시스템 호출에 의해) 펌웨어 모듈로 제어를 직접적으로 양도할 수도 있거나, 또는 그것은 제어를 부트로더로 전달할 수도 있는데, 부트로더는 결국에는 필요한 펌웨어 모듈 기능 또는 기능들을 호출할 수도 있다. 이것은 소프트웨어 애플리케이션이: 예를 들면, 인간 유저로부터의 신호에 응답하여, 또는 원격 디바이스, 예컨대 스마트폰으로부터, 무선장치에 의해 수신되는 메시지에 응답하여, 펌웨어 업데이트를 개시할지의 여부 또는 때를 결정하는 것을 허용한다.
소프트웨어 애플리케이션은, 신규 펌웨어 모듈을 수신하는 동안 무선 통신 문제가 발생하는 경우 또는 (예를 들면, 전력 고장으로 인해) 디바이스가 예상치 않게 리셋되는 경우, 디바이스가 원격 디바이스와의 무선 접속을 재수립하는 것을 허용하는 정보를 (예를 들면, 하나 이상의 기능 파라미터로서) 부트로더로 또는 펌웨어 모듈로 전달하기 위한 명령어를 포함할 수도 있다. 이 정보는: 디바이스 어드레스, 무선 채널, 인증 정보, 및 암호화 정보 중 임의의 하나 이상과 같은 결합 정보를 포함할 수도 있다. 이것은 중요할 수 있는데, 신규 펌웨어 모듈이 디바이스에 의해 수신되기 시작하는 경우 소프트웨어 애플리케이션이 덮어쓰기되기(그리고 더 이상 실행불가능하게 되기) 시작할 수도 있기 때문이다. 결합 정보는 또한, 원격 디바이스로부터 신규 소프트웨어 애플리케이션을 수신하기 위한 디바이스에 의해 사용될 수도 있다. 부트로더는 결합 정보를 저장할 수도 있고 그것을 신규 소프트웨어 애플리케이션을 수신하기 위해 사용할 수도 있거나, 또는 이전 펌웨어 모듈은, 예를 들면, 결합정보를 사전결정된 메모리 위치에 저장하는 것에 의해, 결합 정보를 신규 펌웨어 모듈이 이용가능할 수 있게 만들 수도 있다.
부트로더 또는 펌웨어 모듈은, 신규 펌웨어 모듈이 정확하게 수신되었다는 것 및/또는 소프트웨어 애플리케이션 메모리 영역에 정확하게 저장되었다는 것을 체크하기 위한 명령어를 포함하는 것이 바람직하다. 이것은, 신규 펌웨어 모듈에 대한 체크섬을 검증하는 것 또는 암호화 서명(cryptographic signature)을 검증하는 것을 포함할 수도 있다. 신규 펌웨어 모듈에 대한 인증 정보, 예컨대 체크섬 또는 디지털 서명은 원격 디바이스에 의해 디바이스로 제공될 수도 있다; 예를 들면, 신규 펌웨어 모듈에 수반하거나 또는 신규 펌웨어 모듈에 임베딩된다. 부트로더 또는 펌웨어 모듈은, 체크가 실패하는 경우 무선 통신 로직을 사용하여 원격 디바이스로 시그널링하기 위한 명령어를 포함할 수도 있다. 그것은 원격 디바이스에게 신규 펌웨어 모듈을 재송신할 것을 요청할 수도 있다.
일단 신규 펌웨어 모듈이 정확하게 저장되면, 이전 펌웨어 모듈은 부트로더로 제어를 되돌릴 수도 있거나 또는 양도할 수도 있다. 이것은 직접적인 분기에 의할 수도 있거나, 또는 인터럽트를 트리거하는 것에 의할 수도 있거나, 또는 디바이스로 하여금 리셋하게 하는 것에 의할 수도 있거나, 또는 임의의 다른 적절한 메커니즘일 수도 있다.
부트로더는 (예를 들면, 전체 펌웨어 메모리 영역을 소거하는 것에 의해) 이전 펌웨어 모듈을 소거할 수도 있고 그 다음 소프트웨어 애플리케이션 메모리 영역으로부터 신규 펌웨어 모듈을 판독할 수도 있고 그것을 펌웨어 메모리 영역에 기록할 수도 있다. 그 다음, 그것은 (신규 소프트웨어 애플리케이션을 수신하기 이전에 또는 이후에) 제어를 신규 펌웨어 모듈에게 양도할 수도 있다.
후속하여 신규 소프트웨어 애플리케이션이 수신되면, 부트로더 또는 신규 펌웨어 모듈의 명령어 하에서, 이것은 소프트웨어 애플리케이션 메모리 영역에 직접적으로 기록될 수도 있다. 신규 소프트웨어 애플리케이션을 소프트웨어 애플리케이션 영역에 저장하는 것은, 신규 소프트웨어 애플리케이션의 수신과 시간적으로 중첩하는 것이 바람직하다. 부트로더 또는 펌웨어 모듈은, 신규 소프트웨어 애플리케이션이 정확하게 수신되었다는 것 및/또는 소프트웨어 애플리케이션 메모리 영역에 정확하게 저장되었다는 것을 체크하기 위한 명령어를 포함하는 것이 바람직하다. 이것은 신규 소프트웨어 애플리케이션에 대한 체크섬 또는 암호화 서명을 검증하는 것을 포함할 수도 있다. 부트로더 또는 펌웨어 모듈은, 체크가 실패하는 경우 무선 통신 로직을 사용하여 원격 디바이스로 시그널링하기 위한 명령어를 포함할 수도 있다. 그것은 원격 디바이스에게 신규 소프트웨어 애플리케이션을 재송신할 것을 요청할 수도 있다.
신규 소프트웨어 애플리케이션은 신규 펌웨어 모듈과 동일한 무선 통신 세션에서 수신될 수도 있다. 대안적으로, 신규 소프트웨어 애플리케이션은 나중의 무선 통신 세션까지 수신되지 않을 수도 있다. 그것은 신규 펌웨어 모듈과는 상이한 원격 디바이스로부터 수신될 수도 있다.
본원에서 설명되는 임의의 양태 또는 실시형태의 피쳐는, 적절한 곳이면 어디든, 본원에서 설명되는 임의의 다른 양태 또는 실시형태에 적용될 수도 있다. 상이한 실시형태 또는 실시형태의 세트에 대한 참조가 이루어지는 경우, 이들은 반드시 별개가 아니라 중첩할 수도 있다는 것이 이해되어야 한다.
본 발명의 소정의 양호한 실시형태가, 단지 예로서, 첨부의 도면을 참조로 설명될 것인데, 도면에서:
도 1은 본 발명을 구체화하는 마이크로컨트롤러의 개략적인 도면이다;
도 2는 마이크로컨트롤러 아키텍쳐 내의 주요 소프트웨어 컴포넌트를 도시하는 개략적인 도면이다;
도 3은 마이크로컨트롤러에 대한 개략적인 메모리 맵이다;
도 4는 마이크로컨트롤러를 업데이트함에 있어서의 제1 스테이지를 도시하는, 비휘발성 메모리의 개략적인 도면이다;
도 5는 마이크로컨트롤러를 업데이트함에 있어서의 제2 스테이지를 도시하는, 비휘발성 메모리의 개략적인 도면이다;
도 6은 마이크로컨트롤러를 업데이트함에 있어서의 제3 스테이지를 도시하는, 비휘발성 메모리의 개략적인 도면이다;
도 1은, 종종 라디오 온 칩으로 알려진, 집적 회로 마이크로컨트롤러(1)를 도시한다. 그것은 무선 심박수 모니터와 같은 제품에 통합될 수도 있다. 마이크로컨트롤러(1)는, 저항기-커패시터 발진기를 포함할 수도 있고/있거나 오프칩 수정 발진기(도시되지 않음)로부터 입력을 수신할 수도 있는 클록 로직(3), 전력 관리 회로부(5), 프로세서(7)(예를 들면, ARM™ Cortex™-M0), 메모리 보호 로직(9), RAM(11), 비휘발성 플래시 메모리(13), 하나 이상의 주변장치(15), 무선 통신 로직(17) 및 입/출력 회로부(19)를 포함할 수도 있다.
프로세서(7), RAM(11) 및 플래시 메모리(13)는, 예를 들면 라인 및 버스(도시되지 않음)를 사용하여 종래의 방식으로 인터커넥트된다. 메모리 보호 로직(9)은 프로세서(7)로부터 RAM(11) 및 플래시 메모리(13)로의 명령어를 인터셉트하도록 위치된다. 제품에 설치되는 경우, 마이크로컨트롤러(1)는 다수의 외부 컴포넌트 예컨대 전원, 무선 안테나, 수정 발진기, 커패시터, 센서, 오디오/비주얼 출력 디바이스, 등등(도시되지 않음)에 접속될 수도 있다.
도 2는 소프트웨어 아키텍쳐의 주요 컴포넌트를 도시한다. 이들은 옵션적인 하드웨어 추상화 계층(21), 예컨대 ARM™ Cortex™ 마이크로컨트롤러 소프트웨어 인터페이스 스탠다드(Microcontroller Software Interface Standard), 부트로더(22), 펌웨어 모듈(23), 드라이버(25) 및 소프트웨어 애플리케이션(27)을 포함한다. 드라이버(25)는 소프트웨어 애플리케이션(27)에 전용될 수도 있다.
부트로더(22)는, 플래시 메모리(13)에 위치되는 작은 바이너리 애플리케이션이다. 그것은 오버 디 에어(over-the-air) 소프트웨어 업데이트를 관리하기 위한 명령어를 포함한다. 부트로더(22)는 모든 리셋 이후의 엔트리 포인트이다. 업데이트가 진행 중이지 않는 한, 보통은 그것은 제어를 펌웨어 모듈(23)로 바로 양도한다.
펌웨어 모듈(23)은, 다수의 임베딩된 소프트웨어 블록을 포함하는 링크된 바이너리 애플리케이션이다. 무선 프로토콜 블록(31)은 하나 이상의 무선 프로토콜 스택, 예컨대 Bluetooth Low Energy™를 구현한다. 라이브러리(35)는 공유된 하드웨어 리소스 관리 및 기능 예컨대 랜덤한 수의 생성, 인터럽트 및 우선순위 구성, (예를 들면, 주변장치를 인에이블 및 디스에이블하기 위한) 전력 관리, 암호화 기능, 등등을 제공한다. 펌웨어 관리(37)는 펌웨어 모듈의 인에이블 및 디스에이블, 및 무선 프로토콜 스택의 인에이블 및 디스에이블을 지원한다. 펌웨어 모듈(23)은 시스템 벡터 테이블을 소유한다.
펌웨어 모듈(23)에 대한 애플리케이션 프로그래밍 인터페이스(application programming interface; API)(29)는 소프트웨어 애플리케이션(27)이 펌웨어 모듈(23)의 기능을 호출하는 것을 허용한다. 그것은 신호 슈퍼바이저 호출 명령어를 사용하여 제어를 소프트웨어 애플리케이션(27)으로부터 펌웨어 모듈(23)로 전달하도록 구현된다. 이들은, 펌웨어 모듈(23)에서 핸들링될 수 있는 프로세스 인터럽트를 야기한다. 펌웨어 모듈(23)은 소프트웨어 인터럽트를 사용하여 소프트웨어 애플리케이션(27)으로 이벤트를 전달할 수 있다.
소프트웨어 애플리케이션(27)은, 하드웨어를 직접적으로 사용하기 위해 펌웨어 모듈(23)을 사용할 수 있는 것 외에, 예를 들면, 애플리케이션 고유의 드라이버(25)에 의해, 직접적으로, 또는 하드웨어 추상화 계층(21)을 통해, 마이크로컨트롤러(1) 하드웨어에 액세스할 수 있다.
도 3은, 펌웨어 모듈(23)과 소프트웨어 애플리케이션(27)(임의의 애플리케이션 고유의 드라이버(25)를 포함함) 사이에서 RAM(11) 및 플래시(13)가 어떻게 공유되는지를 도시한다. ARM™ Cortex™-M0 프로세서(7)를 사용하는 경우, 플래시(13)는 제로(0x0000 0000)로부터 위쪽으로 그것의 용량인 SizeOfProgMem까지 어드레스를 할당받고, RAM(11)은 0x2000 0000으로부터 위쪽으로 (0x2000 0000 + SizeOfRAM)까지 어드레스를 할당받는다. 다른 실시형태에서는, 상이한 어드레스 값이 물론 사용될 수도 있다.
플래시(13)는 어드레스(CLENR0)(코드 길이 영역0)의 양측에 두 개의 별개의 영역을 포함한다. 제로와 CLENR0 사이의 영역0은, 부트로더(22)와 펌웨어 모듈(23)이 위치되는 곳이다. 펌웨어 모듈의 인터럽트 벡터 테이블은 어드레스 제로에 저장된다. CLENR0으로부터 위쪽으로 연장하는 영역1은 소프트웨어 애플리케이션(27) 및 임의의 애플리케이션 데이터가 위치되는 곳이다. 그것은 또한, 펌웨어 모듈(23)로부터의(그리고 어쩌면 부트로더(22)로부터의) 포워딩된 인터럽트(forwarded interrupt)를 수신하기 위한 인터럽트 벡터 테이블을 어드레스 CLENR0에서 갖는다. 디바이스(1)는, 다른 목적, 예컨대 구성 정보 또는 플래그를 저장하는 것을 위해 사용될 수도 있는 다른 비휘발성 메모리(도시되지 않음)를 구비할 수도 있다는 것을 알 수 있을 것이다.
마찬가지로, RAM(11)은, 베이스 어드레스(0x2000 000)로부터 RLENR0까지의 영역0, 및 RLENR0으로부터 위쪽으로 연장된 영역1을 구비한다. RAM 영역0은 부트로더(22) 및 펌웨어 모듈(23)에 대한 데이터 저장소를 제공하고 한편 RAM 영역1은 소프트웨어 애플리케이션(27)에 대한 데이터 저장소를 제공한다. 호출 스택은 펌웨어 모듈(23)와 소프트웨어 애플리케이션(27) 사이에서 공유되고, 예를 들면, 0x2000 0000 + SizeOfRAM으로부터 아래쪽으로 성장한다. 호출 스택에 할당되는 메모리는 소프트웨어 애플리케이션(27) 및 펌웨어 모듈(23)의 양자의 요구를 고려하여 충분히 커야만 한다. 사전결정된 공유된 메모리 어드레스는 RAM(11)의 영역1에 있을 수도 있거나, 또는 RAM(11)의 그 밖의 곳, 영역0 및 영역1 밖에 위치될 수도 있다.
메모리 보호 로직(9)은, 프로세서(7)로부터 플래시(13) 및 RAM(11)으로의 모든 메모리 액세스 요청(예를 들면, 판독 요청)을 인터셉트하도록 정렬된다. 그것은 액세스 요청 명령어의 소스를 (예를 들면, 요청이 펌웨어 모듈(23)로부터 유래하는지 또는 소프트웨어 애플리케이션(27)으로부터 유래하는지를) 결정한다. 그것은 또한, 다양한 소스에 대한 각각의 액세스 퍼미션을 규정하는 (예를 들면, 하나 이상의 전용 레지스터에 저장된) 메모리 보호 구성 데이터에 액세스하고, 상응하여 액세스 요청을 허용 또는 거절한다.
본 발명의 몇몇 바람직한 실시형태에서, 소프트웨어 애플리케이션(27)은 플래시 영역0에 대한 그리고 RAM 영역0에 대한 판독 및/또는 기록 액세스가 거절된다. 이것은 펌웨어 모듈(23)에 대한 기밀성을 보호하고, 펌웨어 모듈(23)에 할당된 메모리 위치로의 소프트웨어 애플리케이션(27)에 의한 부주의한 또는 부당한 기록을 방지할 수 있어서, 강건성 및 보안성을 증가시키게 된다. 소프트웨어 애플리케이션 플래시 영역1은, 예를 들면, 외부 디버깅 인터페이스를 통한 다시 읽기(read back)를 보호하기 위해, 판독 액세스로부터 또한 보호될 수도 있다.
도 4 내지 도 6은 디바이스(1) 상의 펌웨어 모듈 및 소프트웨어 애플리케이션의 업데이팅을 도시한다. 자물쇠 심볼은, 어떤 레벨의 액세스 보호가 메모리 보호 로직(9)에 의해 강제되고 있는 메모리의 영역을 나타낸다.
소프트웨어 애플리케이션(27)은, 부트로더(22)에서 업데이트 기능을 호출하는 것에 의해 업데이트 프로세스를 개시한다. 소프트웨어 애플리케이션(27)은 원격의 피어 디바이스에 대한 무선 프로토콜 결합 정보를 부트로더(22)로 전달한다. 피어 디바이스는, 예를 들면, 스마트폰 또는 랩탑 컴퓨터일 수도 있다. 결합 정보는, 단절이 발생할 시에, 피어 디바이스에 재접속하기 위해 마이크로컨트롤러(1)에 의해 사용될 수 있다. 그 다음, 부트로더(22), 또는 소프트웨어 애플리케이션(27)은 (예를 들면, 펌웨어 모듈(23)에서의 업데이트 동작을 호출하기 위해 시스템 호출을 사용하는 것에 의해) 펌웨어 모듈(23)로 제어를 전달한다. 일단 펌웨어 모듈(23)이 제어를 가지면, 그것은 피어 디바이스에게 신규 펌웨어 모듈(40)을 요청하기 위해 무선 통신 로직(17)을 사용한다.
도 4에서 도시되는 바와 같이, 펌웨어 모듈(23)은 신규 펌웨어 모듈(40)을 수신하기 시작한다. 펌웨어 모듈(23)은 수신된 데이터 중 일부를 RAM에 일시적으로 버퍼링할 수도 있지만, 그러나 펌웨어 모듈(23)은, 자신이 신규 펌웨어 모듈(40)을 수신할 때, 이전에 소프트웨어 애플리케이션(27)을 유지했던 플래시 메모리(13)의 영역1로의 신규 펌웨어 모듈(40)의 기록을 또한 시작한다. 소프트웨어 애플리케이션(27)(애플리케이션 벡터 테이블을 포함함)은, 기록 개시 이전에 전체적으로 소거될 수도 있거나, 또는 그것은 필요시 한 번에 한 페이지씩 소거될 수도 있다.
일단 전체적인 신규 펌웨어 모듈(40)이 수신되었고 플래시 메모리(13)에 기록되었다면, 이전 펌웨어 모듈(23)은, 피어 디바이스로부터 수신되는, 신규 펌웨어 모듈(40)에 대한 체크섬을 검증한다. 체크섬이 정확하지 않으면, 이전 펌웨어 모듈(23)은 피어 디바이스에 의한 신규 펌웨어 모듈(40)의 재송신을 요청한다.
마이크로컨트롤러(1)가 신규 펌웨어 모듈(40)을 수신하는 동안 (예를 들면, 전력 고장으로 인해) 예상치 않게 리셋되면, 실행은, 피어 디바이스에게 신규 펌웨어 모듈(23)을 다시 요청할 것을 펌웨어 모듈(23)에게 지시할 부트로더(22)에서 재개할 것이다.
일단 신규 펌웨어 모듈(40)에 대한 체크섬이 정확하면, 펌웨어 모듈(23)은 제어를 부트로더(22)로 전달한다. 부트로더(22)는 원격 피어 디바이스로부터 단절되고, 플래시 메모리(13)의 영역0으로부터 이전 펌웨어 모듈(23)(및 그 벡터 테이블)을 소거한다. 물론, 그것은 영역0의 부트로더(22) 코드를 소거하지 않는다. 이것을 가능하게 하기 위해, 부트로더(22)는, 영역0의 나머지와는 별개인 자기 자신의 플래시 페이지 또는 페이지들에 저장되는 것이 바람직하고, 그 결과 부트로더(22)를 포함하는 페이지 또는 페이지를 제외한 영역0의 전체를 소거하는 것은 간단하게 된다.
도 5에서 도시되는 바와 같이, 그 다음, 부트로더(22)는 신규 펌웨어 모듈(40)을 영역1로부터 영역0의 관련 어드레스로 복사한다.
그 다음, 부트로더(22)는, 원격 피어 디바이스에 무선에 의해 재접속할 것을, 그리고 신규 소프트웨어 애플리케이션(42)의 송신을 요청할 것을, 신규 펌웨어 모듈(40)에게 지시하는 신규 펌웨어 모듈(40)의 기능을 (예를 들면, 시스템 호출을 통해) 호출한다. 부트로더(22)는, 신규 펌웨어 모듈(40)이 이것을 하는 것을 가능하게 하기 위해, 무선 결합 정보를 신규 펌웨어 모듈(40)로 전달한다.
도 6에서 도시되는 바와 같이, 신규 펌웨어 모듈(40)은 신규 소프트웨어 애플리케이션(42)을 수신하기 시작한다. 신규 펌웨어 모듈(40)은 수신된 데이터 중 일부를 RAM에 일시적으로 버퍼링할 수도 있지만, 그러나 신규 펌웨어 모듈(40)은 또한, 자신이 신규 소프트웨어 애플리케이션(42)을 수신할 때 플래시 메모리(13)의 영역1로 신규 소프트웨어 애플리케이션(42)(애플리케이션 벡터 테이블을 포함함)을 기록하기 시작한다. 영역1은 기록이 시작하기 이전에 전체적으로 소거될 수도 있거나, 또는 그것은 필요시 한 번에 한 페이지씩 소거될 수도 있다. 완료시, 부트로더(22)는, 피어 디바이스로부터 수신되는, 신규 소프트웨어 애플리케이션(42)에 대한 체크섬을 검증한다. 체크섬이 정확하지 않으면, 부트로더(22)는 피어 디바이스에 의한 신규 소프트웨어 애플리케이션(42)의 재송신을 요청한다.
마이크로컨트롤러(1)가 신규 소프트웨어 애플리케이션(42)을 수신하는 동안 (예를 들면, 전력 고장으로 인해) 예상치 않게 리셋되면, 실행은, 피어 디바이스에게 신규 소프트웨어 애플리케이션(42)을 다시 요청할 것을 신규 펌웨어 모듈(40)에게 지시할 부트로더(22)에서 재개할 것이다.
일단 신규 소프트웨어 애플리케이션(42)에 대한 체크섬이 정확하면, 부트로더(22)는, 마이크로컨트롤러(1)가 신규 소프트웨어 애플리케이션(42) 및 신규 펌웨어 모듈(40)을 정상적인 방식으로 사용하는 것을 시작할 수 있도록, 제어를 신규 소프트웨어 애플리케이션(42)으로 전달한다.
이 배치예에서, 부트로더(22)는, 필요시 결합 정보를 전달하는 것, 및 예상치 않은 리셋으로부터 복원하는 것을 포함해서, 업데이트를 실행하기 위해, 이전 및 신규 펌웨어 모듈에서의 적절한 기능을 호출하는 것을 담당한다.
대안적인 실시형태의 세트에서, 이전 펌웨어 모듈(23)은 결합 정보를 저장하는 것 및 업데이트 프로세스의 상태를 기억하는 것을 담당할 수도 있다. 이전 펌웨어 모듈(23)은 신규 펌웨어 모듈(40)을 영역1로 기록할 수도 있고 신규 펌웨어 모듈(40)이 정확하게 수신되었다는 것을 검증할 수도 있다. 업데이팅 프로세스에서 부트로더(22)의 메인 또는 유일한 태스크는, 신규 펌웨어 모듈(40)을 영역1로부터 영역0으로 복제하는 것일 수도 있다. 이전 소프트웨어 애플리케이션(27)이 신규 펌웨어 모듈(40)에 의해 완전히 덮어쓰기되기 이전에, 마이크로컨트롤러(1)가 예상치 않게 리셋되면(예를 들면, 전력 고장), 실행은, 단순히 제어를 이전 펌웨어 모듈(23)로 전달하는 부트로더(22)에서 재개할 것이다. 이전 펌웨어 모듈(23)은 상태를 유지하고, 그 결과 그것은 신규 펌웨어 모듈(40)을 다시 반복해서 수신해야 한다는 것을 알게 되고 신규 펌웨어 모듈(23)을 다시 요청하기 위해 메모리에 저장된 결합 정보를 사용한다. 이전 펌웨어 모듈(23)은 결합 정보를 적절한 메모리 영역에(예를 들면, RAM에 또는 바람직하게는 플래시의 영속적인 데이터 저장 영역에) 기록하고, 그 결과 결합 정보는 신규 펌웨어 모듈(40)에 의해 액세스될 수 있다.
일단 신규 펌웨어 모듈(40)이 정확하게 수신되고 부트로더(22)에 의해 영역0에 복사되면, 부트로더(22)는 제어를 신규 펌웨어 모듈(40)로 전달한다. 신규 펌웨어 모듈(40)은, 자신이 처음 시작하는 때를 알도록 정렬되고, 피어 디바이스에 접속되고 신규 소프트웨어 애플리케이션(42)을 수신하는 것에 의해, 응답한다. 이전 펌웨어 모듈(23)은 적절한 메모리 영역에(예를 들면, RAM에 또는 바람직하게는 플래시의 영속적인 데이터 저장 영역에) 결합 정보를 이미 기록했어야만 하고, 그 결과 신규 펌웨어 모듈(40)은 피어 디바이스에 재접속시키기 위해 결합 정보에 액세스할 수 있다.
대안적으로, 신규 펌웨어 모듈(40)은, 신규 소프트웨어 애플리케이션(42)을 수신하기 위해, 동일한 원격 디바이스와의, 또는 상이한 원격 디바이스와의 신규 결합 정보를 수립할 수도 있다. 이것은 신규 펌웨어 모듈(40)이 수신된 직후, 또는 시간 지연 이후에 발생할 수도 있다.

Claims (24)

  1. 집적 회로 무선 통신 디바이스를 업데이트하는 방법으로서,
    상기 디바이스는 프로세싱 수단, 메모리, 및 무선 통신 로직을 포함하고,
    상기 메모리는 (i) 부트로더(boot-loader)를 저장하고 (ii) 펌웨어 메모리 영역에 펌웨어 모듈을 저장하고 (iii) 소프트웨어 애플리케이션 메모리 영역에 소프트웨어 애플리케이션을 저장하며, 상기 펌웨어 모듈은 사전결정된 무선 프로토콜에 따라 상기 무선 통신 로직을 제어하기 위한 명령어를 포함하고, 상기 소프트웨어 애플리케이션은 상기 펌웨어 모듈의 무선 통신 기능을 호출하기 위한 명령어를 포함하고,
    상기 방법은,
    상기 프로세싱 수단이, 상기 무선 통신 로직을 사용하여 신규 펌웨어 모듈을 수신하기 위해 상기 부트로더 또는 상기 펌웨어 모듈로부터의 명령어를 실행하고, 상기 소프트웨어 애플리케이션의 적어도 일부가 상기 신규 펌웨어 모듈에 의해 덮어쓰기(overwritten)되도록 상기 소프트웨어 애플리케이션 메모리 영역에 상기 신규 펌웨어 모듈을 저장하기 위해 상기 부트로더 또는 상기 펌웨어 모듈로부터의 명령어를 실행하는 단계와,
    상기 프로세싱 수단이, 상기 신규 펌웨어 모듈을 상기 소프트웨어 애플리케이션 메모리 영역으로부터 상기 펌웨어 메모리 영역으로 이동 또는 복사하기 위해 상기 부트로더로부터의 명령어를 실행하는 단계를 포함하는
    집적 회로 무선 통신 디바이스를 업데이트하는 방법.
  2. 제 1 항에 있어서,
    상기 신규 펌웨어 모듈을 수신하는 동안 상기 소프트웨어 애플리케이션 메모리 영역에 상기 신규 펌웨어 모듈을 기록하는 단계를 더 포함하는
    집적 회로 무선 통신 디바이스를 업데이트하는 방법.
  3. 집적 회로 무선 통신 디바이스로서,
    프로세싱 수단과,
    메모리와,
    무선 통신 로직을 포함하고,
    상기 메모리는 (i) 부트로더를 저장하고 (ii) 펌웨어 메모리 영역에 펌웨어 모듈을 저장하고 (iii) 소프트웨어 애플리케이션 메모리 영역에 소프트웨어 애플리케이션을 저장하며, 상기 펌웨어 모듈은 사전결정된 무선 프로토콜에 따라 상기 무선 통신 로직을 제어하기 위한 명령어를 포함하고, 상기 소프트웨어 애플리케이션은 상기 펌웨어 모듈의 무선 통신 기능을 호출하기 위한 명령어를 포함하고,
    상기 부트로더 또는 상기 펌웨어 모듈은 상기 무선 통신 로직을 사용하여 신규 펌웨어 모듈을 수신하기 위한 명령어를 포함하고, 상기 부트로더 또는 상기 펌웨어 모듈은, 상기 소프트웨어 애플리케이션의 적어도 일부가 상기 신규 펌웨어 모듈에 의해 덮어쓰기되도록 상기 소프트웨어 애플리케이션 메모리 영역에 상기 신규 펌웨어 모듈을 저장하기 위한 명령어를 포함하고,
    상기 부트로더는 상기 신규 펌웨어 모듈을 상기 소프트웨어 애플리케이션 메모리 영역으로부터 상기 펌웨어 메모리 영역으로 이동 또는 복사하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  4. 제 3 항에 있어서,
    상기 부트로더 또는 상기 펌웨어 모듈은 상기 소프트웨어 애플리케이션을 상기 신규 펌웨어 모듈로 완전히 덮어쓰기위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  5. 제 3 항 또는 제 4 항에 있어서,
    상기 부트로더 또는 상기 신규 펌웨어 모듈은 상기 무선 통신 로직을 사용하여 신규 소프트웨어 애플리케이션을 수신하기 위한 명령어를 포함하고, 상기 부트로더 또는 상기 신규 펌웨어 모듈은 상기 소프트웨어 애플리케이션 메모리 영역에 상기 신규 소프트웨어 애플리케이션을 저장하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  6. 제 3 항 또는 제 4 항에 있어서,
    상기 펌웨어 메모리 영역 및 상기 소프트웨어 애플리케이션 메모리 영역 각각은 비휘발성 판독-기록 메모리를 포함하는
    집적 회로 무선 통신 디바이스.
  7. 제 3 항 또는 제 4 항에 있어서,
    상기 부트로더 또는 상기 펌웨어 모듈의 상기 명령어는, 상기 신규 펌웨어 모듈을 수신하는 동안 상기 소프트웨어 애플리케이션 메모리 영역에 상기 신규 펌웨어 모듈이 기록되게 하는
    집적 회로 무선 통신 디바이스.
  8. 제 3 항 또는 제 4 항에 있어서,
    상기 소프트웨어 애플리케이션은 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 위치되고, 상기 부트로더 또는 상기 펌웨어 모듈은 상기 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 상기 신규 펌웨어 모듈을 저장하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  9. 제 3 항 또는 제 4 항에 있어서,
    상기 펌웨어 모듈은 사전 링크된(pre-linked) 바이너리 이미지인
    집적 회로 무선 통신 디바이스.
  10. 제 9 항에 있어서,
    상기 소프트웨어 애플리케이션은 사전 링크된 바이너리 이미지인
    집적 회로 무선 통신 디바이스.
  11. 제 3 항 또는 제 4 항에 있어서,
    상기 소프트웨어 애플리케이션은, 상기 프로세싱 수단으로 하여금 상기 무선 통신 로직을 사용하여 상기 신규 펌웨어 모듈을 수신하기 위한 상기 펌웨어 모듈의 명령어를 실행하게 하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  12. 제 3 항 또는 제 4 항에 있어서,
    상기 부트로더 또는 상기 펌웨어 모듈은 원격 디바이스로부터 상기 신규 펌웨어 모듈을 수신하기 위한 명령어를 포함하고, 상기 소프트웨어 애플리케이션은 접속이 끊기면 상기 원격 디바이스와의 무선 접속을 재수립하기 위한 정보를 상기 부트로더로 또는 상기 펌웨어 모듈로 전달하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  13. 제 3 항 또는 제 4 항에 있어서,
    상기 소프트웨어 애플리케이션은 사전결정된 소프트웨어 애플리케이션 메모리 어드레스에 위치되고, 상기 펌웨어 모듈은 상기 사전결정된 소프트웨어 애플리케이션 메모리 어드레스를 사용하여 상기 소프트웨어 애플리케이션으로 인터럽트를 포워딩하도록 구성되는
    집적 회로 무선 통신 디바이스.
  14. 제 3 항 또는 제 4 항에 있어서,
    상기 펌웨어 모듈은 사전결정된 펌웨어 메모리 어드레스에 위치되고, 상기 부트로더는 상기 신규 펌웨어 모듈을 상기 사전결정된 펌웨어 메모리 어드레스로 이동 또는 복사하기 위한 명령어를 포함하는
    집적 회로 무선 통신 디바이스.
  15. 제 3 항 또는 제 4 항에 있어서,
    상기 소프트웨어 애플리케이션 메모리 영역의 코드가 상기 펌웨어 메모리 영역의 어드레스로부터 직접 판독되는 것을 방지하거나, 상기 소프트웨어 애플리케이션 메모리 영역의 코드가 상기 펌웨어 메모리 영역의 어드레스에 직접 기록되는 것을 방지하거나, 또는 상기 소프트웨어 애플리케이션 메모리 영역의 코드가 상기 펌웨어 메모리 영역의 어드레스로부터 직접 실행되는 것을 방지하도록 구성된 메모리 보호 로직을 포함하는
    집적 회로 무선 통신 디바이스.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
KR1020167019679A 2013-12-20 2014-11-26 업데이트가능한 집적 회로 무선장치 KR102277238B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1322797.0 2013-12-20
GB1322797.0A GB2515364B (en) 2013-12-20 2013-12-20 Updatable integrated-circuit radio
PCT/GB2014/053500 WO2015092355A1 (en) 2013-12-20 2014-11-26 Updatable integrated-circuit radio

Publications (2)

Publication Number Publication Date
KR20160100391A KR20160100391A (ko) 2016-08-23
KR102277238B1 true KR102277238B1 (ko) 2021-07-14

Family

ID=50071321

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167019679A KR102277238B1 (ko) 2013-12-20 2014-11-26 업데이트가능한 집적 회로 무선장치

Country Status (8)

Country Link
US (1) US9891908B2 (ko)
EP (1) EP3084593B1 (ko)
JP (1) JP2017504112A (ko)
KR (1) KR102277238B1 (ko)
CN (1) CN105830021B (ko)
GB (1) GB2515364B (ko)
TW (1) TWI625672B (ko)
WO (1) WO2015092355A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2521607B (en) * 2013-12-23 2016-03-23 Nordic Semiconductor Asa Integrated-Circuit Radio
WO2019229091A1 (en) 2018-05-29 2019-12-05 Nordic Semiconductor Asa Delta file with reversing data
JP7206106B2 (ja) * 2018-12-25 2023-01-17 東芝テック株式会社 情報処理装置及びプログラム
JP2020149236A (ja) * 2019-03-12 2020-09-17 キオクシア株式会社 電子機器及び電子機器の制御方法
DE112020001909T5 (de) * 2019-05-28 2022-01-13 Hitachi Astemo, Ltd. Arithmetikverarbeitungsvorrichtung, Fahrzeugsteuervorrichtung und Aktualisierungsverfahren
KR20210023184A (ko) * 2019-08-22 2021-03-04 에스케이하이닉스 주식회사 런타임 오버레이를 통해 펌웨어를 관리하는 장치 및 방법
GB201914047D0 (en) 2019-09-30 2019-11-13 Nordic Semiconductor Asa Bootloader updating
CN111459572B (zh) * 2020-03-31 2023-01-31 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6023620A (en) * 1997-02-26 2000-02-08 Telefonaktiebolaget Lm Ecrisson Method for downloading control software to a cellular telephone
US6275931B1 (en) * 1998-06-22 2001-08-14 Elsag International N.V. Method and apparatus for upgrading firmware boot and main codes in a programmable memory
DE19857921A1 (de) * 1998-12-15 2000-06-29 Siemens Ag Verfahren zur Änderung des Ablaufs eines in einem Festwertspeicher abgelegten Programms
JP3313655B2 (ja) * 1998-12-16 2002-08-12 エヌイーシーネクサソリューションズ株式会社 データ送受信方式、データ送受信方法、および記録媒体
US6640334B1 (en) * 1999-09-27 2003-10-28 Nortel Networks Limited Method and apparatus of remotely updating firmware of a communication device
CA2357382A1 (en) * 2001-09-17 2003-03-17 Soma Networks, Inc. Software update method, apparatus and system
JP2003152629A (ja) * 2001-11-15 2003-05-23 Nec Saitama Ltd 携帯型無線通信装置及び組み込み式ソフトウェアのダウンロード方法
US7188237B2 (en) * 2002-10-29 2007-03-06 Brocade Communication Systems, Inc. Reboot manager usable to change firmware in a high availability single processor system
KR100880783B1 (ko) * 2003-09-03 2009-02-02 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘 피 전자 장치에서의 3-단계 부팅 프로세스
US7185191B2 (en) * 2004-05-05 2007-02-27 International Business Machines Corporation Updatable firmware having boot and/or communication redundancy
JP4826232B2 (ja) * 2005-11-25 2011-11-30 コニカミノルタビジネステクノロジーズ株式会社 情報処理装置およびブートプログラムの書き換え方法
JP4908026B2 (ja) * 2006-03-22 2012-04-04 株式会社東芝 情報処理装置
JP2008027269A (ja) * 2006-07-24 2008-02-07 Matsushita Electric Ind Co Ltd 通信機器およびプログラム更新方法
US20090013317A1 (en) * 2007-02-08 2009-01-08 Airnet Communications Corporation Software Management for Software Defined Radio in a Distributed Network
EP2229625B1 (en) 2007-12-13 2011-08-31 Telefonaktiebolaget LM Ericsson (publ) Updating firmware of an electronic device
US20090254794A1 (en) * 2008-04-04 2009-10-08 Nxp B.V. Method for efficient packet framing in a communication network
US20090274099A1 (en) * 2008-05-02 2009-11-05 Qualcomm Incorporated Methods and apparatus for communicating transmitter information in a communication network
US20090320012A1 (en) * 2008-06-04 2009-12-24 Mediatek Inc. Secure booting for updating firmware over the air
JP5340084B2 (ja) * 2009-08-31 2013-11-13 株式会社ソニー・コンピュータエンタテインメント 無線通信端末、その制御方法、プログラム、及び情報記憶媒体
EP2453352A1 (en) * 2010-11-08 2012-05-16 Gemalto SA Software updating process for an embedded device
GB2499003B (en) * 2012-02-02 2014-01-01 Renesas Mobile Corp Updating modem baseband firmware
KR20130101630A (ko) * 2012-02-16 2013-09-16 삼성전자주식회사 전자장치에서 펌웨어 업데이트를 위한 방법 및 장치
GB2503471B (en) * 2012-06-27 2015-05-06 Nordic Semiconductor Asa Integrated-circuit radio
US9471300B2 (en) * 2012-07-26 2016-10-18 Utc Fire And Security America Corporation, Inc. Wireless firmware upgrades to an alarm security panel
CN103246536B (zh) * 2013-04-28 2016-01-06 常州南京大学高新技术研究院 物联定位系统的固件无线升级方法
US9667074B2 (en) * 2014-03-28 2017-05-30 Symbol Technologies, Llc Apparatus and method for updating remote standalone firmware

Also Published As

Publication number Publication date
US9891908B2 (en) 2018-02-13
JP2017504112A (ja) 2017-02-02
EP3084593A1 (en) 2016-10-26
CN105830021A (zh) 2016-08-03
CN105830021B (zh) 2020-04-03
KR20160100391A (ko) 2016-08-23
GB2515364A (en) 2014-12-24
TWI625672B (zh) 2018-06-01
EP3084593B1 (en) 2020-05-06
WO2015092355A1 (en) 2015-06-25
GB2515364B (en) 2015-06-17
US20160283220A1 (en) 2016-09-29
GB201322797D0 (en) 2014-02-05
TW201525870A (zh) 2015-07-01

Similar Documents

Publication Publication Date Title
KR102277238B1 (ko) 업데이트가능한 집적 회로 무선장치
KR102095614B1 (ko) 메모리 보호
KR101453225B1 (ko) 애플리케이션 배포 시스템, 애플리케이션 배포 방법, 단말 및 프로그램
CN107567629B (zh) 在可信执行环境容器中的动态固件模块加载器
CN111201553B (zh) 一种安全元件及相关设备
US9886408B2 (en) Data access protection for computer systems
US10303861B2 (en) Software diversification in external contexts
US20160196170A1 (en) Integrated-circuit radio
KR102276696B1 (ko) 집적 회로 무선장치
US20220004509A1 (en) Embedded secure element

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant