본문 바로가기
임베디드SW/Peripheral for 임베디드

LIN 통신 프로토콜 - Physical Layer, LIN Frame

by 바이너리 임베디드 2022. 8. 5.

LIN 통신 프로토콜

그럼 바로 본론으로 들어가기 전에, 

이 글은 LIN 통신에 대한 시리즈 글입니다. 

 

현재 LIN통신에 대한 2편의 글이 작성 되었습니다. 

먼저 읽고 오셔야 이번 편이 이해가 된답니다. 

아래글을 꼭 읽고 오시기 바랍니다.


https://cookbook.tistory.com/59

 

LIN 통신 개요 (역사, 사용되는 곳, 콘셉트, 장점)

1. LIN 통신의 역사 1998년에 OEM과 Supplier가 Consortium을 설립하여 LIN 통신 스펙을 만들었다고 합니다. OEM에는 BMW, Volvo, Audi, VW, Daimler-Chrysler가 있었고, Semiconductor 서플라이어에는 Motorola가..

cookbook.tistory.com

https://cookbook.tistory.com/60

 

LIN통신 프로토콜 - Master Slave 통신, Schedule 테이블

LIN 통신 프로토콜 임베디드 SW를 개발하면서 LIN 통신 모듈을 개발해야 하는 상황이라면 이번 글이 많은 도움이 될 것이라 생각합니다. 이번 포스팅은 LIN 통신 프로토콜에 대해서

cookbook.tistory.com

 

자 그럼 이제 이전 내용도 복기를 했으니 Physical Layer와 Frame을 잘게 쪼개서 한번 보도록 하겠습니다.

 

LIN 통신 프로토콜 - LIN Physical Layer

자 그럼 물리 계층을 살펴봅시다.

Master와 Slave간의 물리적인 선은 1개로 이루어져 있습니다.

사람들은 이것을 LIN Bus라고 부릅니다.

이전 글에서도 설명했지만 하나의 Bus안에는 하나의 Master 노드와 여러개의 Slave 노드가 있습니다.

그리고 우리가 다루고 있는 Microcontroller (MCU)와 LIN Transceiver 사이에는 두개의 선이 존재 합니다.

 

LIN 통신 프로토콜 - Physical Layer, LIN Frame
LIN 통신 프로토콜 - Physical Layer, LIN Frame

 

하나는 MCU에서 전송하는 Tx 선이고 다른 하나는 MCU가 수신하는 Rx 선입니다.

Vsup은 대략 8 ~ 18V 정도의 전압으로 되는데 보통 12V 정도의 전압이 흐른다고 생각하시면 됩니다.

물리계층의 구성은 요게 다 입니다.

심플하죠?

 

아차 아차~ 그런데 LIN Transceiver는 왜 필요한걸까요?

이유는 간단합니다. 

MCU는 기껏해야 3.3V나 5V만을 출력하고 작은 전류만을 사용합니다.

그런데 LIN Bus에는 얼만큼의 전압이 필요하다했죠? 

최대 18V입니다. 

그렇다면 전압과 전류를 팍팍 올려주는 중간단계가 필요합니다.

바로 그 역할을 해주는 것이 LIN Transceiver입니다.

 

이제 물리계층의 구성에 대해서 어느정도 정리가 된것 같습니다.

그럼 이제 LIN Bus에서 전송되는 LIN Frame을 잘개 쪼개서 살펴봐야하지 않겠습니까? 고고고!!

 

 

LIN 통신 프로토콜 -  LIN Frame 잘개 뽀개기

전체적인 Frame구성은 아래 그림과 같습니다.

저번 글에서 살펴본바와 같이 LIN Frame은 Header와 Response로 구성됩니다.

 

LIN 통신 프로토콜 - Physical Layer, LIN Frame
LIN 통신 프로토콜 - Physical Layer, LIN Frame

 

혹시나 노파심에 하는 얘기인데 저번글에 LIN을 이해하는데 있어서 상당히 중요한 이야기가 있습니다.

꼭 보고 오시기 바랍니다^^; 아직 개념이 안잡힌 사람들은 Response 부분이 Slave 노드만 보내는 걸로 생각하는 사람들이 많더라고요.

여하튼 이전 글을 꼭 보고 오세요.

 

 

Header에는 3가지로 구성됩니다.

Break field, Synch field, Protected Identifer field입니다.

그리고 Response는 Data 1 ~ Data 8 까지 있고, Checksum field로 구성됩니다.

 

Break field를 제외한 나머지 필드들의 크기는 10bit로 구성됩니다.

8bit의 데이터를 갖고 있고 앞뒤로는 구분자를 두기 위해 Start bit (0) 뒤에는 Stop bit(1)가 있습니다.

LIN 통신 프로토콜 - Physical Layer, LIN Frame
LIN 통신 프로토콜 - Physical Layer, LIN Frame

Sync Break field의 역할은 Frame의 시작을 알리기 위한 필드입니다.

그래서 다른 필드들은 1byte 즉 8bit로 구성되어 있는데 Break field만이 최소 13Bit 이상으로 만들어져 있습니다.

Sync field는 0x55의 데이터를 갖고 있고 동기화를 맞추기 위해 사용됩니다.

당연히 앞뒤로 Start bit와 Stop비트가 있습니다.

 

LIN 통신 프로토콜 - Physical Layer, LIN Frame

 

그런데 Sync를 맞춘다는 것은 무슨 말일까요?

이전글에서 설명했듯이 여기에는 동기를 맞추기 위한 Clock 라인이 따로 없습니다.

SPI 통신 라인에 보면 Clock 라인이 따로 있죠? 그런데 여기는 없기 때문에 2개의 Field를 사용하여 동기를 맞추고 있는 것입니다.

Protected Identifier(PID)는 각 노들의 고유 아이디를 갖고 있습니다.

Master가 여러개의 Slave중 어느 Slave에게 Frame을 전송해야 할지가 이 ID 설정으로 결정이 됩니다.  

LSB부터 6bit만을 ID로 사용하고 나머지 2bit는 패리티 비트로 노이즈로 인해 PID가 훼손됐는지를 검사합니다.

총 6bit니까 2^6으로 64개의 고유한 ID를 만들어 낼수 있겠네요. 

 

한 BUS안에 최대 64개까지의 노드들이 이론적으로는 있을 수 있겠네요.

그런데 LIN은 너무 느린 통신이라 현실적으로 한 Bus안에 64개까지 있을 수가 없습니다.

 

패리티 비트는 그림에 나와있는 XOR 연산으로 2bit를 만들어 냅니다. 

혹시나 아이디가 노이즈가 타서 비트플립이 발생하게 되면 XOR 연산값이 틀어지겠죠?

 

그럼 이제 Response로 넘어가볼까요?

LIN 통신 프로토콜 - Physical Layer, LIN Frame
LIN 통신 프로토콜 - Physical Layer, LIN Frame

 

여기에는 Data 1 ~ 8까지 있는데 Data를 1개만 보낼수도 있고 Data를 2개만 보낼수도 있고 Data를 8개만 보낼수도 있다는 이야기입니다. 

최소 1개 이상의 데이터가 전송됩니다.

 

 

그리고 Checksum 필드에는 2가지 방식으로 만들수 있습니다.
하나는 Classic Checksum으로 Data 필드로만 sum한 값으로 만듭니다.

다른 하나는 Enhanced Checksum으로 Data 필드와 PID값을 sum한 값으로 만드는 것입니다.

그래서 보아하니 노이즈로 인한 Frame이 훼손되었는지를 알수 있게 해주는 것은 Checksum과 패리티비트가 있다는것도 오늘 알게 되었네요.

 

이제 이정도면 LIN에 대해서 어느정도 개념이 잡히셨을 것이라 생각합니다.

그럼 LIN 통신을 구현해서 통신하는 것은 TC275로 나중에 해보도록 하겠습니다.

 

이 컨텐츠가 도움이 되셨다면!!!

ㅇ ㅏ ㄹ ㅐ 를 꼬 오 옥!! 부탁 드립니다. 큰 힘이 됩니다.

 

 

마치며..

그리고 임베디드 SW를 처음 시작하여 공부하고 있는 분이라면 아래 카페에 오셔서 같이 공유의 장을 만들어 가면 좋을 것 같습니다.

https://cafe.naver.com/binaryembedded

 

 

임베디드 유니버스 : 네이버 카페

임베디드 유니버스 : 임베디드의 세계로 초대합니다.

cafe.naver.com

 

댓글