null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
Aurix MCU 실전 입문 — 자동차 안전 MCU를 처음 만나는 개발자를 위해
Structure
•
Aurix 개발 첫걸음 — Infineon이 제공하는 자원들
dev-environment
•
Aurix 개발 환경 선택 — 컴파일러와 IDE, 뭘 골라야 하나
illd-structure
•
iLLD 구조 해부 — Aurix 드라이버를 직접 읽는 방법
gpio-lvds
•
GPIO와 LVDS — Aurix 핀 드라이버의 설계 원리
safety-design
•
Emergency Stop과 안전 설계 — Aurix가 자동차에 쓰이는 이유
Flow Structure
Aurix 개발 환경 선택 — 컴파일러와 IDE, 뭘 골라야 하나
3 / 5
GPIO와 LVDS — Aurix 핀 드라이버의 설계 원리
☆ Star
↗ Full
iLLD 구조 해부 — Aurix 드라이버를 직접 읽는 방법
#aurix
#illd
#드라이버
#can
#gpio
@devpc
|
2026-05-06 05:25:28
|
GET /api/v1/flows/27/nodes/515?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# iLLD 구조 해부 — Aurix 드라이버를 직접 읽는 방법 ## iLLD란 iLLD(Infineon Low Level Driver)는 Infineon이 Aurix MCU용으로 제공하는 C언어 하드웨어 추상화 라이브러리다. HAL(Hardware Abstraction Layer) 역할을 하며, MCU 레지스터를 직접 건드리지 않고도 CAN, SPI, ADC, GPIO 등 모든 내장 모듈을 제어할 수 있다. iLLD 없이 Aurix를 개발하는 건 기술적으로 가능하지만, 레지스터 맵을 전부 외워야 하므로 현실적으로는 iLLD를 기반으로 개발한다. ## iLLD 폴더 구조 CAN 모듈을 예시로 iLLD의 폴더 구조를 살펴보자. TC35A 기준: ``` iLLD/ └── TC35A/ └── Tricore/ ├── _PinMap/ │ └── IfxCan_PinMap.c ← CAN 핀 맵 정의 └── Can/ ├── Std/ │ ├── IfxCan.c ← CAN 컨트롤러 저수준 제어 │ └── IfxCan.h └── Can/ ├── IfxCan_Can.c ← CAN 송수신 고수준 API └── IfxCan_Can.h ``` 다른 모듈(SPI, ADC, GTM, SCU 등)도 동일한 구조를 따른다. ## 세 가지 레이어 이해 ### 1. PinMap — 핀 매핑 정의 핀 맵 파일은 MCU 핀과 내부 모듈을 연결하는 테이블이다. ```c /* CAN1 노드3의 수신 핀 선택 옵션들 */ IfxCan_Rxd_In IfxCan_RXD13A_P14_7_IN = { &MODULE_CAN1, IfxCan_NodeId_3, {&MODULE_P14, 7}, Ifx_RxSel_a }; IfxCan_Rxd_In IfxCan_RXD13B_P33_5_IN = { &MODULE_CAN1, IfxCan_NodeId_3, {&MODULE_P33, 5}, Ifx_RxSel_b }; ``` 어떤 핀에 CAN TX/RX를 연결할지 회로도와 대조해서 선택한다. ### 2. Std 레이어 — 모듈 저수준 제어 Std 코드는 CAN 컨트롤러 레지스터를 직접 제어하는 가장 낮은 레벨이다. ```c /* CAN 모듈 활성화 */ void IfxCan_enableModule(Ifx_CAN *can) { uint16 passwd = IfxScuWdt_getCpuWatchdogPassword(); IfxScuWdt_clearCpuEndinit(passwd); can->CLC.B.DISR = 0U; /* 모듈 비활성화 비트 클리어 */ /* 모듈 활성화 완료까지 대기 */ while (IfxCan_isModuleEnabled(can) == FALSE) {} IfxScuWdt_setCpuEndinit(passwd); } ``` `IfxScuWdt_clearCpuEndinit()`과 `setCpuEndinit()` 쌍이 눈에 띈다. Aurix에서 보호된 레지스터를 수정하려면 **Endinit 비트 해제 → 수정 → 재설정** 절차를 따라야 한다. 이를 무시하면 레지스터 수정이 무시되거나 트랩이 발생한다. ### 3. Can 레이어 — 고수준 API ```c /* CAN 모듈 초기화 (고수준) */ void IfxCan_Can_initModule(IfxCan_Can *can, IfxCan_Can_Config *config) { can->can = config->can; if (IfxCan_isModuleEnabled(can->can) != TRUE) { IfxCan_enableModule(can->can); } } ``` 이 레이어는 Std 함수들을 조합해 초기화, 송신, 수신 같은 실제 동작을 구현한다. 애플리케이션 코드에서는 대부분 이 레이어의 API를 사용한다. ## iLLD 활용 패턴 ``` ① IfxCan_Can_Config 구조체에 설정 값 채우기 ② IfxCan_Can_initModuleConfig()로 기본값 초기화 ③ 핀맵에서 TX/RX 핀 선택 ④ IfxCan_Can_initModule() 호출 ⑤ CAN 노드별 설정 (Baud rate, 필터 등) ⑥ IfxCan_Can_initNode() 호출 ``` 설정 구조체에 모든 파라미터를 담아서 초기화 함수에 넘기는 패턴이다. 이는 Aurix 전반에 걸친 iLLD의 공통 설계 철학이다. 다음 챕터에서는 GPIO 관련 기능을 다룬다. Aurix의 Pad Driver와 LVDS 신호는 일반 MCU와 다른 설계 개념을 요구한다.
Aurix 개발 환경 선택 — 컴파일러와 IDE, 뭘 골라야 하나
GPIO와 LVDS — Aurix 핀 드라이버의 설계 원리
// COMMENTS
Newest First
ON THIS PAGE
No content selected.