답변:
그렇게 할 수는 있지만 CAN 버스에서 얻는 것은 CAN 전압 레벨을 사용하는 UART입니다. 버스의 CAN 장치와 통신하려면 MCP2551에 CAN 프로토콜 메시지를 제공해야합니다. 청취와 동일 : CAN 메시지가 UART 형식과 매우 다르기 때문에 UART는 메시지와 함께 무엇을해야할지 모릅니다. 항상 최소한 프레임 오류가 발생하며 메시지 내용이 표시되지 않습니다.
이 이미지는 CAN 메시지의 구조를 보여줍니다 :
캔 인터페이스가 주변에 많은 마이크로 컨트롤러있다 산세 송수신기는. 이를 위해 MCP2551이 설계되었습니다. 과거에는 4 개의 CAN 인터페이스가있는 NXP LPC2294를 사용했습니다. 각각 CAN 버스에 연결하려면 MCP2551이 필요합니다. NXP의 최신 컨트롤러에는 LPC1800 제품군이 포함되어 있으며이 중 모든 구성원이 CAN을 지원합니다.
MPSSE 모드 (UART는 잊어 버림 ), MCP2515 및 MCP2551 에서 FT2232H를 사용하여 USB / CAN 인터페이스를 만들었습니다 . MCP2515는 여기서 놓친 핵심 요소입니다. 그것이하는 일을 잘 연구하십시오. 프레임, ACK, 체크섬 생성 및 확인, 메시지 필터링 및 CAN 노드가 표준에 의해 수행해야하는 덜 명백한 작업을 수행하는 것은 실제 CAN 컨트롤러입니다. 스니퍼를 원할 경우 MCP2515에는 버스에서 전송을 보장하지 않는 청취 전용 모드가 있습니다. MCP2551은 RS-232 용 MAX232 또는 RS-485 용 ADM485와 유사한 단순한 물리 계층 어댑터입니다.
FTDI MPSSE 기술은 본질적으로 인터럽트를 지원하지 않기 때문에이 아키텍처는 완벽하지 않습니다. 이렇게하면 USB 호스트 컨트롤러에 많은 부하가 발생하지만 여전히 메시지 손실을 보장하지는 않습니다 (MCP2515는 "오버플로 모드"를 활성화 한 경우 내부에 최대 2 개의 수신 된 메시지를 저장할 수 있으며 그렇지 않은 경우에는 하나만 저장할 수 있음). STM32F105와 같은 CAN 및 USB 주변 장치가 내장 된 적절한 마이크로 컨트롤러가 훨씬 더 나은 솔루션입니다 (103은 USB와 CAN을 동시에 사용할 수 없음). 이 아이디어를 정확하게 구현하려면 이 프로젝트 를 참조하십시오 . stevenh가 제안한 LPC18xx도 작동하지만 LPC17xx는 더 저렴하고 찾기 쉽습니다.
질문을 이해하면서 기존 CAN 버스에서 청취하고 싶기 때문에 UART를 전혀 사용할 수 없습니다. CAN과 UART Siganlling은 완전히 다릅니다.
이론적으로 MCP2551에서 나오는 CAN 수신 라인을보고 CAN 트래픽을 디코딩 할 수 있습니다. 쉽지는 않지만 이론적으로는 가능합니다. 특수한 CAN 하드웨어가 없으면 CAN 비트 레이트보다 몇 배 더 빠른 속도로 샘플링하고 나중에 소프트웨어에서 해당 비트 스트림을 디코딩해야합니다. 250kbit / s CAN을 디코딩하려면 약 1Mbit / s로 기록해야합니다.
마이크로 컨트롤러를 사용하는 것이 훨씬 쉽습니다. PIC 18F2580 및 기타 유사한 프로세서에는 CAN 주변 장치가 내장되어 있습니다. 하드웨어는 모든 비트 레벨 디코딩을 수행하고 전체 CAN 프레임을 수신합니다. 그런 다음 프로세서는 UART를 통해 수신 한 CAN 프레임을 PC로 보낼 수 있습니다.