본문 바로가기
자동차 임베디드 SW/잡

이슈- Aurix 트레소스 Can Clock Enable하기

by 존버매니아.임베디드 개발자 2022. 10. 4.
반응형

신규보드에 can 통신을 뚫고 있는데 아무리 봐도 셋팅을 잘못한게 없는데 Comm 모듈에 Full communication 요청을해도 Full Communication으로 진입을 하지 않았다.

det를 켜보니 init function도 아니고 특이하게도 can sm mainfunction에서 det가 발생하고 있었다. 그 내용을 보니 can controller를 enable 시켜놓고 컨트롤러가 정상적으로 동작 가능할 때까지 기다리는 부분인데 그 쪽에서 타임아웃이 자꾸 나는거다.

내가 의문이었던건 캔 컨트롤러 enable을 왜 can_init 함수가 아니라 can sm mainfunction에서 호출하느냐였다.
그래서 지금 뭐하는 상황인건지 이해가 안됐다.

알고보니까 mcal can 모듈은 can_init 함수말고 can_controller_init , Can_SetControllerMode 이라는 함수가 있는데,

이걸로 특정 can controller의 state를 start , stop 시키는데..

이 함수를 호출해서 캔 컨트롤러를 Start 시키는 오토사 시퀀스를 보니 이거는 제어기 init 과정에서 호출하는게 아니라
유저가 comm에 풀컴 요청을 하면 그게 can sm으로 전달되고 그게 또 canif로 전달되고.. 거기서 can init controller를 호출하는 것이었다..
그래서 can sm mainfunction에서 이런짓을 하고 있었던 것이다.

암튼 왜 자꾸 타임아웃이 발생했냐면 aurix 의 clock 셋팅하는 것중에 can controller로 공급되는 clock의 소스를 선택하는 부분이 있는데 이게 disable 되어 있었다. 그래서 init controller를 호출하는데 정상동작이 안되서 타임아웃이 발생한거다..

clock 관련해서는 평소에 신경을 안쓰던 부분이라 clock이 disable 되어있을거라는건 미처 생각을 못했다. 또한 can_init 과정에서 에러가 없었기 때문에 더더욱 clock이 disable돼있을거라곤 상상을 못했다. 


프로젝트를 신규로 만드는 상황이었고 그러다보니 미쳐 해당 clock이 disable 된 것을 인지를 못했다..
다음엔 꼭 켜놓고 쓰자.
이틀간 온종일 온갖 헛짓거리를 시도했는데 결국 clock 을 안킨게 문제였다. 허무하지만 문제가 해결되어 다행이다.

 

이틀간의 헛짓거리를 하고 결국 알아낸 것:

CAN Driver는 Can Driver 자체에 대한 Init 과정 외에도, 각각의 CAN Controller를 Init 하는 과정이 있다는 것.

그리고 이것은 제어기 Init 단계에서 호출하는게 아니라.. 유저가 Full Comm을 요청하면

comm -> can sm-> can if -> 를 통해서 호출이 된다는 것이다.

 

 

 

반응형