socketcan 예제

socketcan 예제
0 August 2, 2019

CAN 장치를 설치하려면 can_dev 모듈을 로드하고 IP 링크를 구성하여 CAN 버스 비트 레이트(예: 예: 오류 확인 없이) 소켓 생성 후 바인딩된 대신 CAN_BCM 소켓을 연결해야 합니다. 스니펫은 원시 인터페이스를 사용하여 패킷을 보내는 SocketCAN API의 작동 예입니다. 그것은 리눅스 커널에 문서화 된 노트를 기반으로합니다. [3] 애플리케이션 A가 실시예(1)에서 수신하는 것과 동일한 정보를 실시(2)에서 수신하도록 하기 위해 적절한 노드상에서 전송된 CAN 프레임의 로컬 루프백이 필요하다. SLCAN 기반 장치는 직렬 인터페이스를 제공합니다. 처음에는 이 직렬 인터페이스를 가상 CAN 장치와 연결하는 특수 데몬(can-utils의 slcand)이 필요합니다. 기본적으로 이러한 장치는 slcan 이름 베이스를 가져옵니다. 이것은 3Mbit /s에서 작동하는 USB -to-CAN 어댑터의 예입니다 : 지금까지 IP 도구를 통해 SLCAN 기반 장치에 대한 비트 레이트 레이트를 설정할 수있는 방법이 없으므로 slcand 호출 : -sX 매개 변수로이 작업을 수행해야합니다. 위의 예에서 -s8은 어댑터의 비트 레이트 속도를 1Mbit / s로 설정합니다. CAN 비트 레이트 에 대한 자세한 내용은 아래 표를 참조하십시오: 일반적으로 CAN FD의 처리는 앞에서 설명한 예제와 매우 유사합니다. 새로운 CAN FD 지원 CAN 컨트롤러는 CAN FD 프레임의 중재 단계와 페이로드 단계에 대해 두 개의 서로 다른 비트 레이트와 최대 64바이트의 페이로드를 지원합니다. 이 확장된 페이로드 길이는 CAN_RAW 소켓과 같이 고정된 8바이트의 페이로드(구조형 can_frame)로 CAN 프레임에 크게 의존하는 모든 커널 인터페이스(ABI)를 끊습니다. 따라서 예를 들어 CAN_RAW 소켓은 CAN FD 프레임과 (레거시) CAN 프레임을 동시에 처리할 수 있는 모드로 소켓을 전환하는 새로운 소켓 옵션 CAN_RAW_FD_FRAMES를 지원합니다(RAW 소켓 옵션 CAN_RAW_FD_FRAMES 참조).

단일 CAN 식별자에 최적화된 필터의 이점을 활용하려면 CAN_EFF_FLAG 및 CAN_RTR_FLAG 비트 와 함께 CAN_filter.mask로 설정해야 합니다. can_filter.mask의 CAN_EFF_FLAG 세트 비트는 SFF 또는 EFF CAN ID가 구독되는지 여부가 중요하다는 것을 분명히 합니다. 예를 들어 위의 예: 추상화: 대부분의 기존 문자 장치 구현에서 CAN 컨트롤러용 하드웨어 별 장치 드라이버는 응용 프로그램이 작업할 수 있는 문자 장치를 직접 제공합니다. 이것은 적어도 유닉스 시스템에서 문자 및 블록 장치 모두에 대한 매우 드문 일이다.

Posted by medmedia