도와주세요!!
글 수 15,339
2014.03.03 12:15:55 (*.222.227.231)
16846
안녕하세요, CAN 통신 관련해서 질문드립니다.
두장비가 CAN 통신으로 1:1 연결이 되어있습니다.
새로운 장비로 이 CAN 패킷들을 확인하고 싶은데요,
여기서 어떤 CAN 장비를 써야 할지 모르겠습니다.
찾아보니 리피터, 브릿지, 게이트웨이 같은 장비들이 나오더군요.
생각같아서는 리피터 달고 T형 버스로 선 하나 떼어오면 될것도 같은데...
너무 단순하게 생각하는 걸까요.
------------------------------------------------------------------
감사합니다.
답글 잘 읽었습니다.
지금 장비가 CAN 인터페이스로 두개가 통신을 하는데,
두 장비에 직접 접근이 불가한 상태입니다.
그래서 CAN 통신 케이블을 따와서 수신하려고 하는 상황이구요.
두 장비를 제 쪽에서 손댈수있는게 아니어서 어떤 방법을 써야하나 싶어서 올린 글이었습니다^^
CAN은 노드가 추가/제거 되어도 하드웨어적, 소프트웨어적 수정없이 가능하다는 글을 보았습니다.
설정하는 것은 해당 장비 파트에 요청하면 되는 것인지,
별도의 설정없이 데이터를 가져와서 확인할 수 있는 것인지,
결국 노드가 하나 추가되는 것인데, 이 때 네트워크 장비를 어떤것을 써야 될지 모르는 부분이었습니다...
SPI나 I2C는 사용해봤는데, CAN 이라는 새로운 방식을 보면서 물리적으로 어떻게 해야하는지 모르겠습니다 ^^;;;
2014.03.03 20:54:39 (*.84.25.116)
패킷을 확인하고 싶은거면 장비 쓰지 않고도 tcpdump 로 CAN 인터페이스의 패킷을 떠볼 수 있습니다.
장비 로컬에서 ifconfig 으로 확인해보시면 can 인터페이스가 보일껍니다.. can0 던가.. 이름이 기억이 안나지만
ifconfig 으로 확인해보면 바로 이게 can 인터페이스구나라는게 감이 오실겁니다.
아마도 장비(개발하는 장비)에 tcpdump 가 없을 건데요..
그건 tcpdump 유틸리티 소스를 찾아서 해당 장비용으로 컴파일을 해주셔서 사용하시면 되요..
만약 안드로이드라면 안드로이드용 tcpdump 패키지가 인터넷에 찾아보면 그냥 쉽게 나오구요..
리눅스라면 그냥 ARM(장비가 ARM 인가요?) 컴파일을 하시면 작동 잘될겁니다.
옛날에 제가 해봐서요..
그리구.. can 인터페이스는 가상 인터페이스도 만들수가 있습니다. can1 처럼 가상 인터페이스도 만들수가
있습니다.. 기본적으로 리눅스나 안드로이드 커널에 CAN 가상 인터페이스를 만들수 있는 옵션이 켜져서
컴파일 되더군요.. 저는 장비에 CAN 테스트할 수 있는 장비를 공수받지 못해서 가상인터페이스를 만들어서
패킷이 들어가는지 안들어가는지 라이팅(can 소켓에 패킷을 쏴보는)테스트를 해봤었었습니다.
근데, 님은 CAN 장비를 공수받으신 것 같으니 굳이 그렇게 가상인터페이스를 필요로하진 않은 상태이시구요..
그냥 tcpdump -i can0 처럼 CAN 인터페이스에 통신데이타(패킷)를 모니터링하실수가 있습니다..
장비에 맞게 toolchain 설정 잘하시고 tcpdump 소스 잘 찾으셔서(해당 장비용에 맞도록) 컴파일만 하시면 잘되요..
2014.03.03 21:00:46 (*.84.25.116)
오해하실거 같아서 추가로 적어드리면..
테스트 장비가 없으면 CAN 인터페이스에 오가는 패킷을 테스트할 수가 없습니다.
그니까, 자동차에 탑재될 CAN 인터페이스가 있는 장비가 있고 자동차 차체에 CAN 연결장비가
있을텐데 테스트 장비를 받았다면 이 두 장치 사이에 껴있는 경우가 있을수가 있고 차체장비는
떼어내고 테스트 장비와 1:1로 연결시킨 경우가 있을 겁니다.
제가 테스트 장비가 필요없다고 말씀드린 것은 그냥 차와 연결되어 있는 상태라면 장비로 접속
하셔서 ifconfig 을 쳐보시면 CAN0 인터페이스가 on 되어있다고 나올겁니다.
그럼 이 상태에서 tcpdump 로 패킷을 모니터링하실수가 있다는 얘깁니다. 장비가 차체나 테스트
장비와 연결이 전혀 안되있는 상황이라면 패킷 모니터링이 당연 안됩니다..
2014.03.06 06:58:59 (*.84.25.116)
어차피 리눅스는 모든 통신장치를 표준 인터페이스로 처리하고 있습니다.
아무리 새로운 통신장치가 나와도 모두 표준 인터페이스 처리가 되므로
소켓통신에 지나지 않기 때문에 일반 이더넷 생각하듯이 생각하셔도 무방
합니다. 제가 드린 말씀은 이더넷으로 1:1로 인터페이스가 연결되어있어야
통신을 테스트 해볼 수 있듯이 마찬가지 개념이라는 것이었습니다.
단지, 패킷을 모니터링 해보기 위해서 여기에 새 장치를 연결할 필요가 없다는
얘기였네요.. 1:1 연결된 통신장치의 모니터링을 하기위해 제3 노드를 추가하는
거라면 차라리 tcpdump 를 이용하거나 로우패킷을 다루는 방법으로 외부로
빼서 볼 수있는 방법이 많이 있다는 얘기였거든요.. 굳이 제3 노드가 필요한
경우가 아니라 단순 패킷 모니터링을 위한 방법을 찾기위해서라면 1:1 로만
연결된 상태면 충분하고 제3노드 추가는 비용이 많이 드는 방법이라는 얘기였음..
2014.03.06 07:46:41 (*.84.25.116)
-_-;
황당하네요..
장비에 접근이 불가능해서 제3노드를 추가하려고 하신거라뉘..
-_-;
작업환경이 열악하신거 같다눈..
예전에 저는 개발중인 로컬장비에는 접근이 됐었기 때문에 그 기준으로
설명을 해드렸죠.. 당연히 개발장비를 대상으로 질문을 하시는줄 알았는데
예상외의 상황을 겪고계신듯 하네요..
(저는 소프트웨어 프로그래머쪽이라 물리적인 인터페이스는 전혀 생각해본
적이 없어서 탭을 낼 수 있는지는 모르겠군요.. 소프트웨어적인 해결법만 고안해
본다면 몇가지 생각해볼 방식이 더 있을지도 모르겠지만.. 님은 지금 물리적인
선에서 해결하실려고 하신거 같으니 그쪽으로 집중해서 찾아보시는게 더 났겠
네요..)