지난 2014년 이타스코리아는 아주대학교와 자동차 소프트웨어 인력양성을 위한 산학협력 업무협약(MOU)을 체결했다. 이타스코리아는 아주대학교 소프트웨어융합학과의 소프트웨어 융합프로젝트 교과목에 자동차 전장장치 소프트웨어 개발을 위한 AUTOSAR 툴체인과 모델링 개발 툴 ASCET을 공급했다. 2011년 아주대학교가 유치한 미래창조과학부 정보통신산업진흥원 주관 대학 소프트웨어 인력양성 사업인 ‘서울 어코드 활성화 사업’ 활성화와 양측의 연구 및 교육 분야 협력을 위해, 2016년 7월 이타스코리아는 아주대학교 소프트웨어학과 학생들을 중심으로 AUTOSAR 현장실습 프로젝트를 진행했다.
AUTOSAR 집중교육 수업에서 다루지 못했던 ECU 간 CAN 통신을 현장실습 프로젝트를 통해 다뤘다. AUTOSAR 기반 ECU 소프트웨어(ECU SW)에 CAN 메시지를 추가하고 테스트하는 프로젝트를 진행했다. 프로젝트에서 AUTOSAR 기반 ECU SW 설정과 코드 자동 생성이 가능한 이타스의 ISOLAR-A를 주요 개발 툴로 사용했다.
그림 1은 AUTOSAR 기반 ECU SW 구조를 나타낸다. BSW를 살펴보면 크게 세 층으로 나누어진다. 세 층을 이루고 있는 모듈 중에서 Communication에 관련된 모듈을 모아서 Communication Stack(Com-Stack)이라고 부른다. Com-Stack 중에서도 CAN 관련 모듈 중에서 이번 프로젝트에서 설정한 모듈은 COM, PDU Router(PduR), CAN Interface(CanIf), CAN Driver(CanDrv)이다.
Com-Stack을 이루는 모듈들 사이의 관계를 살펴보면 그림 2와 같다. Application Layer를 기준으로 전송하는 메시지는 Tx 메시지라 하고, 받는 메시지는 Rx 메시지라 한다. CAN 메시지는 여러 개의 모듈에 걸쳐 전달된다. 메시지가 전달될 때 이는 Signal, PDU, Frame의 형태로 각각의 모듈에 전달된다. Tx 메시지의 경우 RTE는 Application Layer에서 SystemSignal을 받아 Com에 ISignal을 전달한다. 반대로 RX 메시지의 경우 Com에서 ISignal을 받아 ASW로 SystemSignal을 전달한다.
SW COMPONENT & SYSTEM DESCRIPTION
층이 나뉘어져 있기 때문에 Application Layer는 Com-Stack의 세부적인 설정과 독립적이다. Application Layer에서는 어떤 Software Component(SWC)의 어떤 Port에서 어떤 Interface를 통해 어떤 Data가 전달되는지만 설정해준다.
System은 전체 ECU SW를 개괄적으로 나타내는 역할을 한다. RTE와 COM 모듈이 주고받는 ISignal, COM 모듈과 PDUR 모듈 사이에 전달되는 PDU, PDUR 모듈과 CanIf 사이에 전달되는 PDU, CanIf와 물리 네트워크 사이에 전달되는 Frame을 생성하고 각각의 특성에 맞게 설정해준다.
BASIC SOFTWARE CONFIGURATION
System의 Signal, PDU, Frame이 생성되면 이에 맞게 BSW 층의 Com-Stack을 설정해야 한다. Com-Stack 중 CAN 통신에 관련된 모듈을 설정한다. 프로젝트에서는 CanTp를 제외한 Com, PduR, CanIf, CanDrv를 설정한다.
Com-Stack 모듈 설정에 앞서, Com-Stack에 속하는 모듈 말고 설정해야 하는 모듈이 하나 더 있다. 바로 EcuC 모듈이다. EcuC 모듈은 가상 모듈로 BSW 내 어느 Layer에도 속하지 않는다. EcuC 모듈은 Global PDU를 생성할 수 있다. 이는 각 모듈의 local PDU를 연결시켜주는 역할을 한다. Local PDU가 내부 파라미터로 global PDU를 참조함으로써 연결이 이루어진다.
COM 모듈은 RTE와 주고받는 ComSignal, PduR과 주고받는 PDU를 생성하고 내부 파라미터를 설정한다.
PduR 모듈은 PDU를 라우팅하는데, 이때 PDU의 Routing Path를 생성하고 내부 파라미터를 설정해준다. Tx 메시지의 경우엔 Routing Path에서 Source를 COM 모듈에서 받은 PDU, Destination을 CanIf로 보낼 PDU로 설정한다. Rx 메시지의 경우엔 Routing Path에서 Source를 CanIf 모듈에서 받은 PDU, Source를 COM으로 보낼 PDU로 설정한다.
CanIf 모듈은 PduR 모듈과 주고받는 PDU를 생성하고, CanDrv와 주고받는 Hardware Object Handler(HOH)를 생성한다. 생성한 PDU와 HOH의 내부 파라미터를 설정해준다.
마지막으로 CanDrv 모듈도 설정한다. CanDrv 모듈은 CanIf와 주고받는 HOH를 설정해야 하는데, CAN Hardware Object를 가진다. Hardware Object에 CAN ID 인자를 넣어 CAN 메시지에 고유 ID를 부여한다.
SYSTEM DATA MAPPING
BSW를 다 설정하면 다음은 System Data 매핑 과정이 필요하다. 앞에서 생성했던 Signal, PDU, Frame, COM 모듈의 Signal을 SWC의 Port에 각각 설정해준다. 이로써 ASW, RTE, BSW 층이 서로 연결되어 CAN 통신이라는 하나의 기능을 수행하게 된다.
CODE GENERATION
ECU SW 생성에 필요한 코드는 RTE, ASW, BSW, MCAL, OS이다. ISOLAR-A의 RTE Generation 기능을 이용해 RTE에 설정된 항목들에 대해 자동으로 RTE 코드를 생성할 수 있다. SWC, Port를 비롯해 Signal을 추가했기 때문에 관련 RTE Generation을 실행하면, 해당 API가 AUTOSAR 규칙에 따라 자동 생성된다.
ISOLAR-A의 SWC의 Code Frame 자동생성 기능을 통해 앞에서 생성된 API를 사용하는 기본 코드 틀을 만들 수 있다. 이를 조금 수정하여 RPort로 들어온 Signal이 가진 data를 다시 PPort로 내보내 Signal로 전송하는 Application 코드를 작성했다.
BSW Code 또한 ISOLAR-A에서 생성이 가능하다. BSW 코드 생성 기능을 이용해 MCAL을 제외한 BSW 코드를 생성한다. MCAL 코드생성은 TresosStudio에서 해준다. Infineon TC264D MCU용 MCAL Project를 열고, ISOLAR-A에서 설정했던 CAN Driver 설정을 불러온다. Code Generation 기능을 이용해 MCAL 코드를 자동 생성한다. OS Code는 RTA-OS를 이용해 설정하고 코드를 생성한다. CAN 메시지 추가 시 OS 부분은 수정이 필요 없었기 때문에 기존에 있던 OS 코드를 사용했다.
CODE INTEGRATION
이로써 보드에 올릴 수 있는 Executable ECU 파일을 생성하기 위한 준비가 모두 끝났다. Executable ECU 파일을 만들기 위해서는 최종 컴파일이 필요한데, 컴파일러로 HighTec Compiler를 사용했다. App, RTE, BSW, MCAL, OS 코드가 모두 준비되면 컴파일러를 이용해 Executable ECU 파일을 생성한다.
TEST
생성된 executable ECU 파일을 T32를 이용해 Infineon TC264D EVB에 올렸다. 이타스 ES581(USB CAN Bus Interface)와 BUSMASTER를 이용해 CAN 메시지가 제대로 전달되고 있는지 확인할 수 있었다. 그림 4는 BUSMASTER로 확인한 Tx, Rx 메시지 창이다. 연결된 컴퓨터가 기준이므로 Rx, Tx가 설계했던 ECU와는 반대가 된다. ECU SW에 Tx 메시지는 ID 0x64번, Rx 메시지는 0xC8번을 부여했다. 0xC8번에 07 값을 보내면 Rx인 0xC8 메시지에 그 값이 전달되고, 전달받은 값을 다시 0x64번 Tx 메시지를 통해 내보내도록 Application 코드를 작성했으므로 0x64번 Tx 메시지가 전달된 07 값을 내보내고 있다.
AUTOSAR 현장실습 프로젝트에서 CAN 메시지 추가에 따른 코드를 생성하고 ECU SW를 만들어 보았다. 학교에서는 다루지 못했던 차량용 ECU의 CAN 통신 과정과 ECU SW 설정 방법도 알게 됐다. AUTOSAR 규격에 맞춰 ECU SW를 설정하는 것이 당장은 복잡하고 생소했지만, AUTOSAR 표준을 공부해가며 ECU SW를 설계해보니 그 필요성을 깨닫게 됐다. 또한 ECU SW를 직접 보드에 올리고 테스트할 수 있는 기회가 주어져 더 유익한 프로젝트였다.
<저작권자 © AEM. 무단전재 및 재배포, AI학습 이용 금지>