CAN통신 - 버스형 토폴로지
제어기를 버스에 연결하고 제거하기 용이하다
전부와 연결된 전선을 통해 메세지를 보내면 특정한 목적지가 있는 것이 아니라 전체에 메세지를 보내주게 됨(broad cast 방식)
실제로 통신을 하려면 제어기를 버스에 연결해야함. 연결하기 위해 D-Sub 커넥터를 이용한다.
버스 양 끝단에서 신호가 반사돼서 신호가 왜곡되는 현상을 막기 위해 개발중에는 120옴 저항이 달린 커넥터를 써야함
전기적인 신호를 만들기 위해 출력되는 전선이 2개임 CAN-High, CAN-Low
네트워크에 참여하는 제어기들이 많이 있는데 각각의 제어기들이 baud rate을 각자 쓰는 것이 아니라 하나의 통일된 baud rate을 써야하고 sampling point역시 다 맞춰서 사용해야함
Baud rate은 완성차 업체에서 처음에 통신 컨셉을 정할 때 하나로 정해줌.
실제로 CAN 통신이 동작이 되려면 우리가 사용하는 MCU안에 CAN controller라고 하는 peripheral가 제공. Can Controller와 CAN-High, CAN-Low 사이에 인터페이스를 CAN Transceiver가 제공
CAN 통신에는 메세지를 보내면 메세지가 네트워크 전체에 보내지기 때문에 결국 한번에 하나의 제어기만 보낼 수 있고, 특정 순간에 제어기 하나만 메세지를 보내고 있음
메세지마다 ID가 있었고 한번에 하나의 메세지만 보낼 수 있기 때문에 동시에 여러개의 제어기가 여러개의 메세지를 동시에 쓴다면 메세지의 우선순위가 있어 우선순위가 높은 것을 먼저 보내고 그 다음에 우선순위가 낮은 것을 보냄
메세지 안에는 ID 외에도 Data 영역이라는 것이 있는데 Data영역에 담는것이 우리가 실제로 보내려는 정보이고, 정보에는 여러가지가 담겨 있고 정보 하나하나를 시그널이라고 부른다.
메세지마다의 ID, 메세지의 이름, 어떤 시그널들이 들어 있는지, 시그널들의 각종 속성들이 CAN DB에 담겨있고 CAN DB라는 것들은 CAN DBC라는 포맷으로 작성되어 많이들 쓴다.
그리고 CAN protocol을 보면 고장을 감지하여 Error state를 감지하여 고장이 많이 발생하면 Error passive가 됐다가 그래도 계속 고장이 발생하면 Bus off가 되어 통신을 배제하게 된다.(우리 입장에선 CAN Controller가 에러를 감지하여 Bus-off상태가 되면 MCU가 알려줌 -> 따라서 그것을 보고 어떻게 동작할 것인지..)
지금까지는 High Speed CAN을 기준으로 설명했는데 CAN FD라는것이 있음. CAN FD는 Data영역의 크기가 High Speed CAN은 8byte인데 반해 CAN FD는 64byte까지 쓸 수 있음. 최대 Baud rate도 8M/bps로 훨씬 빠름
그런데 메세지 전체가 빠른 것이 아닌 메세지의 ID영역까지는 High Speed CAN과 동일한 속도로 쓰이다 Data영역에서만 속도를 올려 통신을 한다. CAN FD의 장점은 기존에 쓰던 High Speed CAN과 같이 쓸 수 있다.