면역 인식 프로그래밍

Immunity-aware programming

임베디드 시스템의 펌웨어를 기술할 때, 내성 인식 프로그래밍은 프로그램 카운터 또는 기타 프로그램 모듈의 일시적인 오류 허용도를 향상시키는 프로그래밍 기술을 말합니다.일시적 오류는 일반적으로 단일 이벤트 업셋, 전력 부족 또는 다른 "소스" 장치에서 전송되는 강력한 전자파 신호에 의해 발생합니다.

면역 인식 프로그래밍은 방어 프로그래밍EMC 인식 프로그래밍의 한 예입니다.이러한 기법의 대부분은, 「피해자」디바이스의 소프트웨어에 적용되어 신뢰성이 향상됩니다만, 이러한 기법의 일부는, 불필요한 노이즈의 발생을 억제하기 위해서 「소스」디바이스의 소프트웨어에 적용됩니다.

작업 및 목표

마이크로컨트롤러펌웨어는 임베디드 시스템전자파 호환성을 저렴하게 향상시킬 수 있습니다.

임베디드 시스템펌웨어는 보통 무선주파수 간섭의 원인으로 간주되지 않습니다.무선 방출은 종종 시스템 클럭의 고조파 주파수와 스위칭 전류에 의해 발생합니다.이러한 와이어의 펄스는 상승 및 하강 시간이 빠를 수 있으므로 와이어가 무선 송신기 역할을 합니다.이 효과는 설계가 불량한 프린트 기판에 의해 증대됩니다.이러한 영향은 상승 시간이 느린 마이크로 컨트롤러 출력 드라이버를 사용하거나 시스템 구성 요소를 끄면 줄어듭니다.

마이크로컨트롤러는 제어가 용이합니다.또, 무선 주파수 간섭에 의한 장해에도 영향을 받기 쉽습니다.따라서 마이크로컨트롤러의 소프트웨어가 이러한 오류에 저항하도록 하면 하드웨어 변경의 필요성을 줄임으로써 전자파 간섭에 대한 시스템의 내성을 저렴하게 개선할 수 있습니다.

마이크로컨트롤러 기반 시스템의 간섭 가능성

CMOS 마이크로컨트롤러에는 전자파 간섭에 대응하는 소프트웨어로 강화할 수 있는 특정 약점이 있습니다.시스템 및 해당 요건의 고장 모드영향 분석이 종종 필요합니다.이러한 분석에는 전자파 적합성 문제가 쉽게 추가될 수 있다.

전원 장치

전원 전압의 느린 변화는 큰 장애를 일으키지는 않지만, 급격한 변화는 예측할 수 없는 문제를 일으킬 수 있습니다.전압이 컨트롤러 데이터 시트의 파라미터를 150% 초과하면 입력 포트 또는 출력 포트가 CMOS [1]래치업이라는1가지 상태로 행업할 수 있습니다.내부 전류 제어가 없을 경우 래치업에 의해 마이크로 컨트롤러가 연소됩니다.표준 솔루션은 소프트웨어와 하드웨어의 변경을 혼합한 것입니다.대부분의 임베디드 시스템에는 워치독타이머가 있어요이 워치독은 마이크로컨트롤러 외부에 있어야 합니다.그러면 전자파 간섭에 대한 내성이 생깁니다.전원장치를 리셋하고 잠시 꺼야 합니다.워치독 기간은 마이크로컨트롤러를 소모하는 데 필요한 시간과 전력의 절반 이하로 해야 합니다.전원장치의 설계는 마이크로컨트롤러에 가까운 콘덴서와 인덕터를 사용하여 적절히 접지하고 분리해야 합니다.일반적인 값은 100uF와 0.1uF입니다.

저전력으로 인해 대부분의 마이크로 컨트롤러에서 심각한 오작동이 발생할 수 있습니다.CPU가 명령을 성공적으로 디코딩하고 실행하려면 제공된 전압이 최소 전압 레벨 아래로 떨어지지 않아야 합니다.공급 전압이 이 레벨 아래로 떨어지면 CPU가 일부 명령을 잘못 실행하기 시작할 수 있습니다.그 결과 내부 데이터 및 컨트롤 라인에서 예기치 않은 액티비티가 발생합니다.이 액티비티의 원인은 다음과 같습니다.

  • CPU 레지스터 파손
  • I/O 레지스터가 파손
  • I/O 핀 랜덤 토글
  • SRAM 파손
  • EEPROM 파손

전력 공급을 신뢰할 수 없을 때 시스템이 셧다운되므로 대부분의 시스템에서 이러한 문제가 해결됩니다.하나의 일반적인 시스템은 AC 주 전압이 정격 전압의 90%를 초과할 때마다 타이머를 다시 트리거합니다.타이머가 만료되면 마이크로컨트롤러가 중단되고 시스템이 셧다운됩니다.또, 많은 시스템에서는, 전원 장치의 열화가 늦어지는 것을 막기 위해서, 전원 장치의 전압을 측정합니다.

발진기

CMOS 발진기의 입력 포트는 임피던스가 높기 때문에 일시적인 장애에 매우 취약합니다.옴의 법칙에 따르면 높은 임피던스는 높은 전압 차이를 일으킵니다.또한 습기나 먼지로 인한 단락에도 매우 민감합니다.

대표적인 장애 중 하나는 발진기의 안정성에 영향을 미치는 것입니다.이것에 의해, 이 기능이 정지하거나, 그 기간이 변경되는 일이 있습니다.일반적인 시스템 헤지에서는 인버터 링이나 저항 캐패시터 원샷 타이머와 같은 값싸고 강력한 방식을 사용하는 보조 오실레이터가 있어야 합니다.재설정 후(아마도 워치독 타이머에 의해 발생) 시스템은 이러한 설정으로 기본 전환될 수 있으며, 타이밍 측정에서 안정성이 입증된 후에만 민감 수정 오실레이터로 전환됩니다.또한 신뢰성이 높은 시스템에서는 일반적으로 통신 클럭, 전원 라인 또는 저항 캐패시터 타이머와 같은 외부 표준과 비교하여 클럭 주파수를 측정하는 것이 일반적입니다.

전자파 간섭의 버스트는 클럭 주기를 단축하거나 런트 펄스를 일으켜 잘못된 데이터 액세스 또는 명령 실행을 초래할 수 있습니다.그 결과 메모리 내용 또는 프로그램 포인터가 잘못되어 있습니다.하드웨어에서 이를 극복하는 표준 방법은 마이크로컨트롤러의 실제 클럭 신호를 생성하기 위해 온칩 위상 잠금 루프를 사용하는 것입니다.소프트웨어는 정기적으로 데이터 구조를 검증하고 중요한 포트를 읽을 수 있으며, 투표를 통해 읽기를 시공간으로 분산시킬 수 있습니다.

입출력 포트

주소 회선과 데이터 회선을 포함한 입력/출력 포토는, 장척 회선 또는 외부 페리페럴에 의해서 접속되는 안테나입니다.전자파 간섭에 의해, 이러한 회선의 데이터와 주소가 잘못되는 일이 있습니다.큰 변동으로 인해 컴퓨터가 I/O 레지스터를 잘못 읽거나 이러한 포트와의 통신이 중단될 수 있습니다.정전기 방전은 실제로 포트를 파괴하거나 오작동을 일으킬 수 있습니다.

대부분의 마이크로컨트롤러의 핀은 고임피던스 입력 또는 입력과 출력이 혼합되어 있습니다.고임피던스 입력 핀은 노이즈에 민감하며 올바르게 종단되지 않으면 잘못된 레벨을 등록할 수 있습니다.IC 내부에서 종단되지 않은 핀은 저항을 연결해야 합니다.이들은 접지 또는 공급장치에 접속하여 기존의 논리상태를 확보해야 합니다.

원인과 결과의 수치.원인을 밝혀야 문제를 해결할 수 있습니다.

시정 조치

수정 전에 발생할 수 있는 오류에 대한 분석이 매우 중요합니다.원인을 밝혀야 문제를 해결할 수 있습니다.

자동차 산업 소프트웨어 신뢰성 협회는 다음[2]같이 오류 발생 시 필요한 단계를 식별합니다.

  • 사용자에게 정보/경고
  • 정의된 재설정을 수행할 수 있을 때까지 고장 데이터를 저장합니다.
  • 오류를 수정할 수 있을 때까지 시스템을 정의된 상태로 유지합니다.

기본적으로 장황성을 사용하여 장애에 대응합니다.여기에는 추가 코드 실행(시간 내 용장성)과 추가 비트 유지(공간 내 용장성)가 포함됩니다.

명령 포인터(IP) 오류 관리

명령 포인터가 흐트러지면 메모리 내의 임의의 포인트로의 정의되지 않은 점프와 같은 심각한 오류가 발생할 수 있습니다.시스템 상태는 정의되지 않습니다.IP 오류는 함수 토큰이나 NOP 슬라이드 등의 소프트웨어 기반 솔루션을 사용하여 처리할 수 있습니다.

Motorola 680x0과 같은 많은 프로세서는 불법 명령이 발생했을 때 하드웨어 트랩 기능을 갖추고 있습니다.트랩 벡터에 정의되어 있는 올바른 명령이 랜덤 명령어가 아닌 실행된다.트랩은 함수 토큰 및 NOP 슬라이드보다 더 큰 범위의 오류를 처리할 수 있습니다.부정한 명령의 보충으로서 하드웨어 트랩은 메모리액세스 위반, 오버플로, 또는 제로 분할을 안전하게 처리합니다.

토큰 전달(함수 토큰)

실행 흐름 제어로 전달되는 토큰
C 소스: 글로벌 함수 ID로 토큰이 전달됩니다.

토큰 패스라고 하는 플로우 제어를 실행함으로써 노이즈 내성 향상을 실현할 수 있습니다.오른쪽 그림은 기능 원리를 도식적으로 보여줍니다.이 메서드는 명령 포인터로 인해 발생하는 프로그램 흐름 오류를 처리합니다.

구현은 단순하고 효율적입니다.모든 함수에는 고유한 함수 ID가 태그로 지정됩니다.함수가 호출되면 함수 ID가 글로벌 변수에 저장됩니다.글로벌 변수의 함수 ID와 함수의 ID가 일치하는 경우에만 함수가 실행됩니다.ID가 일치하지 않으면 명령 포인터 오류가 발생하여 특정 수정 조치를 취할 수 있습니다.C에 프로그램된 글로벌 변수를 사용한 토큰 패스의 실시 예는 다음 소스 리스트에 기재되어 있다.

이는 기본적으로 모든 함수 호출에 대해 "팔/파이어" 시퀀싱입니다.이러한 시퀀스를 요구하는 것은 단일 비트(또는 이 경우 부동 명령 포인터) 장애에 대한 내성을 생성하기 때문에 안전한 프로그래밍 기술의 일부입니다.

함수 토큰을 구현하면 프로그램 코드 크기가 10~20% 증가하여 성능이 저하됩니다.구현을 개선하기 위해 위와 같은 글로벌 변수 대신 아래 코드 샘플과 같이 함수 헤더 내에서 함수 ID를 인수로 전달할 수 있습니다.

C 소스: 함수 파라미터와 함께 토큰 전달

NOP 슬라이드

NOP-Fills를 사용하면 명령 포인터가 교란되었을 때 시스템의 신뢰성이 향상될 수 있습니다.프로그램 코드에 의해 사용되지 않는 전체 프로그램 메모리는 NOP(No-Operation) 명령으로 채워집니다.기계코드에서는 NOP 명령어는 보통 0x00 (인텔 8051, ATmega16 등)으로 표시됩니다.시스템은 정의된 상태로 유지됩니다.물리적인 프로그램메모리의 마지막에 명령 포인터 에러 처리(IPEH IP-Error-Handler)를 실장할 필요가 있습니다.경우에 따라서는, 간단하게 리셋 할 수 있습니다.

실행 중에 명령 포인터 오류가 발생하여 프로그램이 NOP 명령으로 채워진 메모리 세그먼트를 가리킬 경우 불가피하게 오류가 발생하여 인식된다.

NOP-Fills를 구현하는 방법에는 다음 3가지가 있습니다.

  • 첫 번째 방법에서는 사용되지 않는 물리 메모리를 (HEX) 프로그램 파일에서 검색 및 치환함으로써 수동으로 0x00으로 설정한다.이 방법의 단점은 컴파일할 때마다 이 작업을 수행해야 한다는 것입니다.
코드, NOP 및 오류 핸들러로 채워진 프로그램 메모리
  • 두 번째 방법에서는 사용되지 않는 메모리 영역을 사전 정의된 상수(이 경우 0x00)로 채우는 링커의 채우기 옵션을 사용합니다.
  • 세 번째 방법은 프로그램 코드에 NOP 어셈블러 디렉티브의 수를 직접 포함하는 것입니다.

코드비전 사용 시AVR C 컴파일러, NOP fill은 쉽게 구현할 수 있습니다.칩 프로그래머는 프로그램플래시EEPROM을 편집하여 특정 값으로 채우는 기능을 제공합니다.Atmel ATmega16을 사용하면 명령 포인터의 오버플로가 자동으로 0x00으로 설정되므로 주소 0x00을 리셋하기 위한 점프를 구현할 필요가 없습니다.유감스럽게도 오버플로에 의한 리셋은 의도적인 리셋과 동등하지 않습니다.의도된 리셋 중에 필요한 MC 레지스터는 모두 하드웨어에 의해 리셋됩니다.이는 0x00으로 점프하여 리셋되지 않습니다.따라서 이 방법은 다음 테스트에서는 적용되지 않습니다.

함수 토큰과 NOP 필링 양쪽 구현 전후의 메모리

I/O 레지스터 오류

마이크로컨트롤러 아키텍처에서는 I/O 리드를 실리콘 다이의 바깥쪽 가장자리에 배치해야 합니다.따라서 I/O 접점은 실리콘 코어로 이동하는 과정에서 발생하는 일시적인 장애의 영향을 크게 받으며, I/O 레지스터는 마이크로 컨트롤러에서 가장 취약한 부분 중 하나입니다.I/O 레지스터를 잘못 읽으면 시스템 상태가 잘못될 수 있습니다.리셋 포트 및 인터럽트 입력 포트에서 가장 심각한 오류가 발생할 수 있습니다.교란된 데이터 방향 레지스터(DDR)에 의해 버스에 쓰기가 금지될 수 있습니다.

이러한 장애는 다음과 같이 방지할 수 있습니다.

(1) 가장 중요한 레지스터의 주기적인 갱신

가장 중요한 레지스터와 데이터 방향의 데이터를 가능한 한 짧은 간격으로 주기적으로 갱신함으로써 오류를 줄일 수 있다.따라서 잘못 설정된 비트는 부정적인 영향을 미치기 전에 수정할 수 있습니다.

(2) 입력 레지스터의 다중 판독

장애 필터링의 또 다른 방법은 입력 레지스터의 다중 읽기이다.그런 다음 읽기 값의 일관성이 검사됩니다.값이 일치하면 유효한 것으로 간주할 수 있습니다.값 범위의 정의 및/또는 평균값의 계산은 일부 응용 프로그램의 결과를 개선할 수 있습니다.
부작용: 활동량 증가
단점은 주변기기의 영구적인 업데이트와 판독으로 인해 액티비티가 증가한다는 것입니다.이 액티비티에서는, 배출이나 장해가 추가되는 일이 있습니다.
외부 인터럽트 포트, 스택오버플로우
외부 인터럽트는 인터럽트 포트의 하강/상승 에지 또는 하이/로우 전위에 의해 트리거되어 컨트롤러에 인터럽트 요구(IRQ)가 발생합니다.하드웨어 인터럽트는 마스크 가능한 인터럽트와 Non-Maskable Interrupts(NMI; 비마스크 가능 인터럽트)로 나뉩니다.일부 시간 크리티컬 기능에서는 마스크 가능한 인터럽트의 트리거링을 중지할 수 있습니다.인터럽트가 호출되면 현재 명령 포인터(IP)가 스택에 저장되고 스택 포인터(SP)가 감소합니다.Interrupt Service Routine(ISR; 인터럽트서비스 루틴)의 주소는 인터럽트 벡터테이블에서 읽혀져 IP 레지스터에 로드되고 그 결과 ISR이 실행됩니다.
장애에 의한 인터럽트가 처리되는 것보다 빨리 생성되면 모든 메모리가 사용될 때까지 스택이 커집니다.스택의 데이터 또는 다른 데이터를 덮어쓸 수 있습니다.방어적인 소프트웨어 전략을 적용할 수 있습니다.스택 포인터(SP)를 감시할 수 있습니다.그러면 정의된 주소를 초과하는 스택 증가를 중지할 수 있습니다.스택 포인터의 값은 인터럽트 서비스 루틴 시작 시 확인할 수 있습니다.SP가 정의된 스택 한계 밖의 주소를 가리키면 리셋을 실행할 수 있습니다.

데이터의 용장성

에러 검출 및 수정 유닛이 없는 시스템에서는 소프트웨어를 통한 보호를 제공함으로써 시스템의 신뢰성을 향상시킬 수 있습니다.메모리 전체(코드 및 데이터)를 보호하는 것은 허용할 수 없는 양의 오버헤드를 일으키기 때문에 소프트웨어에서는 실용적이지 않을 수 있지만, 코드 세그먼트에 대해 소프트웨어가 구현한 저비용 솔루션입니다.

디지털 시스템의 또 다른 기본 요구사항은 데이터의 무장애 전송입니다.다른 컴포넌트와의 통신은 시스템의 약점이자 오류의 원인이 될 수 있습니다.잘 고안된 전송 프로토콜은 매우 중요합니다.다음에 설명하는 기술은 전송되는 데이터에도 적용될 수 있으므로 전송 신뢰성이 높아집니다.

주기적 용장성 및 패리티 체크

순환 용장성 검사체크섬을 생성하는 데 사용되는 해시 함수의 한 유형입니다. 체크섬은 네트워크 트래픽이나 컴퓨터 파일과 같은 큰 데이터 블록에서 작은 정수입니다.CRC는 전송 또는 복제 전후에 계산되어 동일함을 확인합니다.CRC는 모든 1비트 또는2비트 오류, 모든 홀수 오류, 버스트가 CRC보다 작을 경우 모든 버스트 오류 및 대부분의 와이드 버스트 오류를 검출합니다.패리티 체크는 단일 문자(VRC:수직 용장성 체크)에 적용할 수 있습니다.그 결과 패리티 비트가 추가되거나 데이터 블록(LRC:종방향 용장성 체크)이 생성되어 블록체크 문자가 발행됩니다.두 방법 모두 XOR 연산을 사용하여 비교적 쉽게 구현할 수 있습니다.단점은 CRC보다 검출되는 에러가 적다는 것입니다.패리티 검사는 플립된 비트의 홀수 개수만 탐지합니다.짝수 비트 오류는 검출되지 않습니다.개선될 수 있는 것은 VRC와 LRC를 모두 사용하는 것입니다.이것에 의해, Double Parity 또는 ORC라고 부릅니다.

일부 마이크로 컨트롤러는 하드웨어 CRC 장치를 갖추고 있습니다.

다른 종류의 복제

데이터 용장성의 구체적인 방법은 복제입니다.복제는 다음과 같이 여러 가지 방법으로 적용할 수 있습니다.

  • 데이터 복제
데이터 손상에 대처하기 위해 중요한 레지스터와 변수의 복사본을 여러 개 저장할 수 있습니다.데이터 액세스 시 동일한 값 또는 투표 기법을 저장하는 메모리 위치 간의 일관성 검사를 수행할 수 있습니다.
소스 코드에 대해 두 가지 다른 수정 사항을 구현해야 합니다.
  • 첫 번째 방법은 프로그램 변수의 일부 또는 전부를 복제하여 데이터의 용장성을 도입하고 모든 연산자를 수정하여 변수의 도입된 복제본을 관리하는 것입니다.
  • 두 번째 변경에서는 각 변수의 두 복사본 간의 일관성이 검증되도록 제어 흐름에 일관성 검사가 도입됩니다.

데이터를 읽을 때 두 데이터 세트를 비교합니다.두 데이터 세트가 동일하지 않은 경우 장애가 검출됩니다.에러가 보고될 수 있다.두 데이터 세트가 모두 손상되면 중대한 오류가 보고되고 시스템이 그에 따라 반응할 수 있습니다.

대부분의 경우 안전에 중요한 애플리케이션은 메모리 점유율 및 시스템 성능 측면에서 엄격한 제약을 받습니다.모든 읽기 작업 전에 전체 변수 세트를 복제하고 일관성 검사를 도입하는 것은 결함 적용 범위의 관점에서 최적의 선택입니다.변수 세트 전체를 복제하면 이 소프트웨어의 용장성 기술로 장애의 비율을 크게 높일 수 있습니다.한편, 낮은 비율의 변수를 복제하는 것으로, 취득한 장해 커버리지와 CPU 타임 오버헤드를 교환할 수 있습니다.

CPU 시간 오버헤드와 중복 변수의 양에 대한 실험적 분석

실험 결과에 따르면 변수의 50%만 복제하면 CPU 시간 오버헤드가 28%에 불과한 장애의 85%를 처리할 수 있습니다.

일관성 검사는 보통 각 읽기 작업 후 또는 각 변수의 수명 기간이 끝날 때 수행되므로 일관성 검사 구현에도 주의해야 한다.이 체크를 신중하게 구현하면 이 애플리케이션의 CPU 시간과 코드 크기를 최소화할 수 있습니다.

C 샘플 코드: 함수 파라미터 중복
C 샘플 코드: 시험 조건의 중복
  • 함수 매개 변수 복제

데이터 오류 검출은 모든 변수를 복제하고 읽기 작업 후 일관성 검사를 추가함으로써 이루어지므로 절차 인터페이스에 따라 특별한 고려사항을 적용해야 한다.프로시저에 전달된 파라미터와 반환값은 변수로 간주됩니다.따라서 모든 프로시저 파라미터와 반환값이 중복됩니다.프로시저는 여전히 한 번만 호출되지만 두 개의 결과를 반환합니다. 두 결과는 동일한 값을 유지해야 합니다.오른쪽에 있는 소스 목록은 함수 매개 변수 복제의 구현 예를 보여 줍니다.

  • 테스트 복제

테스트를 복제하는 것은 일반적인 소프트웨어 오류 검출에 존재하는 가장 견고한 방법 중 하나입니다.단점은 오류의 원인(EMI, ESD 등)이나 예상되는 오류 유형(제어 흐름에 영향을 주는 오류, 데이터에 영향을 주는 오류 등)에 대해 엄밀한 가정을 할 수 없다는 것입니다.메모리, 캐시, 레지스터 또는 버스에 저장되는 동안 데이터 바이트 단위의 잘못된 비트 변화가 알려져 있습니다.이러한 데이터 바이트는 동작 코드(명령), 메모리 주소 또는 데이터일 수 있습니다.따라서 이 방법은 광범위한 장애를 검출할 수 있으며 특정 장애 모델에 국한되지 않습니다.이 방법을 사용하면 메모리가 약 4배 증가하며 테스트 복제 없이 동일한 프로그램을 실행하는 데 걸리는 시간은 약 2.5배입니다.오른쪽에 있는 소스 목록은 테스트 조건의 중복 구현 예를 보여 줍니다.

  • 분기 복제
분기 복제

하나의 조건을 교차 체크하는 테스트 복제와 분기 복제와 비교하면 조건이 중복됩니다.

프로그램의 모든 조건부 테스트에 대해 그림과 같이 조건과 그에 따른 점프를 재평가해야 한다.조건이 다시 충족된 경우에만 점프가 실행됩니다. 그렇지 않으면 오류가 발생한 것입니다.

  • 명령의 중복과 구현의 다양성

계산된 결과가 올바르지 않을 때 데이터, 테스트 및 분기가 중복되면 어떤 이점이 있습니까?한 가지 솔루션은 명령을 완전히 복제하지만 다른 방식으로 구현하는 것입니다.따라서 동일한 기능을 가지고 있지만 데이터 집합과 구현이 서로 다른 두 개의 다른 프로그램이 실행됩니다.이들 출력은 비교되며 동일해야 합니다.이 방법은 비트 플립이나 프로세서 장애뿐만 아니라 프로그래밍 오류(버그)도 포함합니다.특히 하드웨어(CPU) 장애를 처리하기 위한 것이라면 소프트웨어는 하드웨어의 다른 부분을 사용하여 구현할 수 있습니다.예를 들어, 한쪽 구현에서는 하드웨어의 멀티플을 사용하고 다른 한쪽 구현에서는 이행 또는 추가를 통해 멀티플을 사용합니다.이로 인해 상당한 오버헤드가 발생합니다(코드 크기에 대해 2배 이상).반면 결과는 매우 정확하다.

포트

포트 리셋 및 인터럽트 포트

리셋 포트 및 인터럽트는 인터럽트 포트의 상승/하강 에지 또는 하이/로우 전위에 의해 트리거될 수 있으므로 매우 중요합니다.일시적인 장애로 인해 원치 않는 리셋 또는 인터럽트가 발생하여 시스템 전체가 크래쉬할 수 있습니다.트리거된 인터럽트마다 명령 포인터는 스택에 저장되고 스택 포인터는 감소합니다.

에지 트리거 인터럽트의 을 줄이려고 합니다.레벨만으로 인터럽트를 트리거할 수 있는 경우 인터럽트 핀의 노이즈가 바람직하지 않은 동작을 일으키지 않도록 하는 데 도움이 됩니다.레벨이 높은 상태로 유지되는 한 레벨 트리거 인터럽트가 반복될 수 있다는 점에 유의해야 합니다.실장에서는, 이 특성을 고려할 필요가 있습니다.반복적인 불필요한 인터럽트를 ISR로 디세블로 할 필요가 있습니다.이것이 불가능할 경우 에지 트리거 인터럽트가 즉시 입력되면 핀에서 소프트웨어 검사를 통해 레벨이 올바른지 여부를 확인할 수 있습니다.

사용되지 않는 모든 인터럽트에 대해 의도하지 않은 인터럽트 후에도 시스템을 정의된 상태로 유지하기 위해 오류 처리 루틴을 구현해야 합니다.

의도하지 않은 리셋은 올바른 프로그램 실행을 방해하며 광범위한 응용 프로그램이나 안전에 중요한 시스템에서는 허용되지 않습니다.

차별화 리셋(콜드/웜 스타트)

빈번한 시스템 요건은 장애/중단 후 자동으로 작업을 재개하는 것입니다.종료 시 시스템 상태를 기록하고 데이터를 비휘발성 메모리에 저장하는 것이 유용할 수 있습니다.기동시에, 시스템은 장애나 장해(웜 스타트)에 의해 시스템이 재기동하는지를 평가할 수 있습니다.시스템 상태를 복원하거나 오류를 표시할 수 있습니다.콜드 스타트 시 메모리에 저장된 데이터는 유효하다고 간주할 수 있습니다.

외부 전류 소비량 측정

하드와 소프트웨어의 조합: AD 컨버터를 사용한 전원 변동 검출

이 방법은 하드 구현과 소프트웨어 구현을 조합한 것입니다.장치 자체의 자원을 사용하여 전자파 간섭을 검출하는 간단한 회로를 제안합니다.ATmega16과 같은 대부분의 마이크로 컨트롤러는 아날로그-디지털 변환기(ADC)를 내장하고 있어 간섭에 의한 비정상적인 전원 변동을 검출할 수 있습니다.

소프트웨어에 의해 간섭이 검출되면 마이크로 컨트롤러는 공격이 통과하기를 기다리는 동안 안전 상태가 될 수 있습니다.이 세이프 상태에서는 중요한 실행은 허용되지 않습니다.그림은 간섭 감지를 수행하는 방법을 보여 줍니다.이 기술은 AD 컨버터를 탑재한 마이크로컨트롤러에 쉽게 사용할 수 있습니다.

워치독

워치독 타이머는 다른 컴포넌트의 비정상적인 동작을 검출하여 정상 동작을 회복하기 위한 수정 액션을 개시하는 전자 타이머입니다.특히 소프트웨어 오류 또는 일시적인 하드웨어 오류가 발생하더라도 마이크로 컨트롤러 제어 장치가 완전히 고장나지 않도록 보장합니다.워치독 타이머는 일반적으로 단안정 타이머 또는 디지털카운터를 기반으로 합니다.타이머 회로는 마이크로컨트롤러 칩에 내장되거나 외부 회로로 구현될 수 있습니다.워치독 타이머는 전자기적으로 영향을 받는 환경에서 마이크로컨트롤러의 신뢰성을 크게 향상시킬 수 있습니다.

소프트웨어는 워치독이 정상적으로 동작하고 있음을 정기적으로 알립니다.워치독에 알리지 않으면 소프트웨어가 더 이상 지정된 대로 작동하지 않음을 의미합니다.그런 다음 워치독은 시스템을 정의된 상태로 재설정합니다.리셋중에, 디바이스는 데이터를 처리할 수 없고, 콜에 응답하지 않습니다.

워치독 타이머를 리셋하는 전략은 매우 중요하기 때문에 다음 두 가지 요건을 충족해야 합니다.

  • 모든 루틴이 올바르게 작동하는 경우에만 워치독을 재설정할 수 있습니다.
  • 리셋은 가능한 한 빨리 실행해야 합니다.

워치독의 단순한 활성화와 타이머의 정기적인 리셋으로는 워치독을 최적으로 사용할 수 없습니다.최상의 결과를 얻으려면 타이머의 새로 고침 주기를 가능한 짧게 설정하고 메인 기능에서 호출해야 합니다. 따라서 손상이 발생하거나 오류가 발생하기 전에 재설정을 수행할 수 있습니다.마이크로 컨트롤러에 내부 워치독이 없는 경우 타이머 인터럽트 또는 외부 디바이스를 사용하여 동일한 기능을 구현할 수 있습니다.

소등

브라운아웃 회로는 동작 중 VCC 레벨을 고정 트리거 레벨과 비교하여 모니터링합니다.VCC가 트리거 레벨 아래로 떨어지면 즉시 브라운아웃리셋이 활성화됩니다.VCC가 다시 상승하면 일정 지연 후 MCU가 재시작됩니다.

「 」를 참조해 주세요.

메모들

  1. ^ 싱글 이벤트 래치업(SEL)이라고도 불리는 래치업은 VDD(양전원장치)와 VSS(음전원장치)의 단락 회로입니다.래치업은 CMOS 회로의 기생 트랜지스터(정상 작동 상태에서는 활성화할 수 없는 트랜지스터)에 의해 발생합니다.강한 과도 장애는 트랜지스터를 활성화하고 장치를 열적으로 파괴할 수 있습니다.
  2. ^ http://www.misra.org.uk

외부 링크