Aurix SMU- 1 완벽 개념 정리
Aurix Safety Management Unit란
Aurix SMU란
mcu와 관련된 각종 고장을 감지하고, 고장 발생시 지정된 reaction을 수행하는 것이 주요 기능이다.
참고로 이 때 고장감지는 MCU가 하드웨어적으로 자체적으로 수행하는 것이라 유저가 sw구현 할 부분은 딱히 없다. 있다면 그냥 해당 기능을 enable하는 정도이다.
(ex 락스텝 에러감지는 유저가 별도로 enable 했을때만 감지함. 그러나 대부분의 고장은 자동으로 켜져있음.
이 때 어떤 reaction을 수행할 것인지는 유저가 configure한다.(리액션 아무것도 안하게 할수도 있음. 만약 그렇다면 감지만하고 아무동작 안할 것)
예를 들면 MCU의 Ram에서 bit에러 발생시 ecc를 통해 이름 감지하고, 이것이 감지되면 reset, Interrupt, trap(NMI), 등의 지정된 reaction을 수행한다.
좀 더 상세히 얘기하면 SMU에는 알람이라는 것이 있다.
알람은 알람 그룹, 알람 시그널로 나누어지는데 하나의 알람 그룹은 여러개의 알람 시그널로 구성된다.
이때 각 알람 시그널은 앞에서 얘기한 여러가지 고장 항목에 사전에 매핑이 되어있다.
(※ 참고로 매핑정보는 MCU의 Appendix 문서에 적혀있다.)
고장이 감지되면 해당 알람이 SET 되고, 그러면면 해당 알람에 Configure된 reaction을 하는 것이다.
유저는 알람마다 reaction 을 어떻게 할 것인지 셋팅해야한다. 참고로 따로 셋팅을 안한다면 알람이 발생해도 아무런 reaction이 없다
어떤 에러가 발생했는지는 알람 status 레지스터를 보면 확인이 가능하다.
이해를 돕기 위해 아래 그림을보자. 그림출처는 TC38x appendix 매뉴얼문서이고 인피니언에서 다운받음
위 그림은 Alarm Group의 Mapping 현황을 알려준다. ALM0 <-은 알람 그룹번호가 0을 의미하는 것이고
대괄호안에 [0] ,[1] 은 해당 그룹에 속하는 알람 시그널을 의미한다.
그리고 오른쪽에 보면 어떤 고장이 알람 시그널에 속하는지가 적혀있다.
예를 들어 CPU0 PFLASH0 Read path Error가 발생하면 -> 알람 그룹 0번의 2번 시그널로 알람이 발생된다.
알람이 발생되면, 해당 알람에 configure 된 리액션이 실행되는 것이다.
참고로 위 그림의 예시처럼 하드웨어적인 고장과 알람 간에 매핑이 된 경우도 있지만
특정 알람 그룹은 하드웨어 고장이 아니라 유저가 sw 적으로 set 할 수도 있다.
한편, SMU에는 Smu core와 smu stby가 있다.
알람 그룹21,22는 smu stby 가 처리한다.
한편, smu core는 내부 state를 갖는데
Start , Run , Fault 3가지이다.
Mcu가 cold power on reset하는 경우 smu core state가 Start state 이다.
사실 smu core에 속하는 알람들(알람 그룹 21,22를 제외한 알람들)은 알람이 발생해도 smu state가 start state 인 경우 리액션이 수행되지 않는다.
smu state가 run 또는 fault state일때만 비로서 알람 리액션이 발생된다.
(start state에서 알람 자체가 안생기는게 아니고 알람 리액션이 수행안되고 펜딩돼있다는 소리)
참고로 smu state를 start에서 run으로 보내는건 sw적으로 smu cmd 명령을 통해서만 가능하다.
run에서 fault로 가는건 사실 fsp라는 기능과 연관돼있고. 알람 리액션은 run이든 fault든 똑같이 발생된다.
run,fault state에서 다시 start로 돌아가는건 sw적으로는 불가하고 power on reset 때만 가능
한편 reaction은 크게 두 가지로 타입으로 나뉘는데 External , Internal 로 구분된다.
Internal은 인터럽트, CPU 리셋, 리셋, NMI 으로 구분되며
External은 FSP 라는 기능인데,
FSP가 뭐냐면 Error State에 따라서 MCU의 특정 PIN으로 특정한 패턴의 output 신호를 내보내는 그런기능이다.
전형적인 예시를 말하자면, 에러가 없을때는 50% 듀티로 일정한 출력을 내보내다가, 에러가 발생하면 High 신호를 유지하는 식이다.
보통 이 아웃풋핀을 external Watchdog에 연결하여 에러상태를 감지하여 외부에서 mcu를 리셋하는 식으로 구성된다.
Aurix에서는 TLF35584랑 같이 쓰는데, 35584의 Err 핀과 aurix의 fsp 핀을 연결후,
35584 가 fsp 핀 상태를 모니터링하여 지정된 50% duty신호가 들어오지않으면 에러상태로 인식하여 aurix mcu를 리셋하는 식이다.