Ch1 Seminar/IP

LIN overview (4) LIN 검증

베린이 2023. 12. 8. 08:01
반응형

전에 한 달 동안 작업했던 LIN controller IP 설계가 끝나서 검증을 위해 체크리스트를 작성하고 있는데요, 이 글에 한번 정리해보려고 합니다. 혹시나 수정해야 할 부분이 있다면 댓글 환영입니다!!
 

- Register Read/Write

IP는 내부에 있는 register를 세팅하여 컨트롤됩니다. 이 register는 버스 접근을 통해 read/write 되는데요, 저는 APB bus를 기준으로 설계했습니다.
Register의 기본 값이 제대로 읽히는지
Register에 값이 제대로 쓰이고 읽히는지
확인해야 합니다.
 

- Data loopback

그다음으로는 데이터 송수신이 제대로 되는지 확인해야 합니다. 저는 LIN controller 2개를 BFM을 붙여서 연결하고 loopback test를 진행했습니다.
 

LIN loopback test

 
BFM이 뭔지는 추후에 설명드리도록 하겠습니다. 쉽게 설명하자면 모듈을 컨트롤하는 core의 역할을 한다고 보시면 되겠습니다. Master tx, Master rx가 잘 되는지 확인했습니다.
 

- Sleep, wakeup

LIN은 다른 IP에는 없는 sleep, wakeup 기능이 있었는데요, 이러한 기능들이 잘 작동하는지 확인했습니다.
 

- Error case

마지막으로 인위적으로 error가 발생하는 case를 만들어 LIN controllor가 이상을 잘 감지하는지 확인했습니다. 제가 설정한 error case는 다음과 같습니다.
 

  • Bit error
  • Checksum error
  • Timeout error

 
- slave only

  • Break error
  • Sync error
  • Parity error

 

1. Bit error

LIN protocol의 byte field는 1 start bit + 8 data bit + 1 stop bit로 총 10 bit입니다. (break field 제외)
 

 
start bit는 항상 low, stop bit는 항상 high 이므로 그렇지 않을 경우 에러가 발생합니다.
 

2. Checksum error

Master tx/rx 모두 마지막에 checksum check를 합니다. 만약 checksum 계산 결과가 맞지 않으면 checksum error가 발생합니다.
 

 

3. Timeout error

Byte field마다 inter-byte space라는 것이 존재합니다. 이건 spec 문서를 뒤져봤는데 딱히 정의되어 있지 않았었습니다. 그래서 제가 LIN controller를 설계할 때 이전 byte field의 stop bit 상황에서 다음 byte field의 start bit로 넘어가는 조건이 lin bus가 low로 떨어지는 것이었습니다.
그런데 어떤 이유에서든지 bus에서 신호가 들어오지 않으면 LIN slave 모듈이 작동이 이상해지는데요, 절대 이렇게 돼서는 안 됩니다. 그래서 통신 중간에 일정 시간 이상 신호가 들어오지 않으면 timeout error가 검출되고 interrupt를 발생시켜서 모듈을 초기화할 수 있도록 만들었습니다.
 

4. Break error (slave only)

앞에서 언급했듯 break field를 제외하면 stop bit 때문에 LIN slave는 10bit 안에 high 신호를 받게 됩니다. 오직 break field에서만 13bit 이상의 low 신호를 받게 됩니다.
 

 
그런데 만약 slave는 break field라고 인식하고 있는데 13bit 이내에 high 신호를 받게 되면 어떻게 될까요? 이건 slave에서 설정된 통신 속도가 master에 설정된 통신 속도와 맞지 않던지, 아니면 어떤 이유로 이 slave가 통신 중간에 버스에 참여했다고 볼 수 있습니다.(하드웨어니까 충격 같은 외부적 요인이 있을 수도 있잖아요?)
첫 번째 상황이던 두 번째 상황이던 문제가 있으니 에러를 검출하도록 설계했습니다.
 

5. Sync error (slave only)

Sync field에서는 slave가 항상 0x55의 값을 받습니다. 만약 값이 맞지 않으면 master - slave간의 통신속도가 맞지 않는 상황이므로 에러가 발생합니다.
 

 

6. Parity error (slave only)

마지막으로 PID에서 parity 에러를 검출하도록 설계했습니다.