can 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1....

30
CAN 통신 2008년 4월 2일 에이스트로닉스㈜ 양은숙

Upload: vodiep

Post on 24-Jul-2018

276 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

CAN 통신

2008년 4월 2일에이스트로닉스㈜

양은숙

Page 2: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

목차

CAN통신이란CAN통신 특징CAN통신 규격CAN통신 응용범위AT90CAN128의 특징AT90CAN128의 회로 구조CAN Controller의 구조AT90CAN128의 CAN RegisterSource 예제

Page 3: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

1. CAN통신이란

1988년 Bosch와 Intel에서 개발된 차량용 네트워크 시스템.

마이크로컨트롤러들 간의 통신을 위해 설계된 시리얼 네트웍 통신방식

1993년도에 ISO에서 국제표준 규격으로 제정.

Page 4: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

2. CAN통신 특징

2가닥의 꼬임선 (Twist Pair Wire) 으로 연결되어 반이중 통신 (Half Duplex) 방식

주소가 아닌 ID(identifier)에 의해 메시지의 내용뿐만아니라 우선순위도 결정.

Page 5: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네
Page 6: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

3. CAN통신 규격

CAN 메시지에 있는 식별자 (ID) 의 길이• 표준 CAN (버 전 2.0A) : 11 비트 식별자

• 확장 CAN (버전 2.0B) : 29비트 식별자

ISO 규격에 따라 구분

• ISO 11898 : 1Mbps 이상의 고속 통신 가능

• ISO 11519 : 125Kbps 까지의 통신 가능

Page 7: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네
Page 8: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

표준 CAN (버전 2.0A)

Page 9: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

확장 CAN (버전 2.0B)

Page 10: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

4. CAN통신 응용범위

일반차량: ECU 포함 전자장치들 간의 통신 및

차체 utility 제어

⇒the leading vehicle bus protocol in Europe

건설용 중장비 차량 및 열차

산업자동화: 제어기와 센서,

액츄에이터 사이 데이터 통신

서로 다른 지능 모듈들을 연결

의료장비, 건물자동화

Page 11: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

AVR 8-bit MicrocontrollerFLASH : 128k bytesEEPROM : 4k bytesSRAM : 4k bytes최대 64k bytes의 외부 메모리 공간JTAG(IEEE 1149.1호환) InterfaceCAN Controller 2.0A & 2.0B 내장15개의MOB를 가짐8 채널, 10bit SAR ADC2.7 ~ 5.0V에서 동작Maximum Frequency : 8MHz(2.7V), 16MHz(4.5V)

5. AT90CAN128 특징

Page 12: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네
Page 13: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

7. CAN Controller 구조

Page 14: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register - CANGCON

ABRQ (Abort Request)1 : 모든 MOb disabled ⇒ 통신 전면 중단OVRQ (Overload Frame Request)

1 : overload frame 전송 요청(1) (90CAN128은 매우 바쁠 수 있다.)TTC (Time Trigger Communication)

1 : TTC mode ⇒ 에러 발생해도, 해당 프레임은 전송SYNTTC (Synchronization of TTC)

0 : SOF에서 TTC timer 동작 ⇒ sync.1 : EOF 마지막 bit에서 TTC timer 동작 ⇒ sync.

Page 15: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

LISTEN (Listening Mode : 수신 전용)1 : listening mode ⇒ hardware loop backTEST (Test Mode)개발자용 아님. ⇒ ‘0’으로 고정ENA/STB (Enable/Standby Mode)0 : standby mode 진입 명령1 : enable mode 진입 명령

⇒ 11 recessive bit 검출 후 진입SWRES (Software Reset Request)1 : CAN controller reset

(BOFF ⇒ Error Active 진입시 사용)

Page 16: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register - CANEN

각 MOb의 사용 가능 상태를 표현0 : 해당 MOb가 disable 상태

또는 송수신 완료후 대기 상태1 : 해당 MOb가 enable 상태 또는 송수신 중

Page 17: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register - CANGIE

ENIT (Enable All INTs) = 1 ⇒ INT 가능(OVRTIM 제외)ENBOFF (Enable Bus Off INT) = 1 ⇒ BOFF INT 가능ENRX (Enable Receive INT) = 1 ⇒ Receive INT 가능ENTX (Enable Transmit INT) = 1 ⇒ Transmit INT 가능ENERR (Enable MOb Errors INT) = 1 ⇒ MOb Errors INT 가능ENBX (Enable Frame Buffer INT) = 1 ⇒ Frame Buffer INT 가능ENERG (Enable General Errors INT) = 1 ⇒ General Errors INT 가능ENOVRT (Enable CAN Timer Overrun INT) = 1 ⇒ OVRTIM INT 가능

Page 18: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANIE2/1

1 : 해당 MOb의 INT 발생 가능

Page 19: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register - CANHPMOB

HPMOB[3:0] (Highest Priority MOb Number)

: INT 발생 MOb 중 최고 우선순위를 갖는 MOb number

CGP[3:0] (CAN General Purpose Bits)

: CANPAGE register 조합형 범용 bit

Page 20: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANBT1

BRP (Baud Rate Prescaler) = [0..63]

Page 21: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANBT2

SJW (Re-Synchronization Jump Width) : Bit Re-synchronization을 위한 Bit time 조절폭 = [0:3]

Tsjw = Tscl × (SJW + 1) = 1~4 TQ

PRS (Propagation Time Segment) : input comparator, output driver 에 의한 delay 및propagation delay 보상용 = [0:7]

Tprs = Tscl × (PRS + 1) = 1~8 TQ

Page 22: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANBT3

PHS2 (Phase Segment 2) : Phase edge error 보상에 사용(필요에 따라 SJW만큼 단축) = [0..7]Tphs2 = Tscl × (PHS2 + 1) = 1~8 TQ 단, 1 ≤ PHS2 ≤ PHS1

PHS1 (Phase Segment 1) : Phase edge error 보상에 사용 (필요에 따라 SJW만큼 연장) = [0..7]Tphs1 = Tscl × (PHS1 + 1) = 1~8 TQ

SMP (Sample Point) = 1 ⇒ 3 sampling per bit time = 0 ⇒ 1 sampling per bit time

Page 23: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANTCON

CAN Timer Prescaler :

TclkCANTIM = TclkIO × 8 × (CANTCON+1)

Page 24: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANPAGE

MOBNB[3:0] (Mob Number) : MOb number 선택(0~14)AINC (Auto Increment of the FIFO CAN Data Buffer Index)0 : auto increment of the index (default value)INDX[2:0] (FIFO CAN Data Buffer Index): FIFO 내 CAN 데이터의 byte 위치 지정

Page 25: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

8. CAN Register – CANSTMOB

DLCW (Data Length Code Warning) : 수신 메시지의 DLC가 기대와 다를 때

TXOK : 송신 완료 flag ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!RXOK : 수신 완료 flag ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!BERR : Bit Error(예외는?) ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!SERR : Stuff Error ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!CERR : CRC Error ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!FERR : Form Error ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!AERR : Ack. Error ⇒ INT 발생 가능 ⇒ 확인 후 CLEAR!

Page 26: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

Boad Rate setting

Page 27: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

10. Source 예제

void main(void){

CANGCON=0x02;CANGIE=0xA0;CANEN2=0xFF;CANEN1=0x7F;CANIE2=0xFF;CANIE1=0x7F;CANHPMOB=0x00;CANBT1=0x00;CANBT2=0x0C;CANBT3=0x36;CANTCON=0x00;

Boad Rate : 1000K bps로 설정함!

Page 28: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

while (1){if(rx_counter0>0)

{ uart0_char=getchar();can_msg.mob=TX_MOB;can_msg.id=MYID;can_msg.rtr=0;can_msg.dlc=3;can_msg.data[0]='A';can_msg.data[1]='B';can_msg.data[2]='C';can_msg.data[3]='D';can_msg.data[4]='E';can_msg.data[5]='F';can_msg.data[6]='G';can_msg.data[7]='H';

printf("%2X₩r",Tx_st_can(can_msg));} if(can_rx_index>0){

read_rx_message(&can_msg);printf("ID:%03X,

DLC:%1d, %c%c%c%c%c%c%c%c %d₩r",can_msg.id,can_msg.dlc,can_msg.data[0],can_msg.data[1],can_msg.data[2],can_msg.data[3],can_msg.data[4],can_msg.data[5],can_msg.data[6],can_msg.data[7],can_rx_index);}

};}

Page 29: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

unsigned char Tx_st_can(can_msg_t msg){

unsigned char i,cancdmob_temp;

Can_set_mob(msg.mob); //사용할 MOB 선정Can_clear_mob(); //MOB 상태 초기화Can_set_std_id(msg.id); //ID 세팅(Standard CAN)Can_set_dlc(msg.dlc); //DLC 세팅

//MOb에 데이터 기록for (i=0; i<msg.dlc;i++){

CANMSG = msg.data[i];}

Can_config_tx(); //MOB Set Tx//CANGIE |= (1<<7);//CAN_IT_ENABLE;

while(CANSTMOB==0);//인터럽터가 수행되면 CANSTMOB값이 변경된다.cancdmob_temp=CANSTMOB;CANSTMOB=0;return cancdmob_temp;

}

Page 30: CAN 통신 - aquagirl.tistory.comaquagirl.tistory.com/attachment/gk040000000000.pdf · 1. CAN통신이란 1988년Bosch와Intel에서개발된차량용네트워크시스 템. 마이크로컨트롤러들간의통신을위해설계된시리얼네

void read_rx_message(can_msg_t* msg){

U8 data_index;

if(can_rx_index==0) return; //받은 데이터가 없으면 아무짓도 안한다

Can_set_mob(can_rx_index-1);Can_get_std_id(msg->id);msg->dlc=Can_get_dlc();msg->rtr=Can_get_rtr();

for(data_index=0;data_index<(msg->dlc);data_index++) msg->data[data_index]=CANMSG;

Can_config_rx(); //수신 가능한 상태로 바꾼다//데이타 필드를 초기화 시키지 않기때문에 이후에 들어오는 데이터가//이전의 데이터 길이보다 짧으면 나머지는 이전 값을 유지하므로//데이터를 사용할때는 dlc까지만 사용해야 한다can_rx_index--;

}