2016-11-22 6 views
1

CAN 프로토콜이 어떻게 작동하는지 거의 이해합니다. 두 노드가 동시에 네트워크를 사용하려고 할 때 하위 ID 프레임이 우선 순위를 가질 수 있고 다른 노드가이를 감지하고 중지합니다.소켓은 어떻게 중재를 처리합니까?

이것은 socketcan을 사용할 때 추상화 된 것처럼 보입니다. 우리는 파일 설명자처럼 쓰고 읽습니다. 나는 오해를하고 있을지 모르지만 나는 대부분의 문서 (http://lxr.free-electrons.com/source/Documentation/networking/can.txt)를 훑어 보았고 그것이 분명하게 묘사되어 있다고는 생각하지 않는다.

우리의 프레임이 가장 낮은 ID 프레임이 될 때까지 write()를 차단합니까? 아니면 소켓이 네트워크 준비가 완료 될 때까지 프레임을 버퍼링합니까? 그렇다면 사용자에게 이것이 발생했음을 통보합니까? 아니면 루프백을 사용합니까?

+0

오래 전부터 알고 있습니다. 당신은 이것들에 대한 답을 찾았습니까? – mik1904

답변

1

write은 채널 경합을 차단하지 않습니다. 같은 이유로 TCP 소켓이 있기 때문에 차단할 수 있습니다 writewould (거의 없습니다).

CAN 주변 장치는 커널에서 전송할 프레임을 수신하고 매체 액세스 제어 프로토콜 (MAC 프로토콜)을 수행하여 유선을 통해 전송합니다. SocketCAN은이 프로토콜 계층에 대해 아무것도 모릅니다.

프레임이 버퍼링되는 곳은 주변 장치/드라이버에 따라 다릅니다. 체인 커널 드라이버 주변 장치는 자체 제어 흐름 메커니즘이있는 3 개의 체인 된 FIFO로 동작하지만 일반적으로 (필요한 경우) 버퍼링하는 드라이버입니다. 대부분의 주변 장치는 사용 가능한 메모리가 적기 때문에

SocketCAN 인터페이스 (링크 4.1.2 참조)를 사용하여 특정 플래그를 제공하여 CAN 스택 프로토콜의 오류를 구독 할 수 있습니다 (소위 "오류 프레임"으로 표시됨). 응용 프로그램 계층에서 오류 정보를 가져옵니다.

물론 루프백 인터페이스를 확인하여 제대로 전송 된 프레임을 확인할 수는 있지만 잔인 함으로 위에서 설명한 오류보고 메커니즘을 대신 사용해야하며 사용하기가 더 쉽습니다.