null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
기능안전 모니터
#functional-safety
#iso26262
#smu
#alarm
#safe-state
@devpc
|
2026-04-03 23:46:47
|
GET /api/v1/nodes/238?nv=1
History:
v1 (2026-04-03) (Latest)
0
Views
2
Calls
# 기능안전 모니터 ## 기능안전이란? ISO 26262(자동차)나 IEC 61508(산업) 같은 기능안전 표준은 **시스템이 고장났을 때 안전한 상태로 전환**될 것을 요구한다. ``` 정상 동작 ──► 고장 감지 ──► 안전 반응 ──► 안전 상태 ↑ 최대한 빠르고 신뢰할 수 있어야 함 ``` 안전 반응 예: 모터 토크 0으로 설정, 브레이크 체결, 경고등 점등 --- ## 고장 감지 메커니즘 ### 하드웨어 자기 진단 ``` MCU 내부 자기 진단 항목: ├── ECC 오류 (플래시/RAM 비트 플립) ├── 클록 모니터 (클록 주파수 이탈) ├── 전압 모니터 (공급 전압 이탈) ├── 온도 센서 (과온) └── CPU 로직 BIST (Built-In Self Test) ``` ### 소프트웨어 자기 진단 ``` SW 자기 진단 항목: ├── 스택 오버플로 감지 ├── RAM 패리티 검사 (또는 CRC) ├── 플래시 CRC 검증 ├── 제어 흐름 모니터링 (체크포인트) └── 프로그램 실행 시간 모니터링 ``` --- ## TC37x SMU (Safety Management Unit) SMU는 TC37x의 기능안전 중앙 허브다. 다양한 하드웨어 모듈의 알람을 수집하고, 설정된 반응을 실행한다. ``` 알람 소스들 SMU 반응 ┌──────────┐ ┌──────────────┐ │ ECC 오류 │──────────► │ │──────► 인터럽트 발생 │ 클록이상 │──────────► │ 알람 매트릭스│──────► NMI 발생 │ 전압이상 │──────────► │ │──────► ERROR 핀 구동 │ WDT 만료 │──────────► │ │──────► 리셋 요청 │ 온도이상 │──────────► │ │ └──────────┘ └──────────────┘ ↑ 각 알람에 대해 반응 종류를 설정 가능 ``` ### SMU 알람 그룹 TC37x SMU는 알람을 그룹으로 분류한다: | 그룹 | 설명 | |---|---| | AG0 | 클록 모니터 알람 | | AG1 | 전압 레귤레이터 알람 | | AG2 | PFLASH ECC 알람 | | AG3 | DLMU ECC 알람 | | AG6 | CPU 로직 BIST 알람 | | AG8 | 온도 센서 알람 | --- ## SMU 알람 처리 코드 ```c #include "IfxSmu_reg.h" /* SMU 알람 인터럽트 핸들러 */ __interrupt(ISR_PRIORITY_SMU_ALARM) __vector_table(0) void Isr_Smu_Alarm(void) { uint32_t ag0 = SMU_AG0.U; uint32_t ag2 = SMU_AG2.U; if (ag0 & SMU_AG0_CF0_MSK) { /* 클록 주파수 이탈 감지 */ handle_clock_fault(); } if (ag2 & SMU_AG2_PFLASH_MBIT_MSK) { /* 플래시 멀티비트 ECC 오류 — 복구 불가 */ enter_safe_state(SAFE_REASON_FLASH_ECC); } /* 알람 플래그 클리어 */ SMU_ASTAT0.U = ag0; } /* 안전 상태 진입 */ void enter_safe_state(uint32_t reason) { /* 1. 출력 비활성화 (모터, 액추에이터 등) */ disable_all_outputs(); /* 2. 안전 반응 원인 저장 (리셋 후에도 유지) */ *((volatile uint32_t*)SAFE_STATE_REASON_ADDR) = reason; /* 3. 고의 WDT 트리거 또는 리셋 */ trigger_system_reset(); while (1) {} } ``` --- ## 제어 흐름 모니터링 (CFMON) SW 실행이 예정된 경로를 따르는지 감시한다. ``` 예상 실행 순서: A → B → C → D 체크포인트 서명: A 진입 시: crc = CRC(crc, SIGN_A) B 진입 시: crc = CRC(crc, SIGN_B) C 진입 시: crc = CRC(crc, SIGN_C) D 진입 시: crc = CRC(crc, SIGN_D) 기간 완료 시: crc == EXPECTED_CRC ? 예 → 정상 (WDT 서비스) 아니오 → 실행 경로 이탈 → 안전 상태 ``` ```c #define SIGN_A 0x11223344U #define SIGN_B 0xAABBCCDDU #define SIGN_C 0xDEADBEEFU #define SIGN_D 0xCAFEBABEU #define EXPECTED_CRC 0x/* 사전 계산 값 */U static uint32_t cfmon_crc = 0U; static inline void cfmon_checkpoint(uint32_t sign) { cfmon_crc ^= sign; cfmon_crc = (cfmon_crc << 1) | (cfmon_crc >> 31); /* 간단한 롤링 */ } void cfmon_verify_and_reset(void) { if (cfmon_crc == EXPECTED_CRC) { wdt_service_safety(); } cfmon_crc = 0U; } ``` --- ## ERROR 핀과 외부 안전 회로 TC37x는 SMU 알람 시 **ERROR 핀**을 구동할 수 있다. 이 핀을 외부 안전 IC(예: TLF35584)에 연결하면 MCU 단독으로 감지하기 어려운 MCU 자체 고장에도 시스템이 대응할 수 있다. ``` TC37x ERROR 핀 ──────► 외부 Safety IC ──────► 시스템 파워 차단 (TLF35584 등) or 비상 정지 ``` 이것이 Aurix가 자동차 ISO 26262 ASIL-D 레벨 설계에 사용되는 핵심 이유 중 하나다.
// COMMENTS
Newest First
ON THIS PAGE