인프런 커뮤니티 질문&답변

박연수님의 프로필 이미지
박연수

작성한 질문수

CAN 통신 - 자동차 신입이 알아야 할 모든 것

CAN 에러 처리 - 3. 에러의 종류 및 마무리

ack 기능 궁금한 점

작성

·

179

0

안녕하세요 강의 잘 수강하고 있습니다.

CAN통신의 ack기능에 대해 궁금한 점이 있는데

송신하는 제어기가 ack비트에 1을 채워서 보내고

수신제어기들이 정상적으로 잘 받았으면 0을 채워서 보낸다고

설명해주셨는데

 

버스에는 어짜피 한번에 하나의 제어기만 보낼 수 있잖아요?

 

예를 들어 1,2,3번 제어기가 있다고 할때

1번 제어기가 2,3번에 메시지를 보내고나서

2,3번이 잘 수신했다면 ack비트에 0을 채워서 보낼텐데

 

그때 2,3번은 can frame 전체중에서 ack비트에만 0을 채워서 보낸다고 이해하면 될까요?

 

답변 2

0

존버매니아님의 프로필 이미지
존버매니아
지식공유자

이해하신게 맞습니다.

수신측 제어기는 ack 라는 새로운 메세지로 답장을 보낸다는 개념이 아니고.

송신측이 보낸 메세지 프레임 중에서 ack 비트 부분만 0으로 채우는겁니다.

0이 도미넌트니까 버스 전체에 ack가 0 이 될꺼고. 송신측은 그걸 보고 내가 송신한 메세지가 문제 없이 다른 제어기에게 전해졌다고 판단하게됩니다.

박연수님의 프로필 이미지
박연수
질문자

빠른 답변 감사합니다.

그러면 송신제어기가 메시지를 보낼때 ack비트까지

작성하고 잠시 대기하면서 수신제어기들이 메시지를 정상적으로 수신하고 ack비트에 0을 쓰는 것을 확인한 뒤에, 다시 송신제어기가 end of frame을 보내면서 송신이 마무리된다고 보면될까요?

 

*ack비트를 보낸 뒤에 수신제어기들이 메시지를 정상적으로 확인하고 CRC체크하고 하는 과정들이 곧바로 이루어지진 않을 것 같아서 질문드립니다.

0

안녕하세요, 인프런 AI 인턴입니다.

박연수님께서 질문하신 CAN 통신의 ACK 기능에 대한 의문은 많은 분들이 공통적으로 가지는 궁금증입니다. CAN 통신 과정에서 ACK(Acknowledgment) 비트는 데이터 프레임이나 원격 프레임이 성공적으로 수신된 것을 표시하는 데 사용되며, 매우 중요한 역할을 합니다.

질문하신 내용에 대해 직접적으로 관련된 내용을 제공할 수 있는 링크는 다음과 같습니다:

  • 에러의 종류: CRC 에러와 Ack 에러의 차이점: 이 질문에서는 구체적으로 ACK 에러와 관련된 설명이 이루어지며, 송신자와 수신자 간의 신호 처리 방식에 대한 설명이 포함되어 있습니다. 링크에서 다루고 있는 내용은 CAN 통신 중 ACK 비트에 1을 채워서 보낸 후 수신기가 정상적으로 메시지를 받았다면 해당 수신기가 ACK 비트를 0으로 변경하는 과정입니다. 이 과정은 네트워크 상의 모든 수신기가 메시지를 정상적으로 받았는지를 확인하는 중요한 단계입니다.

ACK 메커니즘에 대해 조금 더 설명드리면, CAN 네트워크에서 한 노드가 메시지를 송신할 때, 모든 수신 노드가 해당 메시지를 수신하고 정상임을 확인한 경우에는 ACK 슬롯에 도미넌트(0) 값을 채웁니다. 이는 수신 노드들이 메시지를 제대로 받았다는 것을 의미하며, 이 과정은 하드웨어 레벨에서 자동으로 이루어지기 때문에 수신 노드가 별도로 전체 CAN 프레임을 송신하는 것이 아니라, 전체 네트워크 상에서 제어 신호를 통해 이루어집니다. CAN 네트워크의 이러한 특성은 효율적인 통신과 더불어 네트워크 상의 충돌을 방지하는 데 기여합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박연수님의 프로필 이미지
박연수

작성한 질문수

질문하기