펌웨어 실행을 중지하지 않고 펌웨어를 업데이트하는 방법

작성자: Bill Giovino

DigiKey 북미 편집자 제공

사물 인터넷(IoT) 센서를 기반으로 하는 응용 분야가 많아지면서 IoT 종단점에서 마이크로 컨트롤러 펌웨어의 크기와 복잡성도 커지고 있습니다. 이 펌웨어는 실행 속도를 높이기 위해 더욱 효율적이어야 하며, 이는 현장에서 펌웨어를 업데이트해야 하는 이유 중 하나입니다. 하지만 현장에서 펌웨어를 안전하게 업데이트하려면 일반적으로 업데이트를 진행하는 동안 펌웨어 실행을 중지해야 합니다. 아키텍처, 업데이트 크기 및 네트워크 속도에 따라 업데이트하는 데 1분이 걸릴 수도 있고 1시간이 걸릴 수도 있습니다. 중요 응용 분야에서는 이러한 지연이 허용되지 않을 수 있습니다.

이 기사에서는 현장의 인터럽트에 기반하여 펌웨어를 업데이트할 때 고려할 사항과 업데이트를 처리하는 동안 응용 제품 펌웨어를 실행 상태로 유지해야 하는 필요성에 대해 설명합니다. 그런 다음 Microchip TechnologyPIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러를 소개하고 이 컨트롤러를 사용하여 펌웨어를 실행 중인 상태에서 네트워크를 통해 업데이트된 펌웨어를 수신할 수 있는 방법을 보여 줍니다.

펌웨어 업데이트의 중요성

펌웨어를 업데이트해야 하는 주요 이유는 코드의 버그 수정, 기능 추가 또는 향상, 시스템 보안 조정, 펌웨어 효율성 증대 네 가지입니다. 코드 효율성은 특정 작업 또는 스레드를 수행하는 데 걸리는 클록 주기 수로 측정됩니다. 작업을 수행하는 데 걸리는 클록 주기 수가 적을수록 코드가 더 효율적입니다. 즉, 실행 속도가 빠르고 일반적으로(항상은 아니지만) 코드 크기가 감소합니다. 응용 분야에서 인터럽트가 발생하고 센서 또는 주변 장치에서 인터럽트가 발생할 때마다 빠르게 상황을 전환해야 하는 IoT 센서 기반 종단점의 경우 특히 그렇습니다.

인터럽트가 발생하는 IoT 응용 분야의 효율성에 영향을 미치는 두 가지 요인은 아키텍처의 효율성과 코드의 효율성입니다. 현장에서 마이크로 컨트롤러의 아키텍처를 변경하는 것은 실용적이지 않지만, 마이크로 컨트롤러 펌웨어를 업데이트하여 효율성을 개선하는 것은 실용적이고 정상적입니다.

센서 기반 펌웨어는 거의 항상 인터럽트에 기반합니다. 마이크로 컨트롤러의 직렬 포트에 연결된 지능형 센서에서 마이크로 컨트롤러에 대한 인터럽트가 발생하여 정상 실행이 중단될 수 있으므로 펌웨어는 해당 센서의 인터럽트 서비스 루틴에 대한 벡터가 될 수 있습니다. 이 센서는 센서 판독 중에 전송할 새 데이터가 있는지 확인하기 위해 주기적으로 폴링해야 하는 센서보다 더 효율적입니다. 인터럽트 기반 센서 전략을 사용하면 수신할 만한 유용한 데이터가 있는 경우에만 마이크로 컨트롤러에서 클록 주기를 사용해 센서를 판독한다는 이점이 있습니다. 폴링 방식에서는 센서 측정값이 업데이트되지 않으므로 펌웨어에서 센서에 액세스하여 취소된 데이터를 판독해야 할 때 클록 주기가 낭비됩니다.

센서 및 작업이 많을수록 관리를 위한 하위 루틴 및 인터럽트 루틴이 많아져서 코드 크기가 증가합니다. 복잡한 코드에서 이러한 개별 작업을 모두 관리하려면 일종의 실시간 운영 체제(RTOS)가 필요합니다. RTOS는 소프트웨어 엔지니어가 작성한 간단한 펌웨어 응용 제품이거나 기성 제품일 수 있습니다. RTOS는 응용 제품을 올바르게 작동하는 데 필요한 시간 내에 개별 작업이 각각 시작되어 완료되는지 확인하기 위해 다양한 펌웨어 작업을 관리합니다. RTOS에서 많은 작업을 관리해야 하는 경우 응용 제품에서 가능한 적은 클록 주기 내에 작업을 마치는 것이 좋습니다. 그러면 다른 작업으로 인해 작업이 지연되는 것을 방지할 수 있습니다.

인터럽트를 수신한 후 인터럽트 서비스 루틴을 완료하는 데 걸리는 시간은 주로 다음 세 가지 요인에 따라 달라집니다.

  1. 인터럽트를 인식하고 인터럽트 서비스 루틴에 대한 벡터를 시작하는 데 필요한 클록 주기. 실행 중인 작업보다 우선순위가 낮은 작업의 경우 현재 작업이 완료될 때까지 지연됩니다. 이는 응용 제품에 따라 다릅니다.
  2. 현재 CPU 상태와 인터럽트 서비스 루틴에 대한 벡터를 저장하는 데 필요한 클록 주기. 이는 아키텍처에 따라 다르며 소프트웨어 엔지니어가 제어할 수 없습니다.
  3. 인터럽트 서비스 루틴을 실행하는 데 필요한 클록 주기. 이는 소프트웨어 엔지니어가 작성한 코드의 복잡성과 효율성 모두에 따라 달라집니다.

펌웨어의 효율성이 우수할수록 특정 기간 내에 완료해야 하는 작업 간에 충돌이 발생할 가능성이 더 적습니다.

플래시 펌웨어 업데이트 메모리 요구 사항

시스템을 현장에서 안정적으로 업데이트해야 하는 경우 응용 제품에서 필요한 것보다 2배 더 많은 플래시 프로그램 메모리를 예상해야 합니다. 플래시 메모리가 기존 플래시 펌웨어와 업데이트된 펌웨어를 모두 포함할 정도로 충분히 커야 하기 때문입니다. 하지만 내부 플래시 프로그램 메모리에서만 실행되는 소형 시스템에서는 네트워크를 통해 펌웨어 업데이트를 수신하는 동안 코드 실행을 중지하는 것이 일반적입니다. 이는 핵심 응용 분야에서는 허용되지 않으며 효율적인 펌웨어 목표에 반하는 것입니다. 즉, 중지되는 코드는 0% 효율성으로 실행됩니다.

플래시 업데이트 중 펌웨어 실행

Microchip Technology PIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러는 온칩 플래시 메모리를 업데이트하는 동안 펌웨어를 실행할 수 있는 고성능 마이크로 컨트롤러입니다(그림 1). PIC32MZ2048EFH144T-I/PH는 복잡한 인터럽트 기반 IoT 종단점을 대상으로 하는 부동 소수점 처리 장치(FPU)를 탑재한 MIPS32 M 클래스 코어 아키텍처를 기반으로 합니다. 이 장치에는 프로그램 메모리 2MB와 SRAM 512KB가 장착되어 있습니다. 또한 부팅 플래시 160KB가 포함되어 있습니다. PIC32MZ2048EFH144T-I/PH 코어는 -40°C ~ +85°C 온도 범위에서 252MHz, -40°C ~ +125°C 온도 범위에서 180MHz 속도로 실행할 수 있습니다. 작동 전압은 2.1V ~ 3.6V에 불과합니다.

9개의 32비트 캡처/비교 타이머를 탑재하여 복잡한 펌웨어뿐만 아니라 외부 신호 측정도 지원합니다.

Microchip Technology의 PIC32MZ2048EFH144T-I/PH 구성도그림 1: 252MHz Microchip Technology PIC32MZ2048EFH144T-I/PH는 MIPS32 M 클래스 아키텍처를 기반으로 하며 외부 센서에 연결하기 위한 광범위한 직렬 포트를 갖추고 있습니다. (이미지 출처: Microchip Technology)

외부 직렬 포트에는 9개의 UART 포트와 5개의 I2C 포트가 포함되어 있습니다. 또한 오디오 I2S 인터페이스를 지원하는 6개의 SPI 포트가 있습니다. 48개 입력을 지원하는 12비트 아날로그 디지털 컨버터(ADC)는 정밀한 아날로그 센서에서 전압을 측정할 수 있습니다. 많은 직렬 포트와 ADC 입력을 통해 PIC32MZ2048EFH144T-I/PH는 많은 외부 센서에 연결할 수 있으므로 복잡한 센서 기반 IoT 종단점에 적합합니다. 두 CAN 2.0b 포트를 사용하면 마이크로 컨트롤러에서 일반 CAN 프로토콜을 사용하는 산업 및 자동차 네트워크에 연결할 수 있습니다.

이더넷 포트는 10/100Base-T 네트워킹을 지원합니다. USB 2.0 고속 컨트롤러는 추가 주변 장치 또는 디버깅을 위한 외부 인터페이스와 USB OTG(On-The-Go)를 지원합니다.

각 주변 장치에서 하나 이상의 인터럽트를 생성할 수 있습니다. 많은 센서 및 인터럽트 소스로 인해 코드 효율성을 유지하는 것이 필수적입니다.

효율성을 개선하기 위해 MIPS32 M 클래스 CPU 코어에 32개의 32비트 범용 레지스터(GPR)를 탑재했습니다. 그 결과 외부 메모리에 대한 액세스가 감소하여 효율성이 향상됩니다. 유용한 비트 세트와 명확한 명령 이외에 M 클래스는 단일 주기의 비트 인버터 명령을 지원합니다. 이로 인해 세마포 처리 효율성이 향상되어 RTOS 효율성이 개선됩니다. 또한 코어에는 더 많은 단일 주기 명령을 생성하여 메모리 액세스 충돌을 최소화함으로써 효율성을 개선하는 5단계 명령 파이프라인이 탑재되어 있습니다.

또한 MIPS32 M 클래스에는 7개의 GPR 섀도 레지스터 세트가 있습니다. 이로 인해 스택에서 GPR을 저장하는 데 필요한 클록 주기가 많이 해소되어 인터럽트 성능과 컨텍스트 전환이 크게 향상됩니다. 7개 섀도 레지스터 세트를 지원하여 코어에서 스택에 GPR을 저장하는 데 클록 주기를 소비하기 전에 인터럽트 및 컨텍스트 전환을 7단 깊이로 중첩시킬 수 있습니다.

PIC32MZ2048EFH144T-I/PH에는 두 개의 1Mb 프로그램 플래시 메모리(PFM) 뱅크(지정된 PFM 뱅크 1 및 PFM 뱅크 2)가 있습니다. 각 PFM에는 고유한 전용 부팅 플래시 메모리(BFM) 지정 BFM 뱅크 1 및 BFM 뱅크 2가 있습니다. PFM 업데이트 중에 BFM을 업데이트할 필요가 없습니다. 이 두 개별 메모리 뱅크는 다양한 이점을 제공합니다. 예를 들어 마이크로 컨트롤러에서 이중 부팅을 지원하므로, 전원을 켤 때 플래시 메모리 뱅크에서 부팅하도록 구성할 수 있습니다. 따라서 마이크로 컨트롤러에서 두 가지 장치 구성을 지원할 수 있습니다.

또한 두 개의 플래시 뱅크를 사용하면 한 플래시 뱅크에서 펌웨어를 업데이트하는 동안 다른 플래시 뱅크에서 펌웨어를 실행할 수 있다는 추가적인 이점이 있습니다. Microchip에서는 이를 라이브 업데이트라고 하며 실시간 자체 프로그래밍(RTSP)이라고도 합니다. PFM 뱅크 1에서 펌웨어를 실행하는 활성 IoT 종단점에서 RTSP가 시작되는 경우 네트워크를 통해 블록에 펌웨어를 수신합니다. 네트워크를 통해 펌웨어 업데이트를 관리하려면 SRAM에 새 펌웨어 블록을 저장하는 것이 좋습니다. 전체 블록을 수신한 이후에 PFM 뱅크 1에서 실행되는 펌웨어는 SRAM 데이터의 프로그래밍 시퀀스를 PFM 뱅크 2에서 시작할 수 있습니다. 이 펌웨어가 프로그래밍되는 동안 PFM 뱅크 1에서 펌웨어를 계속 실행할 수 있습니다.

블록 프로그래밍이 완료되면 펌웨어는 네트워크를 통해 다음 코드 블록을 요청할 수 있으며 시퀀스가 반복됩니다. 이 과정은 PFM 뱅크 2에서 코드 블록이 완료될 때까지 계속됩니다. 프로그래밍이 완료되면 펌웨어에서는 NVMCON 구성 레지스터에서 SWAP 비트를 지워서 다음 리셋 시 BFM 뱅크 2에서 부팅하고 PFM 뱅크 2에서 새 펌웨어를 실행하도록 PIC32MZ2048EFH144T-I/PH를 구성할 수 있습니다(그림 2). SWAP=0일 때 PIC32MZ2048EFH144T-I/PH 펌웨어를 업데이트해야 하는 경우 PFM 뱅크 1을 업데이트하는 동안 PFM 뱅크 2에서 펌웨어를 실행할 수 있습니다.

Microchip의 PIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러 구성도그림 2: PIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러에는 두 개의 독립 PFM 뱅크가 있습니다. SWAP=1이면 PFM 뱅크 2를 업데이트하는 동안 PFM 뱅크 1에서 펌웨어를 실행할 수 있습니다. SWAP=0을 지우면 PFM 뱅크 2에서 마이크로 컨트롤러를 부팅할 수 있습니다. (이미지 출처: Microchip Technology)

펌웨어의 요구 사항에 따라 BFM 또는 PFM에서 SWAP 비트의 상태가 변경될 수 있습니다.

이중 부팅 펌웨어 개발

PIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러로 개발하기 위해 Microchip Technology는 DM320007 PIC32MZ 시험용 키트를 제공합니다(그림 3). 이 기판은 전용 커넥터와 헤더 커넥터를 사용하여 여러 직렬 포트를 지원합니다. USB 호스트 포트는 디버깅에 사용되며 USB OTG 포트는 응용 제품에 사용할 수 있습니다. USB-to-UART/I2C 커넥터를 PC USB 포트에 연결하면 연결된 호스트 PC에 가상 COM 포트가 생성됩니다. 이 포트를 통해 호스트 PC에서 PIC32MZ의 I2C 포트와 통신할 수 있습니다.

Microchip Technology의 DM320007 콤팩트 시험용 키트 이미지그림 3: Microchip Technology DM320007 콤팩트 시험용 키트는 PIC32MZ2048EFH144T-I/PH 마이크로 컨트롤러를 통한 USB 및 이더넷 응용 제품 개발 및 테스트를 지원합니다. USB OTG, USB 호스트, 10/100 이더넷 및 UART/I2C용 커넥터가 키트에 포함되어 있습니다. (이미지 출처: Microchip Technology)

40핀 확장 헤더 커넥터를 사용하여 PIC32MZ EF의 범용 I/O(GPIO) 핀과 추가 I2C, SPI 및 UART 포트에 액세스할 수 있습니다. 펌웨어를 통해 구성할 수 있는 세 개의 푸시 버튼과 세 개의 LED가 있습니다.

결론

중요 시스템의 IoT 센서 종단점은 코드 복잡성 증가로 인해 메모리 요구 사항이 매우 까다롭습니다. 코드가 복잡할수록 펌웨어에서 컨텍스트 전환 응답 시간을 개선하기 위해 펌웨어 효율성을 개선할 필요성이 커집니다. 개발자는 펌웨어를 동시에 수신하고 업데이트할 수 있는 인터럽트 기반 코드를 효과적으로 실행할 수 있는 마이크로 컨트롤러를 선택하여 성능에 영향을 주지 않으면서 중요 IoT 응용 제품의 신뢰성을 높일 수 있습니다.

DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

작성자 정보

Image of Bill Giovino

Bill Giovino

Bill Giovino는 시러큐스 대학(Syracuse University)에서 전자 공학 학위를 취득한 전자 엔지니어이며, 설계 엔지니어링에서 현장 애플리케이션 엔지니어링은 물론 기술 마케팅에 이르기까지 바로 투입 가능한 몇 안 되는 실력자 중 하나입니다.

Bill은 25년 이상 STMicroelectronics, Intel, Maxim Integrated를 비롯한 다양한 회사의 기술 및 비기술 담당자를 대상으로 신기술을 홍보해 왔습니다. STMicroelectronics 재직 중 Bill은 마이크로 컨트롤러 업계에서 회사의 초기 입지를 다지는 데 공헌했습니다. Infineon에서는 미국 자동차 업계에서 회사 최초로 마이크로 컨트롤러 설계를 성공으로 이끌어 내는 역할을 했습니다. Bill은 직접 설립한 CPU Technologies의 마케팅 컨설턴트로 일하면서, 많은 업체들이 실적이 저조한 제품의 실적을 개선하는 데 도움을 주고 있습니다.

Bill은 최초의 전체 TCP/IP 스택을 마이크로 컨트롤러에 배치하는 것을 비롯하여 사물 인터넷을 조기에 수용한 바 있습니다. Bill은 '교육을 통한 판매'라는 메시지와 온라인을 통한 제품 홍보에 있어 커져 가는 명확하고 분명한 의사 소통의 중요성 전달에 전념하고 있습니다. Bill은 LinkedIn의 인기 그룹인 Semiconductor Sales & Marketing Group의 중재자이며, B2E에 유창합니다.

게시자 정보

DigiKey 북미 편집자