강좌 <10>: CAN 통신사용목표 : 이번강좌에서는 STM32F 내부의 CAN 통신에대해서다루어봅니다작성일자 : 2010.6.2 LCD & 버튼보드사용시험 BT1 : 표준형태, 0011.. 전송 BT2 : 확장형태, 0011.. 전송 BT3 : 확장형태, 0123.. 전송 BT4 : 표준형태, 0123.. 전송 BT5 : 메시지지움 CAN 통신은자동차내부전장및산업용제어기에많이사용됩니다. 노이즈에강하고, 프레임을하드웨어적으로처리하므로소프트웨어처리가비교적단순합니다. 본강좌에서는 CAN 통신의기본적인설명과실행예제를첨부하였으므로사용자가프로그램을수정첨가하면서사용하시면됩니다. CAN 통신시험장비 : CANPro Analyzer CAN 수신데이터 LCD 표시예 CAN 통신파형관찰 ACK 신호 본자료는원본손상없이배포활용가능합니다. Tel:031-342-3000, Fax:031-343-0003 경기도안양시동안구호계동 1027 안양 IT밸리 504호 1
CAN 통신특징살펴보기 CAN 통신이력 : 1983 : Bosch 사에서자동차용네트워크프로젝트시작 1986 : Bosch사에서 CAN 통신프로토콜소개 1987 : Intel 및 Philips사에서첫번째 CAN controller 제작 1991 : Bosch에서 CAN 스펙 2.0 발표 1992 : CAN in Automation (CiA) 유저그룹결성 CiA에서 CAL(CAN Application Layer) 프로토콜발표 Benz사에서CAN 통신을사용한첫번째자동차출시 1993 : ISO 11898 표준제정 1994 : 1st international CAN Conference (icc) by CiA DeviceNet 프로토콜소개 (Allen-Bradley 사 ) 1995 : ISO 11898 확장포맷발표 CANopen 프로토콜발표 (CiA) 2000 : time-triggered communication protocol for CAN (TTCAN) 개발 응용분야 : Passenger cars Trucks and buses Off-highway and off-road vehicles Passenger and cargo trains Maritime electronics Aircraft and aerospace electronics Factory automation Machine control Lifts and escalators Building automation Medical equipment and devices Non-industrial control Non-industrial equipment CAN 통신특징 : Multi-Master 구조 : 통신신호충돌대책이있음 (CSMA/CA). 메시지 ID 간우선순위있음. 데이터송신충돌정지시, 선로가비어있을때자동재전송기능. 통신속도 : 최대 1 MBPS까지통신가능 통신데이터수 : 8바이트 ( 산업용 / 차량용제어장치에적합 ) 통신프로토콜 / 에러처리를 Hardware적으로처리. 다수의장치 (Standard: 11bit, Extended:29bit ID구분 ) 간통신가능. 노이즈환경에강함 ( 응용분야예 : 자동차내부신호간통신 ) 비용이경제적임 : 여러회사의 MCU 내에기본장착이늘고있음. 예 ) Motorola, Philips, TI, Hitachi, Dallas, Intel 등 CAN 통신을개발한회사 : 독일의 Robert Bosch 사 2
CAN 통신포맷 CAN 통신의편리한점 : 통신포매관리를프로그램에서하지않고하드웨어적으로처리 CAN 통신의최대데이터수는 8바이트임표준형태 (2.0A) 는 ID가 11비트이고, 확장형태 (2.0B) 는 ID가 29비트임통신속도는최대 1Mbps 임 데이터수는최대 8 바이트임, 더많은양의데이터를보내려면 ID 를사용하여여러프레임으로나누어전송하면됨 18 비트가추가되었음 3
CAN 통신동작방식 5V R CAN BUS line 하나의통신선로에여러장치연결가능 TX1 RX1 TX2 RX2 TX3 RX3 통신신호를오픈컬렉터형태신호로이해바람 여러장치가신호를함께보내고있는데신호상태를피드백받으면서진행, 보낸신호와동일하면다음비트진행그런데내가 High 상태를보내고있는데다른장치가 Low를보내면선로상태는 Low가됨. 그러면본인은전송을즉시중지함. 따라서 Low값을보낸장치가우선순위가높게진행. 중간에전송을중지한장치는다음에선로가비어있을때재전송시도. 전송을잘끝마친장치는송신 OK!!! 뭐 ~ 그런원리로진행합니다. 이해가안되시면왼쪽파형을잘 ~~ 살펴보세요. 이해될때까지. 4
통신의 6 계층 : CAN 통신은어떻게분류? 통신을그래도좀한다하시는분들은좀유식하게레이어를 6계층으로나누어다루는거같아요. ( 저도잘모르는데, 아는체하는거임 ~) 아래왼쪽과같은 6 계층이있는데, 가장아래층은실제통신의매체, 예를들면 RS485 방식또는 LAN 통신과같은차동또는펄스트랜스사용, 멘체스터방식, 바이폴라방식등그런뭐그런부류가있고, 제일위층에는응용계층이있는데, Ethernet에서는그래도 6계층으로어느정도나누어설명하는데, CAN 통신은비교적간단하므로 3계층으로나누어다루는거같습니다 OSI Seven Layer model Application Layer Presentation Layer Session Layer CAL(CAN Application Layer): Philips Medical System 에서개발현재는 CIA(CAN in Automation) user group에서관리 CANopen : CAL의구현, CiA DS-301에정의되어있음. PCAL (Portable CAN Application Layer): CAL 구현의또다른예 German Federal Armed Forces 대학에서개발 DeviceNet : CiA 에서공인된 Application Layer Rockwell/Allen-Bradley에서개발 SDS(Smart Distributed System): CiA에서공인된 Application Layer Honeywell에서개발 CAN Kingdom: CiA에서공인된 Application Layer, Kavaser 개발 Transport Layer Network Layer Data Logical Link Control(LLC) Media Access Control(MAC) Link Physical Layer LLC Acceptance Filtering Overload Notification Recovery Management Physical Layer Bit Encoding / Decoding Bit Timing Synchronization Driver/Receiver Characteristics MAC Data Encapsulation / Decapsulation Frame Coding(Stuffing, Destuffing) Medium Access Management Error Detection Error Signaling Acknowledgement Serialization / Deserialization 5
CAN 통신프레임 : 데이터프레임 CAN 의통신프레임에는크게 4 개의프레임이있습니다. 데이터프레임 (DATA FRAME), 리모트프레임 (REMOTE FRAME), 에러프레임 (ERROR FRAME), 오버로드프레임 (OVERLOAD FRAME) 데이터프레임 : 데이터프레임은아래와같은데이터를전송하는포맷이죠. 버전에따라 2.0A, 2.0B나나누어지고, 8바이트까지데이터를가지고있고 Standard Data Frame(2.0A) Extended Data Frame(2.0B) SOF (Start of Frame) : 프레임의시작의미 Identifier : 표준프레임 (11 비트 ), 확장프레임 (11+18 = 29 비트 ). 이 ID 로메시지우선순위결정및메시지수신여부결정. 기본항목을살펴봅시다. RTR (Remote Transmission Request) : 데이터프레임과리모트프레임구분데이터프레임은항상 0 (dominant) 상태임. SRR (Substitute Remote Request) : 표준프레임의 RTR 위치점유 IDE (Identifier Extension) : 표준프레임과확장프레임구별 r0,r1 : 예약 DLC (Data Length Code) : 데이터프레임의데이터바이트수, 범위 : 0 ~ 8 Data : 8 바이트크기, MSB(Most Significant Bit) 부터송신됨 CRC (Cyclic Redundancy Check) : 16 비트체크섬 (checksum) ACK (Acknowledgement) : 응답 EOF (End of Frame) : 프레임의끝의미 6
CAN 통신프레임 : 리모트 / 에러 / 오버로드프레임 리모트프레임 : 리모트프레임은데이터프레임에서 RTR 비트가 1 상태이고데이터영역이없는형태를취합니다. 리모트프레임은데이터를요구하는데사용되며, 리모트프레임의요구를받은장치는데이터프레임으로응답하겠죠. 리모트프레임에는데이터영역이없음 송신메일박스 리모트프레임 (RTR = 1) 데이터프레임응답 송신메일박스가자동응답기능이설정되어있고 ID 가일치해야응답함 에러프레임 데이터프레임리모트프레임 6 비트에러플래그 ( 첫번째 ) 6 비트에러플래그 ( 두번째 ) 다른로드에서 8 비트에러경계 에러프레임은프레임에프레임에에러가발견된경우, 일부러규칙을어기는 ( 스터핑에러 ) 프레임을날려, 에러있음을알립니다. 에러프레임은 0 상태의 6~12비트크기의에러플래그와 1 상태의 8비트크기에러종료상태로이루어져있으며, 현재의송신프레임은에러가있으므로다시전송하라는의미로비트 stuffing 규칙을일부러손상시키며, 따라서현재전송중인장치는에러로인해현재의프레임이실패하였음을인식하고즉시중지하여다음의재전송기회를기다리겠죠? 뭐 ~ 좀복잡한거같은데, 사용자입장에서는이프레임을신경쓰지않아도됩니다. 다 ~~ 하드웨어적으로처리되므로 오버로드프레임 오버로드프레임은 CAN 제어기가아직이전메시지의처리를마치지못한경우다음메시지의시작을지연시키기위해서사용되며, 오버로드프레임은에러카운터수에영향을미치지않아요. 프레임의끝 (EOF) 6~7 비트오버로드플래그 8 비트오버로드경계 마찬가지로사용자는몰라도됩니다. 다 ~~ 하드웨어가알아서하므로 ~~ 7
비트스터핑이무엇인가? CAN 통신에서는비동기통신에서와같이 NRZ(Non Return to Zero) 코딩방법을사용합니다. 다시말해 1비트동안은같은값을유지하죠. 따라서같은상태가계속이어질수도있고, 이경우수신측에서는비트의경계를알수없으므로오차가누적될수있겠죠. 비동기통신의경우에는바이트단위로구분 ( 시간이짧음 ) 하고, 스타트, 스톱비트등이있으므로클럭의동기를쉽게잡을수있지만, CAN의경우에는프레임이여러바이트로구성되어길이가길어지므로비트극성이바뀌는시점이길어져서에러가발생할수있으므로이에대한대책이필요합니다. 이러한대책으로 CAN에서는 5 비트동안같은상태가유지되면반대상태를 1 비트추가하여송신하고, 수신장치는이를고려하여원래대로다시복원합니다. 이것이바로비트스터핑입니다. 그러면연속하여 5비트이상동안 0 또는 1 상태가지속되지않겠죠. 그러면 ~~ 샘플링위치에러가적어질수있다는 비트스터핑이이해가안되시는분은그냥몰~~ 라도돼요. 다 ~~ 하드웨어가알아서처리하므로 보낼신호 1 2 3 4 5 6 추가비트 버스신호 1 2 3 4 5 6 받은신호 1 2 3 4 5 6 8
CAN 통신에는어떤종류의에러들이있나? CAN 통신이자동차와같이노이즈가심한환경에서도충분히잘동작하여그동안신뢰성이검증된이유중에하나가에러처리라도생각도되는데, 생명을맡기고동작시키는시스템에서통신에러가발생하여오작동을한다 끔찍하겠죠 뭐 ~ 바로퇴출이되겠죠. CAN 통신은훌륭한에러검출능력이있습니다. 아래그림에서와같이철저히에러를검출하죠. 그래서 CAN 통신은신뢰성이높고, 많은소자에서계속채택되어사랑을받고있어요 송신장치에서발생하는에러 : BIT 에러 : 보낸비트와받은비트가서로다르면비트에러발생 ACK 에러 : ACK 슬롯동안수신장치가 0 을보내주지않을때, 이에러는모든수신장치가접속되어있지않을때 ( 통신선로가끊겼을때등 ) 발생. 수신장치에서발생하는에러 : CRC 에러 : CRC 가맞지않을때에러발생 STUFF 에러 : 스터핑 (stuffing) 규칙이맞지않을때에러발생 FORMAT 에러 : CRC Del, ACK Del, EOF의영역에 0(dominant) 값이나타날때발생 CRC 에러 ACK 에러 SO OF Ide ntifi er Fi eld RT R Con ntrol Fi eld Data Field CRC Seq quenc e CRC C Del AC Sl CK ot ACK Del End of Fra ame IT TM 만일에러가발생되면즉시에러프레임이전송된다. 단 CRC 에러가발생된경우 EOF 의첫번째비트가나올때까지에러프레임을보내지않는다. STUFF 에러 FORMAT 에러 그이유는모든다른장치들이 ACK 를받을때까지기다리도록하기위함이다. BIT 에러 9
CAN 통신의에러상태이동살펴보기 한국사람들로꼼꼼 ( 좀섬세하고, 철두철미의의미, 이거 ~ 나만쓰는사투리인가?) 하지만, 독일사람들도매우꼼꼼한거같아요. CAN 통신도독일사람들이만들었어요. 좀머리가아프지만좀설명을해보죠. CAN 제어기내부에송신에러카운터 (TX_CNT) 와수신에러카운터 (RX_CNT) 가있으며, 이들카운터는에러가검출되면 1씩증가하고, 에러없이성공하면 1씩감소하며, 이들에러카운터수에따라노드의상태가달라집니다. 초기상태는에러액티브 (ERROR ACTIVE) 상태이며, 에러카운터값이 127 보다크면에러패시브 (ERROR PASSIVE) 상태가됩니다. 이때에는액티브에러프레임 (6비트 0상태 ) 을보내지못하고, 패시브에러프레임 (6비트 1상태 ) 을보낼수있어요. 즉에러프레임을발생하는권리를제한시키는데, 그이유는자꾸이상한에러를발생하여전체통신망을마비시킬수있기때문이죠. 또한두개의연속적인메시지전송을못하도록부가적인지연시간을갖도록합니다. 즉에러발생이많은노드는전송회수를제한해요. 만일송신에러카운터가 255를넘으면버스오프 (BUS OFF) 상태가되어이노드는 CAN 통신망에서접속을끊어버립니다 ( 이장치는많은에러가발생하므로뭔가문제가많다 문제아야 ~~) 이버스오프상태에서벗어나는방법은소프트웨어리세트또는하드웨어리세트를걸거나부가적인웨이트시간 (128 x 11 비트 1 (recessive) 상태 ) 을기다려야합니다. 에러상태변화도는아래그림과같습니다. H/W 리세트 송신에러카운터 > 127 또는수신에러카운터 > 127 ERROR ACTIVE 송신에러카운터 < 128 AND 수신에러카운터 < 128 S/W 리세트 128 x 11 비트의 recessive 상태를수신하면 ERROR PASSIVE 송신에러카운터 > 255 BUS OFF 10
CAN 통신을사용한몇가지응용프로토콜 11
CAN 통신을사용한몇가지응용프로토콜 12
CAN 통신을사용한몇가지응용프로토콜 13
CAN 통신을사용한몇가지응용프로토콜 14
CAN 통신을사용한몇가지응용프로토콜 15
STM32F 시리즈의 CAN 살펴보기 이제 STM32F 시리즈에있는 CAN 통신에대해서살펴봅니다. 회사마다 CAN 이름을조금씩다르게붙이는데, 기본동작은거의같고, 조금씩차이는있는거같습니다. 아무튼 STM32 에서는 bxcan 이라하네요. Basic Extended CAN(Controller Area Network) 주요특징은왼쪽과같은데, 2.0A 및 2.0B 지원 1Mbps 까지지원 3 개의송신메일박스 2 개의수신 FIFO (3 stages) 등등.. 하나의통신라인에여러장치접속가능 16
Dual CAN 구성도 (connectivity devices) 17
STM32 의 CAN 통신프레임 18
STM32 의 CAN 통신프레임 메일박스의레지스터구성 19
CAN 통신비트타이밍계산 기타상세내용은매뉴얼참조 : April 2010 Doc ID 13902 Rev 11 1/1072 RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs 에서 23. Controller Area Network(bxCAN) 장참조바랍니다. 20
CAN 예제살펴보기 : 초기화 CAN 통신초기화함수 CAN 클럭 Enable 입출력핀초기화 본예제의사용환경 : 소자 : STM32F103R8T6 사용 CAN 포트 : USB포트와공용핀사용수신핀 : PA11_CANRX_USBDM 송신핀 : PA12_CANTX_USBDP CAN Driver칩 : 82C251(5V 동작 ) RXD 신호에완충용 330옴저항연결사용 CAN 레지스터초기화 CAN 수신인터럽트 Enable CAN 통신설정 : 통신속도 : 1Mbps 인터럽트 : 수신인터럽트사용송신포맷 : 2.0A 및 2.0B 가능 21
CAN 예제살펴보기 인터럽트처리함수 메인함수에서 수신데이터를저장하고, 플래그만체크 메인루프에서플래그를체크하여 CAN 수신데이터를 LCD 에표시 CAN 수신데이터 LCD 표시예 CAN 데이터송신함수 : 표준 (2.0A) 형태 CAN 데이터송신함수 : 확장 (2.0B) 형태 22
CAN 예제살펴보기 LCD(20 x 4) & 버튼 (5 개 ) 보드로통신시험 버튼을누를때, 데이터를전송하고송수신상태를 LCD 에표시버튼을누를때송신동작 : BT1 : 표준형태, 0011.. 전송 BT2 : 확장형태, 0011.. 전송 BT3 : 확장형태, 0123.. 전송 BT4 : 표준형태, 0123.. 전송 BT1 누름 버튼동작은메인루틴에서일정간격으로처리함 BT5 : 메시지지움 BT4 누름 BT2 누름 BT3 누름 BT5 누름 23
CAN 통신데이터관찰 CAN 통신은 1 개의장치로시험이어렵고, 2 대이상접속하여시험해야하는데, 본강좌에서는리얼시스 ( www.realsys.co.kr ) 사의 CANPro Analyzer 를사용하여데이터수신및송신동작을했습니다. CANPro 실행화면 CAN Pro Analyzer 송신데이터 수신데이터 제품모양 동작상태표시 제품관련정보는 : http://www.realsys.co.kr/goods/main.asp?cate=357 24