LIN 통신은 비동기 통신으로 일반적으로 9600 Baudrate 정도의 속도로 저용량의 데이터 전달을 목적으로 하며 비동기 통신이므로 I2C, SPI의 clock 동기 신호가 없다. Vcc, GND를 제외하면 하나의 선으로 Tx, Rx 통신을 수행
LIN 통신의 Node 구성은 Master와 Slave로. Master Node는 통신을 담당. Master Node가 움직이지 않으면 Slave Node는 통신을 할 수 없다. (* Slave Node도 Master Node처럼 통신이 가능 하지만 일반적인 LIN 통신 설계 규격에서 위배된다.)
하나의 LIN 패킷은 Break, Sync, ID, Data 영역으로 구성
Master는 최소 13 bit의 LOW 레벨을 전송. 이 신호는 Slave Node에 통신 시작을 알린다. 이 신호로 Slave Node는 Standby 상태에 있더라도 Wake Up 후 동작에 필요한 시간을 만들어 준다. LIN Controller는 UART Controller를 기반으로 동작 하지만 이 부분이 일반적인 UART 통신과 다르다. UART를 기반으로 동작 시킬 경우 Master는 13 bit의 LOW 레벨을 만들 수 없기 때문에 사용 하고자 하는 Baudrate 보다 느린 속도로 Break를 전송하면 Slave 측에서는 이 신호를 검출 할 수 있다. Master는 Break 전송 후 다시 약속한 Baudrate 로 전환 한다.
Break 신호가 HIGH 레벨로 전환 후 0x55 값을 확인하는 과정으로 미리 정해진 Baudrate 속도를 확인하는 과정이다.
PID (Protected Identifier field) 데이터 영역을 규정하는 ID로 LIN Node ID가 아니다. 패킷 상에는 Parity 비트를 추가하여 전송한다. LIN 스펙에서는 ID 범위에 따라 Data 영역의 길이와 목적을 규정하고 있다.
0 ~ 59 (0x3B) 일반적인 목적
60(0x3C) 및 61(0x3D) Diagnostic 및 Configuration 목적
62(0x3E) 및 63(0x3F) Reserved
Slave Node는 PID 값을 기준으로 동작을 결정한다. Master Node는 PID를 기준으로 Data 영역을 값을 이용해서 Slave Node에 데이터를 전달하는 목적으로 사용 할 수도 있고 Slave Node로부터 응답을 받는 목적으로 사용 할 수도 있다.
Master 측에서 Slave의 응답을 기다리는 PID 전송 시 Data를 수신 하기전에 20ms ~ 30 ms 의 시간을 가진다. 이 시간동안 Slave 측에서 응답을 할 경우 Master 측의 Rx Interrupt 또는 DMA로 수신 동작이 수행 된다.
이 영역은 Master Node에 의해서 사용할 수도 있고 Slave Node에 의해서도 사용할 수 있다. Master Node의 Transmit 목적으로 사용 할 수도 있고 Receive 목적으로 사용 할 수 있다. Slave 측에서 Master로 응답을 하는 경우 이 영역은 Slave에서 Tx 동작을 수행한다. Slave 측에서 응답을 하기 위한 값을 결정하는 시간을 확보하기 위해 Master 측은 20ms ~ 30ms 이후 값을 확인 한다.
Master Node와 Slave Node간에 신호 변조를 위해 필요하다. 두 Node간 통신에 필요한 전압 레벨은 Master Node에서 결정한다. 통상 Master Node의 Transceiver의 LIN Bus 단의 Diode 전압으로 결정된다. Slave Node단의 모든 전압은 이 Master Node의 전압을 기준으로 한다.
Transceiver는 UART 기반의 Controller의 TxD 핀을 통해 데이터를 전송한다.
RxD 핀을 통해 수신한 데이터는 Controller의 Interrupt를 발생 시킨다.
Break 신호를 Detect 한 이후 Byte 단위로 Interrupt를 발생. Transceiver에 따라 다르기는 하지만 TxD 핀을 통해 전송한 신호는 다시 RxD 핀을 통해 전달 되기도 한다.
Slave Node는 Master에서 전송하는 신호를 수신한다. 수신 후 처리 여부는 PID 값으로 결정한다.
Master Node에서 Data 영역에 NAD 값을 사용해서 특정 Slave를 지정하더라도 모든 Slave Node는 데이터를 수신한다. Slave 측의 NAD 값과 다르면 동작하지 않는다.