CCP/XCP 프로토콜입문 배경 CCP (CAN Calibration Protocol) 는, 이름에서알수있듯이, 전자제어유닛 (ECU) 에서데이터를수집하고교정하기위한프로토콜입니다. 이프로토콜은일찍이 ASAP (Arbeitskreis zur Standardisierung von Applikationssystemen) 로알려졌던, ASAM (Association for Standarisation of Automation- and Measuring Systems) 에의해정의되었습니다. 이것은 Audi, BMW, VW 같은여러주요자동차제조업체들로구성된국제적인기구입니다. 과거에는서로다른방법의기술들이 ECU 하드웨어와소프트웨어의개발, 교정, 생산과서비스에사용되어왔었습니다. CCP의목표는모든단계의 ECU 개발을위한공통툴을만들고다른종류의하드웨어그리고소프트웨어들과도호환되도록하는것입니다. ASAM 그룹은많은표준들을정의합니다. CCP 와 XCP 표준은 subsection AE (Automotive Electronics) 에서 찾아보실수있으며일명 AE MCD 1 이라불리는것으로분류됩니다. CCP 규격의현재버전은 2.1 이며, 이 것은 1999 년 2 월에발표된것입니다. 사용분야 가장흔히사용되는영역은 CAN 이자주사용되는, 자동차산업이지만, 그이외의다른분야에서도 CAN 은 사용됩니다. 사용이가능한영역들은다음과같습니다. ECU 개발 ECU의기능과환경테스트를위한시스템 연소기관, 변속장치또는실내온도조절기를위한테스트벤치. 사전제작차량에서의측정과교정 자동차산업이외의일반적인 CAN 애플리케이션
요약 CCP 는 CAN 2.0B (11- or 29-bit CAN id) 의애플리케이션계층입니다. 이프로토콜은 OSI 모델에따른최상계층 (layer 7) 으로, 이것은프로토콜이비트와바이트가어떻게생성되는지를서술하는것이아니라 CAN 2.0B protocol physical, data link 와네트워크계층이어떻게사용되는지를서술하는것입니다. CCP 는다음기능들을지원합니다 : ECU 메모리에읽기 (Read) 와쓰기 (Write). ECU로부터동기적으로순환데이터취득. CAN 버스에서다중노드처리. 플래시프로그래밍. 플러그앤플레이. 자원보호 ( 데이터취득과교정 ). CCP 의세부사항 CCP 는명령을슬래이브노드로보내어 CCP 마스터가통신을시작하는 master/slave 애플리케이션에기초합니다. CAN 버스에연결된슬래이브노드는여러개가될수있습니다. CCP는교정을위한간단한메모리처리와데이터획득과관련하여일반명령을사용합니다. 이러한두개의자원들은독립적이며따라서동시에사용될수있습니다. 그림 1: CCP 버스연결. CCP는고성능 ECU와소형 8비트마이크로컨트롤러모두의제약과요구를처리하도록설계되었습니다. ECU 에는추가하드웨어가전혀연결되지않습니다. CCP 드라이버는소프트웨어에서완벽하게구현됩니다. CCP 의간소한구현은오직이용가능한램, 롬, 그리고실행을위한 CPU 시간의작은부분만이필요합니다. 간소한구현은단지두개의 CAN 메시지식별자만을필요로하며, 이것은통상적인트래픽을방해하지않는낮은순위로설정될수있습니다. CCP가일반 PC에서사용되어야한다면, 마이크로컨트롤러에서사용되는것과마찬가지로간단하고저렴한비용의 CAN 인터페이스가사용될수있습니다.
일반적인명령 CCP 는슬래이브노드에서서로다른기능들을수행하기위해, 노드에한정된것이아닌, 일반명령들을사용합니다. 명령들이일반적이기때문에모든노드는개별적인위치어드레스를갖고있어야합니다. 마스터와슬래이브간의논리적연결은어떤명령이든전송되기전에설정되어야합니다. 이연결은마스터가다른슬래이브노드와연결하기로결정할때까지또는마스터가 disconnect 명령을보낼때까지지속됩니다. 연결후에는마스터가마스터와슬래이브사이의모든통신을제어합니다. 마스터로부터의모든메시지는데이터또는에러코드를포함하고있는슬래이브로부터의응답메시지가이어집니다. CCP- 특정 CAN 메시지 CCP는 CAN 2.0B 프로토콜을기초로합니다. 모든메시지들은 8 바이트길이입니다. CAN 메시지의단두종류만을필요로합니다, CRO 와 DTO, 각방향으로하나씩. CRO (Command Receive Object) 메시지는마스터로부터슬래이브로전송되며제어명령을포함하고있습니다. DTO (Data Transmission Object) 메시지는슬래이브에서마스터로전송됩니다. 슬래이브가 CRO 메시지를수신했을때이것은주어진지시를수행하고그런다음 CRM (Command Return Message) 를포함하고있는 DTO 메시지로응답합니다. CRM 코드는해당제어명령이계획대로수행되었는지아닌지를마스터에알려줍니다. 그림 2: CRO 와 DTO 메시지 CRO와 DTO 메시지에사용되는 CAN 식별자들은마스터를구성하는데사용되는 configuration file ("A2L file", defined by the ASAM MCD 2MC/ASAP2 standard) 에의해결정됩니다. 이구성파일은데이터취득과교정에유용한슬래이브메모리조직에관한정보도포함할수있습니다. CAN 식별자가메시지의우선순위를결정하므로이것은버스에서통상적인트래픽을방해하지않는방식으로선택됩니다. CCP는일반데이터전송에서사용되는바이트순서 (Motorola 또는인텔 ) 를결정하지않습니다. 예외는있는데마스터와슬래이브간의연결시사용되는 station 주소의바이트순서는 Intel (LSB 우선 ) 이되어야합니다.
CRO 메시지의서술 CRO 메시지는마스터에서슬래이브로전송되며지시사항들을포함합니다. 첫번째바이트는 command code (CMD) 로메시지의목적을서술합니다. 두번째바이트는 command counter (CTR) 로통신의추적을유지하기위해사용됩니다. 또한명령카운터는슬래이브에서 DTO 메시지의리턴시전송될것입니다. 바이트 2-7은명령코드에따라데이터파라매터들을위해유보됩니다. 메시지는항상 8 바이트길이이며정의되지않은바이트들은 개의치않는것 으로간주됩니다. 그림 3: CRO 메시지의구조. DTO 메시지의서술 DTO 메시지는수신된 CRO 메시지를받을때슬래이브에의해전송되며데이터취득을위해서도사용됩니 다. 메시지에서의첫번째바이트는 PID (Packet ID) 라불립니다. PID 의값은메시지유형을서술합니다. 메 시지에는세가지유형들이있습니다 : 0xFF, command return message (CRM), DTO가 CRO 메시지수신으로전송되는경우 0xFE, event message, DTO가오류복구또는다른서비스를불러내기위하여내부슬래이브상태변경을보고하는경우 0-0xFD, data acquisition message (DAQ). 이 PID는나중에서술되는, ODT (Object Descriptor Table) 의값을가집니다 그림 4: DTO 메시지의구조
데이터취득 (DAQ) 그림 5: ODT 리스트의구조 마스터디바이스가초기화하여슬래이브디바이스로부터데이터취득을시작할수있습니다. 데이터는특수 DAQ-DTO와함께슬래이브에서전송됩니다. 데이터바이트는수많은 ODT 리스트로구성되어있는 DAQ 리스트에서조직됩니다. ODT 리스트는데이터가저장되는 ECU에메모리어드레스에대한최대 7개의포인터들을포함합니다. 메모리어드레스에대한포인터외에, ODT-list는주소확장과보내질바이트수를포함할수있습니다. 모든슬래이브디바이스들은 1 바이트이상의데이터요소를처리하지않으며마스터가데이터를단일바이트로쪼개어이작업을해결할수있습니다. DAQ-DTO 는 ODT 리스트의메모리포인터가가리키는데이터요소들과 PID 로구성됩니다. PID 번호 ( 일반 적으로 ODT 리스트와동일 ) 는 0 에서 253 사이의값을가지며이는 254 개의 ODT 리스트만이동시에있을 수있다는것을의미합니다. 그림 6: DAQ 리스트의구조
CCP 규격은여러개의 DAQ 리스트를허용하며, 이것은동시에활성화될수있습니다. DAQ 리스트의전송은 START_STOP 명령을통해마스터에의해시작됩니다. ODT 리스트의데이터바이트는슬래이브디바이스에서샘플화되어 DAQ-DTO의 CAN 버스로보내집니다. 새로운 START_STOP 명령이진행중인 DAQ 사이클이완료되기전에슬래이브에의해수신된다면, 두가지방식으로반응합니다. 새로운 DAQ 명령이시작되고진행중인것이종결되거나진행중인사이클이완료되고새로운것은무시됩니다. 양쪽방식에는장점과단점이있으며 CCP 규격은어떤것을선택할지정하지않습니다. 명령 (Command) 아래명령들이 CCP 규격에포함되어있습니다. ( 그림 7). 교정성능이필요하지않다면모든명령들이구현될필요는없으며따라서아래테이블표에서옵션으로표기됩니다 ( 그림 7). GET_DAQ_SIZE, SET_DAQ_PTR, WRITE_DAQ, START_STOP ( 그리고 START_STOP_ALL) 는 DAQ 특성이며이자원들이사용되지않는한구현될필요는없습니다. GET_SEED 와 UNLOCK 은 key( 암호 ) 로보호된다면데이터취득과교정같은 CCP 자원들을해체하는데사용되며, 이것은선택사항입니다. 그림 7: 명령
오류처리 슬래이브에서의오류코드와그것이얼마나중요한가에따라, 마스터는그림 8 에서술되어있는여러가지 활동들을실행합니다 그림 8: 오류처리 Error C0은경고이며아무행동도취하지않습니다. 에러 C1이발생한다면통신오류이거나분주한노드전송에서의오류입니다. 에러 C1에서마스터는그림 7에서서술된 ACK 시간을기다려야만하며그런후메시지를재전송하려시도해야합니다. 이것은 2배가될것입니다. 에러 C2는일시적전력손실이될수있으며재초기화로해결될수있습니다. 에러 C3은해결될수없으며마스터는실행세션을종결시켜야합니다. Cold Start 는마스터와슬래이브사이에새로운논리연결이 CONNECT 명령과어떤후속초기화로성립됨을뜻합니다. 순차의예 예제들에는마스터로서, 기본 CCP 통신을위하여, 사용할명령들이설명되어있습니다. 로그인세션 (Cold Start) 마스터와슬래이브사이의전형적인연결은마스터에서의 CONNECT 명령을포함하는 CRO로시작합니다. 슬래이브는이에해당하는 DTO로응답해야합니다. 마스터와슬래이브모두동일한 언어 로대화하는것을확실히하기위하여 GET_CCP_VERSION 명령이예상했던버전번호와같이마스터에서전송됩니다. 만약슬래이브에서반송되어전달된그버전번호가일치한다면, 통신이진행될수있습니다. 플러그앤플레이 호환노드들을위해 EXCHANGE_ID 명령이스테이션주소에따라, 자동세션구성을위해사용될수있습니다.
GET_SEED 명령에서슬래이브노드는자원 (DAQ or Calibration) 의보호상태 (locked/unlocked) 에관한정보를응답합니다. 만약, 어떤이유로, 자원이 lock 된다면이것은사용되기전에 unlock되어야합니다. 자원을해제 (unlock) 하기위해서는 UNLOCK 명령이, GET_SEED DTO에서수신받은 KEY 와함께마스터로부터전송되어야합니다. 로그인세션이끝나기전에 Status 비트의초기화가권장되는데, 이는 SET_S_STATUS 명령으로실행됩니다. 교정초기화세션 (Calibration init session) 이세션설명은로그인절차가수행되었다는것을가정합니다. 그런다음첫번째는 SET_S_STATUS 명령을이용하여교정에대한세션상태비트를 off 로설정하는것이될것입니다. 그후교환할데이터를포함하는메모리주소가 SET_MTA 명령으로선택됩니다. 이메모리주소가이용가능하다는것을확실히하기위해 BUILD_CHKSUM 명령이전송되고이를확인하는슬래이브노드로부터의응답이예정됩니다. 그러면데이터바이트를선택된주소로다운로드할수있습니다. 먼저 DOWNLOAD 명령이데이터바이트의수와각바이트의값과더불어전송됩니다. 데이터교환을실제로수행하기위해서 SELECT_CAL_PAGE 가전송됩니다. 교정이시작되었다는것을지시하기위해서교정을위한세션상태비트가 SET_S_STATUS 명령으로 on 으로설정됩니다. DAQ init 세션이세션설명은로그인절차가수행되었다는것을가정합니다. DAQ의세션상태비트는 SET_S_STATUS 로 off 로설정됩니다. DAQ 리스트는 GET_DAQ_SIZE 로선택되며슬래이브는사용가능한 ODT의수로응답합니다. SET_DAQ_POINTER 명령은어떤 DAQ 리스트에, ODT의 element 와 ODT 테이블이기록되어야하는지를선택합니다. 그러면 WRITE_DAQ 명령은데이터파라매터의메모리주소를이전에선택된 element에할당합니다. 모든 DAQ 리스트들이원하는대로채워지면 DAQ의세션상태비트가 SET_S_STATUS 를사용하여 on 으로설정됩니다. DAQ 리스트의전송은 START_STOP 명령으로시작됩니다. 여러 DAQ 리스트들이동시에시작되어야하고동기적으로전송되어야한다면 START_STOP_ALL 명령이사용됩니다.