• 카테고리

    질문 & 답변
  • 세부 분야

    모빌리티

  • 해결 여부

    해결됨

에러 발생 시 메세지 전송에 대한 질문

23.05.02 15:33 작성 조회수 259

0

안녕하세요. 에러 수업을 듣다가 질문이 있어 남깁니다.

 

원래 어떤 제어기가 메세지를 송신하고 있을 때는, 다른 제어기들은 컨트롤러가 버스에 메세지를 누군가가 보내고 있는지를 확인하고, 이 메세지 송신이 끝나면 송신을 원하는 메세지들이 앞다투어 메세지를 보내다가, ID가 작은 우선순위부터 다시 메세지를 보낸다고 이해했습니다.

 

즉, 결국 하나의 제어기만이 버스에 메세지를 송신할 수 있습니다.

 

그런데, 에러 발생 시 passive의 에러 발생을 보내는 힘이 약한 이유를 듣고 보니, 얘는 어떤 제어기가 송신중임에도 에러 인지를 위해 바로 카운터를 보낸다고 하셨습니다.

 

그러면 0이던 1이던 에러 카운터를 보내면서, 이미 송신중이던 제어기의 데이터가 제대로 다른 제어기들에게 송신이 안될 것이라 생각이 됩니다.

 

결론적인 질문을 말씀드리면,
1.메세지를 수신하고 있는데 에러가 발생했을 때, 이미 다른 제어기가 송신중임에도 에러 카운터를 보내는 것이 맞나요?
2.혹시 맞다면, 이미 송신중인 데이터가 제대로 송신이 어떻게 될 수 있는지 궁금합니다. 에러 카운터가 송신중인 데이터와 버스에 섞일 것이라 생각이 됩니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요. 제가 질문을 제대로 이해했는지 모르겠지만 답변 드리겠습니다.

0.

먼저 잘못이해하고 계신게 있는데 에러카운터는 메세지에 담아서 보내는 값이 아니라 각각의 제어기 내부에서 관리되는 값입니다.

에러가 발생되면 내부적으로 에러카운트 값을 올리는 것입니다. 이 값을 메세지에 담아서 보내지는 않습니다.

카운터 값을 보내는건 아니고, 에러를 알리기 위해 에러메세지(에러프레임)을 보내게 됩니다.이때 에러프레임 보내는 제어기의 상태에 따라서 active error frame을 보낼 수도 있고 passive error frame을 보낼 수도 있죠.

 

1.다른 제어기가 메세지 송신하고 있더라도 에러로 인지했으면 에러프레임을 보내는게 맟습니다. 그러면 새롭게 송신하는 에러프레임과 원래 보내고 있던 송신 메세지가 섞여서 메세지 송신이 안 될수도 있고 잘될수도 있습니다.

2.패시브 에러프레임은 연속된 recessive 값입니다. 캔에서 dominant와 recessive 가 동시에 출력되면 버스에는 dominant가 실립니다. 그러니까 패시브 에러프레임은 송신해봤자 기존에 보내던 송신메세지에 영향을 못미쳐서 메세지 송신은 잘될겁니다. (원래 송신하려는 값이 recrasive면 recessive가 나갈거고, 원래 송신하려는 값이 dominant면 패시브에러 보내봤자 dominant가 출력되니까.. 결과적으로 패시브 에러프레임을 보내도 원래 송신하던 메세지에 영향을 못줍니다그래서 패시브라고 불리는거죠.

 

반면 액티브 에러프레임은 연속된 dominant기 때문에 기존에 송신하던 메세지를 망가지게해서 송신중이던 메세지는 정상적으로 송신이 안됩니다.

이 답변으로 해결이 됐나요..??

정세훈님의 프로필

정세훈

질문자

2023.05.02

네 해결 되었습니다. 감사합니다.