ISO (the International Organization for Standardization) is a worldwide federation of national standards bodies (ISO member bodies). The work of preparing International Standards is normally carried out through ISO technical committees. Each member body interested in a subject for which a technical committee has been established has the right to be represented on that committee. International organizations, governmental and non-governmental, in liaison with ISO, also take part in the work. ISO collaborates closely with the International Electrotechnical Commission (IEC) on all matters of electrotechnical standardization.
SAE International is a global association of more than 128,000 engineers and related technical experts in the aerospace, automotive and commercial-vehicle industries. Standards from SAE International are used to advance mobility engineering throughout the world. The SAE Technical Standards Development Program is among the organization's primary provisions to those mobility industries it serves aerospace, automotive, and commercial vehicle. These works are authorized, revised, and maintained by the volunteer efforts of more than 9,000 engineers, and other qualified professionals from around the world. SAE subject matter experts act as individuals in the standards process, not as representatives of their organizations. Thus, SAE standards represent optimal technical content developed in a transparent, open, and collaborative process.
The procedures used to develop this document and those intended for its further maintenance are described in the ISO/IEC Directives, Part 1 and the SAE Technical Standards Board Policy. In particular, the different approval criteria needed for the different types of ISO documents should be noted. This document was drafted in accordance with the editorial rules of the ISO/IEC Directives, Part 2 (seewww.iso.org/directives).
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. ISO and SAE International shall not be held responsible for identifying any or all such patent rights. Details of any patent rights identified during the development of the document will be in the Introduction and/or on the ISO list of patent declarations received (seewww.iso.org/patents).
SAE Technical Standards Board Rules provide that: “This document is published to advance the state of technical and engineering sciences. The use of this document is entirely voluntary, and its applicability and suitability for any particular use, including any patent infringement arising therefrom, is the sole responsibility of the user.”
Any trade name used in this document is information given for the convenience of users and does not constitute an endorsement.
For an explanation of the voluntary nature of standards, the meaning of ISO specific terms and expressions related to conformity assessment, as well as information about ISO's adherence to the World Trade Organization (WTO) principles in the Technical Barriers to Trade (TBT), seewww.iso.org/iso/foreword.html.
This document was jointly prepared by Technical Committee ISO/TC 22,Road vehicles, Subcommittee SC 32,Electrical and electronic components and general system aspects, and SAE TEVEES18AVehicle Cybersecurity Systems Engineering Committee.
This first edition of ISO/SAE 21434 cancels and supersedes SAE J3061:2016[37].
This document addresses the cybersecurity perspective in engineering of electrical and electronic (E/E) systems within road vehicles. By ensuring appropriate consideration of cybersecurity, this document aims to enable the engineering of E/E systems to keep up with state-of-the-art technology and evolving attack methods.
This document provides vocabulary, objectives, requirements and guidelines related to cybersecurity engineering as a foundation for common understanding throughout the supply chain. This enables organizations to:
—define cybersecurity policies and processes;
—manage cybersecurity risk; and
—foster a cybersecurity culture.
This document can be used to implement a cybersecurity management system including cybersecurity risk management.
Organization of this document
An overview of the document structure is given inFigure 1. The elements ofFigure 1do not prescribe an execution sequence of the individual topics.
Figure 1—Overview of this document
Clause 4(General considerations) is informational and includes the context and perspective of the approach to road vehicle cybersecurity engineering taken in this document.
Clause 5(Organizational cybersecurity management) includes the cybersecurity management and specification of the organizational cybersecurity policies, rules and processes.
Clause 6(Project dependent cybersecurity management) includes the cybersecurity management and cybersecurity activities at the project level.
Clause 7(Distributed cybersecurity activities) includes requirements for assigning responsibilities for cybersecurity activities between customer and supplier.
Clause 8(Continual cybersecurity activities) includes activities that provide information for ongoing risk assessments and defines vulnerability management of E/E systems until end of cybersecurity support.
Clause 9(Concept) includes activities that determine cybersecurity risks, cybersecurity goals and cybersecurity requirements for an item.
Clause 10(Product development) includes activities that define the cybersecurity specifications, and implement and verify cybersecurity requirements.
Clause 11(Cybersecurity validation) includes the cybersecurity validation of an item at the vehicle level.
Clause 12(Production) includes the cybersecurity-related aspects of manufacturing and assembly of an item or component.
Clause 13(Operations and maintenance) includes activities related to cybersecurity incident response and updates to an item or component.
Clause 14(End of cybersecurity support and decommissioning) includes cybersecurity considerations for end of support and decommissioning of an item or component.
Clause 15(Threat analysis and risk assessment methods) includes modular methods for analysis and assessment to determine the extent of cybersecurity risk so that treatment can be pursued.
Clauses 5through15have their own objectives, provisions (i.e. requirements, recommendations, permissions) and work products. Work products are the results of cybersecurity activities that fulfil one or more associated requirements.
“Prerequisites” are mandatory inputs consisting of work products from a previous phase. “Further supporting information” is information that can be considered, which can be made available by sources that are different from the persons responsible for the cybersecurity activities.
A summary of cybersecurity activities and work products can be found inAnnex A.
Provisions and work products are assigned unique identifiers consisting of a two-letter abbreviation (“RQ” for a requirement, “RC” for a recommendation, “PM” for a permission and “WP” for a work product), followed by two numbers, separated by hyphens. The first number refers to the clause, and the second gives the order in the consecutive sequence of provisions or work products, respectively, of that clause. For example, [RQ-05-14] refers to the 14th provision inClause 5, which is a requirement.
1 Scope
This document specifies engineering requirements for cybersecurity risk management regarding concept, product development, production, operation, maintenance and decommissioning of electrical and electronic (E/E) systems in road vehicles, including their components and interfaces.
A framework is defined that includes requirements for cybersecurity processes and a common language for communicating and managing cybersecurity risk.
This document is applicable to series production road vehicle E/E systems, including their components and interfaces, whose development or modification began after the publication of this document.
This document does not prescribe specific technology or solutions related to cybersecurity.
2 Normative references
The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
ISO 26262-3:2018,Road vehicles — Functional safety — Part 3: Concept phase
3 Terms, definitions and abbreviated terms
3.1 Terms and definitions
For the purposes of this document, the following terms and definitions apply.
ISO and IEC maintain terminological databases for use in standardization at the following addresses:
examination of a process to determine the extent to which the process objectives are achieved
[SOURCE:ISO 26262-1:2018[1], 3.5, modified — The phrase “with regard to” was substituted by "to determine the extent to which" and "are achieved" was added.]
3.1.7
component
part that is logically and technically separable
3.1.8
customer
person or organization that receives a service or product
[SOURCE:ISO 9000:2015[2], 3.2.4, modified — The phrase “could or does receive” was replaced by “receives”, the phrase “that is intended for or required by this person or organization” was omitted, and the example and note 1 to entry were omitted.]
[SOURCE:ISO 31000:2018[3], 3.8, modified — The word "cybersecurity" was added to the term, the phrase “maintains and/or” was deleted, the notes to entry were deleted.]
componentor set ofcomponents(3.1.7)that implements a function at the vehicle level
Note 1 to entry:A system can be an item if it implements a function at the vehicle level, otherwise it is a component.
[SOURCE:ISO 26262-1:2018[1], 3.8, modified — The term “system” has been replaced by “component”, the phrases “to which ISO 26262 is applied” and “or part of a function” have been omitted and the Note 1 to entry has been replaced.]
3.1.26
operational environment
context considering interactions in operational use
Note 1 to entry:Operational use of anitem(3.1.25)or acomponent(3.1.7)can include use in a vehicle function, in production, and/or in service and repair.
3.1.27
out-of-context
not developed in the context of a specificitem(3.1.25)
EXAMPLE:
Processing unit with assumed cybersecurity requirements to be integrated in different items.
3.1.28
penetration testing
cybersecurity testing in which real-world attacks are mimicked to identify ways to compromisecybersecurity goals(3.1.16)
[SOURCE:ISO/IEC/IEEE 15288:2015[4], 4.1.53, modified — The phrase “requirements for a specific intended use or application have been fulfilled” has been replaced by “cybersecurity goals of the item are adequate and are achieved”, note 1 to entry has been omitted.]
3.1.37
verification
confirmation, through the provision of objective evidence, that specified requirements have been fulfilled
[SOURCE:ISO/IEC/IEEE 15288:2015[4], 4.1.54, modified — The note 1 to entry has been omitted.]
[SOURCE:ISO/IEC 27000:2018[5], 3.77, modified — The phrase “of an asset or control” has been omitted; the phrase “by one or more threats” has been replaced by “as part of an attack path”.]
기존의 기능안전 국제표준을 사이버보안 영역에 동일하게 적용하는데 제한이 있음((모든 security critical system 이 safety critical system 은 아니며,고장이 나는 경우에도, 안전에 영향이 없는 security critical system 이 있음)
자동차에 적합한 사이버보안 용어 정의, 사이버보안 목표 수립, 요구사항과 지침 마련
▶ 목표
자동차 전기전자시스템 엔지니어링의 사이버보안 관점을 다룸
자동차 사이버보안 평가에 필요한 사이버보안 프로세스 및 활동과 최소한의 요구사항을 정의
자동차 산업에 적용할 수 있는 최신 수준(State of the art)의 사이버보안 엔지니어링 절차 수립
위험기반 접근법을 통해 다양한 공격기법과 새로운 공격기술에 대비하기 위한 전기전자 엔지니어링 방안 수립
추가로, 입법에 참고할 수 있을 정도의 엄격함과 법적 확실성을 보장할 것, ref. UNECE WP29 Cybersecurity regulation
SOME/IP는 "Scalable service-Oriented MiddlewarE over IP"의 약자입니다. 이 미들웨어는 일반적인 자동차 사용 사례와 최소 유선 형식 수준의 AUTOSAR와 호환되도록 설계되었습니다. http://some-ip.com/에서 공개적으로 액세스할 수 있는 사양이 제공됩니다. 이번 포스팅에서는 SOME/IP 사양의 기본 구조와 오픈 소스 구현 및 오픈 소스 구현에 대한 간략한 개요를 제공하고자 합니다.
먼저 SOME/IP 사양의 세 가지 주요 부분부터 살펴보겠습니다.
On-wire format
Protocol
Service Discovery
SOME/IP On-wire format
원칙적으로 SOME/IP 통신은 IP를 통해 devices 또는 subscribers 간에 전송되는 메시지로 구성됩니다. 다음 그림을 참고하세요.
두 장치(A 및 B)가 표시되어 있습니다. Device A는 B에 SOME/IP 메시지를 보내고 하나의 메시지를 반환합니다. 기본 전송 프로토콜은 TCP 또는 UDP를 활용합니다. 메시지 자체에는 큰 차이가 없습니다. 이제 Device B에서 이 메시지에 의해 Device A에서 호출되는 기능을 제공하는 서비스를 실행하고 있다고 가정하고, 그 답으로 메시지를 보냅니다.
SOME/IP 메시지에는 header와 payload의 두 부분이 있습니다. 그림에서 헤더는 주로 식별자입니다:
Service ID: 각 서비스의 고유 식별자
Method ID: 0-32767(방법), 이벤트의 경우 32768-65535
Length: 페이로드 길이(바이트)(다음 ID도 포함, 8바이트 추가)
Client ID: ECU 내의 호출 클라이언트에 대한 고유 식별자로, 전체 차량에서 고유해야 합니다.
Session ID : 세션 처리를 위한 식별자. 각 통화에 대해 증가시켜야 합니다.
Protocol Version : 0x01
Interface Version: 주요 서비스 인터페이스 버전
Message Type:
-- REQUEST (0x00) 응답을 기다리는 요청(공백도)
-- REQUEST_NO_RETURN (0x01) A fire&forget 요청
-- NOTIFICATION (0x02) 응답이 없을 것으로 예상되는 알림/이벤트 콜백 요청
-- RESPONSE (0x80) response message
Return Code :
-- E_OK (0x00) 오류 발생이 없을 시
-- E_NOT_OK (0x01) 지저오디지 않은 오류 발생
-- E_WRONG_INTERFACE_VERSION (0x08) Interface version 불 일치
-- E_MALFORMED_MESSAGE (0x09) 페이로드의 크기를 줄일 수 없도록 감도화 오류
-- E_WRONG_MESSAGE_TYPE (0x0A) 예상치 못한 메시지 유형 수신 (예를 들어 RE-QUEST_NO_RETURN)
정상적인 기능 호출과 클라이언트가 가입한 이벤트에 대한 알림 메시지에 "Requests" 및 "RESPONSE"가 있음을 알 수 있습니다. 오류는 정상적인 응답 또는 알림으로 보고되지만 적절한 반환 코드가 있습니다.
payload에는 직렬화된 데이터가 포함되어 있습니다. 위 그림은 전송된 데이터 구조가 기본 데이터 유형만 있는 중첩 구조라는 단순한 경우의 직렬화를 보여주고 있습니다. 이 경우, 구조 요소는 그냥 평평하게 됩니다. 즉, 단순히 적재물에 하나씩 기록된다는 뜻입니다.
SOME/IP Protocol
이 섹션에서는 주로 두 가지 사항이 중요합니다.
the so-called transport bindings (UDP and TCP)
the basic communication patterns publish/subscribe and request/response.
위에서 언급한 바와 같이 기본 전송 프로토콜은 UDP 또는 TCP일 수 있습니다. UDP의 경우 SOME/IP message가 분할되지 않습니다. message가 둘 이상 UDP 패킷에 있을 수 있지만 UDP 패키지는 최대 1400바이트일 수 없습니다. 큰 message는 TCP를 통해 전송되어야 합니다. 이 경우 TCP의 robustness가 사용됩니다. TCP 스트림에서 동기화 오류가 발생하면 SOME/IP 규격에서 다음 message의 시작을 다시 찾기 위해 magic cookies를 호출할 수 있습니다.
service interfaces를 인스턴스화해야 하며 동일한 인터페이스의 인스턴스가 여러 개 있을 수 있으므로 정의된 인스턴스(인스턴스 ID)에 대한 추가 식별자가 있어야 합니다. 그러나 인스턴스 ID는 SOME/IP 메시지 header의 일부가 아닙니다. 인스턴스는 전송 프로토콜의 포트 번호를 통해 식별됩니다. 즉, 동일한 인터페이스에서 여러 인스턴스가 동일한 포트에서 제공될 수 없습니다.
이제 기본 SOME/IP 통신 패턴을 보여 주는 다음 그림을 보십시오.
Remote Procedure Calls에 대한 표준 REQUEST/RESPONSE 메커니즘 외에도 이벤트에 대한 PUBLISH/SUBSCRIBE 패턴도 있습니다. SOME/IP 프로토콜의 이벤트는 항상 이벤트 그룹에 그룹화되므로 이벤트 자체는 가입할 수 없고 이벤트 그룹에만 가입할 수 있습니다. SOME/IP 사양도 "필드"를 알고 있습니다. 이 경우 Setter/Getter 방법이 REQUEST/RESPONSE 패턴을 따르고 있으며 변경사항의 알림 message는 이벤트입니다. Subscription 자체는 SOME/IP Service Discovery을 통해 수행됩니다.
SOME/IP Service discovery
SOME/IP 서비스 검색은 서비스 인스턴스를 찾고 서비스 인스턴스가 실행 중인지 탐지하고 publish/subscribe 처리를 구현하는 데 사용됩니다. 이것은 소위 말하는 offer messages를 통해 수행됩니다. 즉, 각 device는 이 device에서 제공하는 모든 서비스를 포함하는 메시지를 broadcast(멀티캐스트)합니다. SOME/IP SD messages는 UDP를 통해 전송됩니다. 클라이언트 애플리케이션에 서비스가 필요하지만 현재 제공되지 않는 경우 "find messages"도 보낼 수 있습니다. 다른 SOME/IP SD messages는 이벤트 그룹을 Publish/Subscribe하는 데 사용할 수 있습니다.
다음 그림은 SOME/IP SD messaged의 일반적인 구조를 보여줍니다.
vsomeip 간단 개요
도입 사례를 구현하기 전에 vsomeip이라고 하는 SOME/IP의 GENIVI 구현의 기본 구조에 대해 간단히 살펴보겠습니다.
그림과 같이 vsomeip은 기기 간 SOME/IP communication (외부 통신)뿐만 아니라 내부 프로세스 간 communication 도 포함합니다. 두 Device는 사용된 전송 프로토콜(TCP 또는 UDP)과 해당 매개 변수를 포트 번호 또는 기타 매개 변수로 결정하는 통신 endpoints 을 통해 통신합니다. 이러한 모든 매개 변수는 vsomeip 구성 파일에 설정할 수 있는 구성 매개 변수입니다(json 파일, vsomeip 사용자 설명서 참조). 내부 communication은 로컬 endpoint를 통해 이루어지며, 이 엔드포인트는 Boost.Asio Library를 사용하여 Unix 도메인 소켓에 의해 구현됩니다. 이 내부 통신은 D-Bus 데몬과 같은 중앙 구성 요소를 통해 라우팅되지 않으므로 매우 빠릅니다.
중앙 vsomeip 라우팅 관리자는 외부 디바이스로 전송해야 하는 경우에만 messages를 수신하고 외부에서 들어오는 messages를 배포합니다. Device 당 라우팅 관리자는 하나만 있으며, 아무것도 구성되지 않은 경우 실행 중인 vsomeip 애플리케이션도 라우팅 관리자를 시작합니다.
vsomeip은 데이터 구조의 직렬화를 구현하지 않습니다. 이는 CommonAPI의 SOME/IP Binding에서 다루고 있습니다. vsomeip은 SOME/IP Protocol과 Service Discovery을 포함합니다.
이는 SOME/IP 및 vsomeip에 대한 짧은 소개였습니다 그러나 처음 접하시는 분들에게는 충분할 것입니다. 더 자세한 것은 나중에 예제를 통해 설명하도록 하겠습니다.
CAN 통신의 회로 구성입니다. STM32F091RC는 MCU 내부에 CAN 컨트롤러는 포함하고 있지만, CAN 트랜시버는 따로 구성해야 하고 대부분의 MCU가 그런 것으로 알고 있습니다. 먼저 CAN 통신은 Logic Low(0V)와 Logic High(3.3V) 신호를 사용하는 UART나 SPI와는 다릅니다.CAN RX는 송신에 전혀 관여하지 않으며,CAN 컨트롤러가 CAN 트랜시버에 Logic Low 신호와 Logic High 신호를 전송할 때는 UART, SPI와 동일하게 0V, 3.3V를 사용하지만,CAN 트랜시버가 버스에 데이터를 보낼 때, CAN Low와 CAN High 신호선은 다음과 같은 상태가 됩니다.
CAN TX
0 V
3.3 V
CAN High
5 V
2.5 V
CAN Low
1.1 V
2.5V
CAN TX가 High여서 CAN Low와 CAN High의 출력 전압이 같아진 상태를리세시브 상태(버스상 Logic High)이라고 하고, CAN TX가 Low여서 CAN Low와 CAN High의 출력 전압이 달라진 상태를도미넌트 상태(버스상 Logic Low)이라고 합니다.
CAN TX에 의해 변하는 CAN Low와 CAN High는 다시 CAN 트랜시버 내부에서 CAN RX(RXD)로 다시 전송되어CAN 컨트롤러가 CAN 버스의 상태를 모니터링하게 됩니다. CAN 트랜시버 내부 기능 다이어그램은 다음과 같습니다.
CAN High, CAN Low에서 되돌아 오는 신호는 AND 연산되어 RXD(CAN RX)로 출력됩니다.즉, 자신이 CAN 버스를 사용하여 무언가를 전송중일 때는 CAN TX와 CAN RX의 신호를 오실로스코프로 관찰해보면 동일한 파형이 관찰됩니다. 그리고 CAN 버스의 신호 상태는 리세시브와 도미넌트가 있습니다. 도미넌트 신호는 리세시브 신호에 우선합니다. CAN 트랜시버 내부의 출력 드라이버는 CAN TX(TXD) 신호가 1일 때 VCC와 GND가 연결된 트랜지스터의 게이트를 조절해서 CANH, CANL 신호가 모두 2.5V가 되게 하고, CAN TX(TXD) 신호가 0일 때 CANH는 5V CANL는 1.2V가 되게 합니다. 임베디드 프로그래밍을 위주로 공부해서 회로에 관해서는 필요한 부분만 찾아 공부하는 식이어서 모르는게 많지만, 내부의 다이오드는 CAN TX(TXD) 신호가 1일 때 다른 노드에서 출력되는 더 높은 CANH 전압과 더 낮은 CANL 전압이 출력 드라이버에 영향을 미치는 것을 방지하고, 리세시브를 출력하는 노드의 출력 드라이버가 CAN 버스에 영향을 미치지 못하게 되는 것 같습니다. 하지만 입력 드라이버는 CAN 버스에 그대로 연결되어 있기 때문에 두개 이상의 노드가 리세시브와 도미넌트를 동시에 출력했을 경우, 버스 상태는 도미넌트가 되고, 버스에 있는 모든 노드는 CAN 버스가 도미넌트라고 인식하게 된다고 생각하는데, 제가 잘못 이해하고 있는 부분이 있다면 알려주세요.
CAN 프로토콜도 다른 통신 프로토콜과 마찬가지로 여러가지 전송 옵션을 규정하고 있습니다. 따라서 CAN 컨트롤러가 송수신을 시작하기 전에 어떻게 송수신할 지 미리 설정해 두어야 합니다.
전송 옵션은 CAN_MCR과 CAN_BTR에서 설정할 수 있습니다. 이 두 레지스터에 대한 설명은 CAN 레퍼런스 매뉴얼에 나와있지만 좀 더 전체적인 관점에서 이해할 수 있도록 레지스터의 비트필드의 기능을 간단히 설명한 다음에 CAN 프로토콜, 제가 알고있는 것을 약간 섞어서 다시 설명해 보겠습니다.
BRP (Baud rate prescaler) : CAN 컨트롤러에 공급되는 PCLK를 분주하여타임 퀀텀 주기를 설정합니다.
TS1/2 (Time segment 1/2) : 비트 세그먼트1/2에 배정할 타임 퀀텀의 개수를 정의합니다. 즉, 비트 세그먼트1/2의 주기를 결정합니다.
SJW (Resynchronization jump width) : CAN 컨트롤러는 비트 세그먼트1의 주기를 늘리고 비트 세그먼트2의 길이를 줄이는 방식으로 재동기화를 수행하는데,이때 늘리고 줄일 시간의 길이를 타임 퀀텀 단위로 정의하는 필드입니다.
※ 참고로 주기는 시간과 동일한 의미로 이해하면 됩니다.
주의할 것은 타임 퀀텀이 버스상 1비트의 주기가 아니라는 것입니다.이것은 CAN 통신이 비동기식 통신이기 때문에 네트워크 안에서 각 노드가 개별적으로 동기를 맞춰 나가는 과정과 관련있습니다. CAN 컨트롤러는버스상 1비트를 4개의 세그먼트로 구성하고,다시 그 세그먼트를 몇 개의 타임 퀀텀으로 구성합니다. 하지만 타임 퀀텀은 CAN 컨트롤러 내부에서 연산되기 때문에 오실로스코프로 관찰할 수 없습니다.타임 퀀텀은 BRP에 의해 결정되는 가장 작은 시간 단위로 TS1과 TS2를 사용하여 세그먼트에 타임 퀀텀이 몇 개를 배정하느냐에 따라 각 세그먼트의 주기가 달라지고, 나아가 전체 1비트의 주기가 달라집니다. 즉, 동일한 프리스칼라를 설정해도 각 세그먼트에 배정된 타임 퀀텀의 개수에 따라 1비트의 주기가 달라질 수 있다는 의미입니다.CAN 버스상의 각 노드는 서로 다른 길이의 타임 퀀텀을 가질 수는 있지만, 타임 퀀텀으로 구성되는 1비트의 주기는 모든 노드가 같아야 합니다. 즉, CAN 버스상의 모든 노드의 전송 속도는 동일해야 합니다.
4개의 세그먼트는 다음과 같습니다.
SYNC_SEG : 각 비트의하강 엣지가 이 SYNC_SEG 안에 들어 있는지의 여부로 동기를 판정합니다. (무조건 1 타임 퀀텀, 설정 불가, 나머지 세그먼트는 설정 가능)
PROP_SEG : 네트워크의 물리적 지연시간을 보정하기 위해 사용됩니다. 1~8 타임 퀀텀
PHASE_SEG 1 : 위상 오류(위상차)를 보정하기 위해 사용됩니다. (1~8 타임 퀀텀)
PHASE_SEG 2 : 위상 오류(위상차)를 보정하기 위해 사용됩니다. (PHASE_SEG 1의 최대값(8) + 정보처리시간(<= 2타임 퀀텀))
※ STM32에서는 PROP_SEG와 PHASE_SEG 1을 합쳐서 비트 세그먼트 1로 정의합니다.
※ STM32에서는 PHASE_SEG 2는 비트 세그먼트 2로 정의합니다.
※ 위에 있는 타임 퀀텀의 범위는 각 세그먼트에 대한 가능한 타임 퀀텀입니다. 하지만 두개의 보드에서 동일한 설정을 해도 트랜시버에 따라 어떤 보드는 송신을 하고 어떤 보드는 송신을 못해서 어떻게 정해야 하는지는 잘 모르겠습니다. 그리고 STM32는 PROP_SEG 세그먼트와 PHASE_SEG 1 세그먼트가 비트 세그먼트 1로 정의하고 사용하는데 이 비트 세그먼트의 비트를 조절할 때 PROP_SEG 세그먼트와 PHASE_SEG 1 세그먼트의 비율이 어떻게 되는지도 잘 모르겠습니다..
제가 사용한 설정은 48MHz MCU 속도에서 아래 두개 입니다.
프리스칼라
1024
2
BS1
3
15
BS2
5
8
SJW
1
1
비트타임/속도
192000ns/5208bps
1000ns/1Mbps
※ 저는 위상이라는 개념을 어떤 동일한 신호에 대해 어떤 개체가 인식하는 신호의 발생 시점이라고 이해하고 있습니다. 따라서 위상차란 두개 이상의 개체가 인식하는 어떤 신호의 시작 시점의 차이라고 알고 있습니다. 여기서 개체는 회로에서 어떤 부품이 될 수도 있고, 회로에서의 어떤 위치도 될 수 있습니다. 만약 틀렸다면 지적 부탁드립니다.
※ 그리고 주의할 점은 1비트는 어떤 세그먼트를 길게하든 짧게하든 최소 8타임 퀀텀에서 최대 25타임 퀀텀으로 구성되어야 합니다. 처음에 뭣도모르고 PHASE_SEG1/2를 1타임 퀀텀으로 해서 테스트해봤는데 통신이 되지 않았습니다. 타임 퀀텀과 세그먼트는 오실로스코프로 관찰할 수 없었지만, PHASE_SEG1/2를 1타임 퀀텀으로 설정하여 1비트가 3타임 퀀텀인 상태에서 위상차가 발생하면 SJW(최소 1타임 퀀텀)만큼 늘리거나 줄이게 되는데, 최소값인 1타임 퀀텀 조차도 3타임 퀀텀에 비해 너무 길어서 그런게 아닌가 추측해봅니다. 즉, 오차를 조정했는데 너무 많이 조정해서 또 다른 오차가 발생하게 되는 것입니다.
STM32 CAN 컨트롤러에서 세그먼트들은 1비트에서 다음과 같이 할당됩니다.
CAN RX를 사용한 이유는 앞서 설명했듯이 CAN TX에 따라 달라지는 CAN Low, CAN High 신호가 AND 게이트를 거쳐 CAN 컨트롤러와 연결된 CAN RX로 출력되면, CAN 컨트롤러가 이 신호로 버스의 상태를 모니터링하기 때문입니다. 위의 예에서 RXD는 Logic High 1비트를 출력한 후 Logic Low로 전환하고 있습니다. CAN 컨트롤러는 CAN RX 기준으로 하강 엣지(리세시브->도미넌트)가 SYNC_SEG 안에 있는지의 여부로 동기를 판정합니다. ‘전송’ 파트에서 자세히 설명하겠지만, 버스상의 어떤 노드도 신호를 보내고 있지 않은 상태(리세시브)에서 어떤 노드가 데이터 프레임을 전송하면 전송을 시작한다는 의미로 SOF 신호를 보내게 되는데 이 SOF 신호는 도미넌트 신호 입니다. 이때 CAN RX에서 하강 엣지를 탐지하게 되고 버스상의 모든 노드는 SOF 신호에 SYNC_SEG를 맞춥니다. 이때는 버스상의 모든 노드가 동기화된 상태입니다. (참고로 버스 프리 상태에서는 비트를 세그먼트로 나누어 동기를 잡지 않습니다.) 하지만 SPI 통신처럼 동기를 잡아주는 클록이 따로 없고, 신호선의 길이와 노드들의 상대적인 위치 때문에 오차가 누적되어 하강 엣지가 SYNC_SEG 밖에서 탐지되는 상황이 발생합니다.이때 하강 엣지가 비트 세그먼트2에서 탐지되면 비트 세그먼트2의 타임 퀀텀 개수에서 SJW에서 설정한 타임 퀀텀의 개수를 빼주어 비트 세그먼트2의 주기를 줄이고,하강 엣지가 비트 세그먼트1에서 탐지되면 비트 세그먼트1의 타임 퀀텀 개수에서 SJW에서 설정한 타임 퀀텀의 개수를 더하여 비트 세그먼트1의 주기를 늘리는 방식으로 오차를 조정합니다.
참고로 STM32 레퍼런스 매뉴얼(RM0091 837페이지)에선 비트를 판정하는 유효한 엣지를 다음과 같이 정의하고 있습니다.
A valid edge is defined as the first transition in a bit time from dominant to recessive bus level provided the controller itself does not send a recessive bit.
‘컨트롤러가 리세시브 비트를 보내고 있지 않다면, 유효한 엣지는 1비트 타임 안에서 도미넌트부터 리세시브 버스 레벨까지의 첫번째 전환으로 정의된다.’ 정도로 해석될 수 있는데요. 이렇게 되면 비트를 판정하는 엣지가 상승 엣지가 되어버립니다. 하지만 어떤 CAN 문서를 찾아봐도 상승 엣지에서 비트를 판정한다는 내용을 찾을 수 없었습니다. 따라서 dominant와 recessive의 위치가 바뀌어야 할 것 같습니다. 아마 레퍼런스 매뉴얼 작성자의 실수라고 생각되지만 다른 의견이 있으면 말씀해주세요.
하드웨어에 독립적(#hardware-independent)인#소프트웨어플랫폼구축을 위해서 많은 플랫폼들이#계층형구조를 도입하여 하위에는 하드웨어 종속적인 모듈들을 배치하고 상위로 갈수록 하드웨어에 독립적인 구조가 될 수 있도록 계층과 모듈들을 구성합니다.#AUTOSAR도 계층형 구조로 되어있어서 하드웨어에 독립적인 어플리케이션 작성이 가능하지만, 더 정확한 구현과 효과적인 디버깅을 위해서 내부의 계층을 잘 이해할 필요가 있습니다. 특히,#어플리케이션소프트웨어(#ASW)가 아니라#베이직소프트웨어(#BSW)를 개발하는 입장이라면 계층 간 메시지 전달에 대해서 이해하는 것은 꼭 필요한 일이라고 할 수 있습니다.
이 글에서는 AUTOSAR #CAN통신스택을 살펴보고 메시지 전달 과정과 #CAN통신과 관계된 모듈들을 알아보도록 하겠습니다.
통신DB import
통신 모듈들을 설정하기 위해서는 ARXML형태로 구성된 통신 데이터가 필요하기 때문에 모듈 설정에 앞서 ECU에서 사용할 통신 데이터를 import 하게 됩니다. 대부분의 AUTOSAR 솔루션들이 통신 DB를 간편하게 import해서 AUTOSAR 데이터 포맷으로 변환해주는 기능을 갖고 있습니다. 예를 들면 현대오트론에서 개발한 모빌진(mobilgene)도 ARXML파일뿐 아니라, CAN/LIN/Flexray/Ethernet등의 데이터베이스 혹은 엑셀 형식으로 저장된 파일을 drag-drop방식으로 끌어와서 간편하게 AUTOSAR ARXML 형태로 만들어 주는 기능을 제공할 뿐만 아니라, import한 데이터를 모듈들의 의존성을 고려해서 자동으로 설정해주는 기능까지 제공하고 있습니다. 다음 그림은 AUTOSAR 협회 사이트에 공개된 현대오트론 모빌진(mobilgene)의 CAN 관련 설명이니 참고하시기 바랍니다.
다음 그림은 통신서비스 제공을 위해 AUTOSAR에서 정의하는 모듈들을 서로 다른 색으로 표현된 계층에(MCU 추상화 계층-빨간색, ECU 추상화 계층-초록색, 서비스 계층-파란색) 나누어 표현한 것으로 계층의 특성에 맞춰 통신 관련 모듈들이 분포되어 있는 것을 알 수 있습니다. 그림의 점선 부분은 적용되는 통신 버스에 따라서 LIN, FlexRay, J1939, XCP, CAN, Ethernet 등이 될 수 있습니다.
[그림 3] AUTOSAR에서 정의하는 모듈 계층
CAN 통신 스택은 기능/역할별로 다음의 세 가지 영역으로 나누어 볼 수 있겠습니다.
1. PDU 송/수신 관련 기능
: CAN 메시지를 송수신 하는 과정에서 PDU 전달과 관련된 기능을 수행하는 모듈들을 포함하고 있습니다.
2. 통신 상태 제어기능
: 통신 상태를 변경하거나, 이상이 발생했을 때 이에 대한 처리를 담당하는 모듈들을 포함합니다.
3. 네트워크 관리 기능
: 통신 네트워크를 관리하기 위한 모듈들이 포함되어 있습니다.
[그림 4] CAN 통신 스택의 세 가지 기능
이 글에서는 위에서 언급한 세 가지 중 PDU 송/수신에 관여되는 통신 관련 주요 모듈들을 살펴보고, 통신 스택을 구성하는 모듈 간 PDU 흐름을 살펴보도록 하겠습니다.
COM 모듈
통신 스택은 일반적인 CAN통신의 송/수신 기능에 관여하는 모듈들(다음 그림 참고: Com, PduR, CanIf, CAN)로 구성됩니다. COM 모듈을 기점으로 상위 layer는 signal을 사용하고, 하위로는 PDU를 사용합니다. Signal은 전달할 메시지, PDU는 계층 간 메시지 전송을 위한 프로토콜 추상화로 생각할 수 있습니다. 어플리케이션에서 전달된 signal 은, COM의 I-PDU 버퍼에 저장되고 PduR_ComTransmit 함수에 의해서 I-PDU 형태로 PduR로 전달됩니다. 반대로 PDU를 수신 받을 때는 PduR에서 Com_RxIndication 함수를 통해서 수신된 PDU가 있음을 알리고, COM에서는 I-PDU 속 signal을 분석해서 해당 signal과 연결된 callback 함수를 호출하여 수신된 signal이 RTE를 통해서 어플리케이션으로 전달됩니다.
[그림 5] Signal/PDU 사이 변경을 위해서 COM 모듈에는 각 signal과 PDU가 정의되어 있는데, 간혹 참조 관계가 틀렸거나 존재하지 않는 경우가 있습니다. AUTOSAR BSW 개발 소프트웨어 DB import 시 자동으로 설정해 줘야 하지만, import과정에서 type 설정을 잘못했거나, 혹은 의존관계 모듈의 버전 문제 등 여러 가지 원인으로 정상적인 설정이 안되는 경우가 있습니다. 이런 경우 직접 확인해서 해당 문제를 수정해 줘야 합니다.
PDU(Protocol Data Unit)
통신 메세지는 네트워크 계층 간 정보 전달의 편의를 위해서 PDU로 바뀌는데 SDU(Service Data Unit)와 PCI(Protocol Control Information)로 구성됩니다. SDU는 다른 계층 또는 모듈로 전달되는 데이터이고, PCI는 발신지/수신지/순서 번호와 같은 정보들로 계층 간 혹은 모듈 간 PDU 전달을 위해 덧붙이는 정보를 말합니다. 예를 들어 COM에서 전달받은 PDU는 PduR에서는 SDU가 되고, 라우팅 정보가 포함된 PCI가 더해져서 새로운 PDU를 구성하게 됩니다. 아래 그림은 다음 계층의 PCI 정보가 덧붙여 지면서 PDU가 계층 간 전달되는 것을 설명하고 있습니다.
[그림 6] 이렇게 하위 계층으로 이동하면서 PDU는 상위계층에서 만들어진 SDU와 PCI를 헤더에 붙여가는 방식으로 PDU가 지나온 전체 경로를 기억하게 됩니다.
[그림 7] 계층별로 주고받는 정보가 다르기 때문에 다음 그림처럼 계층에 따라 PDU에 붙는 prefix도 달라집니다.
PDU는 AUTOSAR의 CAN 스택 내에서만 사용되는 것이기 때문에 CAN Driver를 통해서실제 전송시에는 PDU형태로 전송되지 않고, 필요한 메시지만 PDU에서 추출하여 네트워크로 전송하게 됩니다.
PduR 모듈
COM에서 만들어진 PDU는 PduR(PDU Router)로 전달되어 Routing table을 참고해서 해당 PDU를 전달할 목적지를 설정하는 방식으로 PDU를 목적지로 전송하게 됩니다. PduR모듈은 routing table과 engine으로 구성되는데, Routing table은 각 PDU들의 경로 정보를 가지고 있어서, 여기에 기록되지 않은 PDU는 정상적으로 전달되지 않습니다. Engine은 routing table을 사용해서 PDU가 올바른 경로로 전달될 수 있도록 해주는데, 주요하게는 PDU가 위로 전달되는지 혹은 아래로 전달되는지에 따라서 PDU ID와 API를 연결하여 호출해 주는 기능입니다.
[그림 8] PduR 모듈
PduR의 Gateway 기능을 통해서 서로 다른 Bus간 혹은 서로 다른 Controller간 PDU 송/수신도 가능합니다.
간혹 DB Import 과정에서 Multicast 설정이나 Gateway 설정에 해당하는 메시지가 정상적으로 세팅되지 못하거나 그 밖에 다양한 원인으로 PduR에 설정되어야 하는 Gateway가 설정되지 않는 경우가 있습니다. 코드생성 자체가 안되는 경우도 있고, 혹은 나중에 테스트 과정에서 해당 기능이 누락되는 경우도 있습니다. 특히, Gateway 설정이 정상적이지 않은 경우가 빈번합니다.
[그림 9] PduR을 기준으로 상위는 Bus나 Controller에 의존성이 없지만,
하위부터는 특정 Bus나 Controller에 의존성을 갖게 됩니다.
CanIf 모듈
CanIf 모듈에서는 PDU ID를 확인해서 내부의 Channel을 선택합니다. 각 Channel에 연결된 HOH(Hardware Object Handle)에 PDU를 전달하면, CAN controller의 Hardware Object에 해당 PDU를 write 하고, object flag 값을 1로 설정되면 Transceiver에 의해서 Can frame이 전달됩니다.
[그림 10] CanIf 모듈
지금까지 설명한 Can 통신 스택의 4가지 주요 모듈을 정리하면 다음과 같습니다.
COM
- PDU data를 signal 단위로 읽고 쓸 수 있는 interface 제공
- 주기적으로 PDU 송신
- Signal에 대한 timeout, data received, data send 등의 이벤트를 ASW에 통지
PduR
- Routing table에 설정된 PDU reference를 참조하여 source 및 destination 모듈 간에 pdu를 전달
CanIF
- Can driver로부터 수신한 PDU를 상위 layer로 전달
- 상위 layer가 송신한 PDU를 can driver로 전달
- Can controller 및 transceiver를 제어하는 interface 제공
- Bus off 발생을 Can으로부터 받아 CanSM에 전달
CAN
- Can controller의 활성화 및 비활성화 제어
- Can interrupt handler를 제공(Tx, Rx, Busoff 등): interrupt 대신 주기 task를 이용한 Polling 방식도 사용 가능
마지막으로, 다음 그림은 CAN 메시지 송신 시 모듈 간 호출되는 API 및 Callback 함수를 정리한 것입니다. 함수명은 환경에 따라 다소 다를 수 있지만, 앞에서 살펴본 CAN 통신 스택의 함수 호출 예로 참고하시기 바랍니다.
[그림 11] CAN 메시지 송신 시 모듈 간 호출되는 API 및 Callback 함수 정리
① RTE API를 통해서 전달할 signal이 COM에 도착하면 COM은 signal을 PDU로 변환하고, PduR로 해당 PDU를 전달하면서 전송 요청을 합니다.
② PduR은 적절한 전송 모듈을(LIN, CAN, XCP등)을 선택해서 해당 모듈로 PDU를 보내서 전송 요청을 합니다.
③ CanIf는 PDU ID를 확인해서 연결될 channel을 설정하고, 해당 채널을 통해서 Can driver의 HTH(Hardware Transmission Handle)로 전송하려는 메시지를 전달합니다.
④ Can driver에서는 HTH에 연결된 Can controller의 Hardware Object에 전달할 메시지를 write하도록 합니다.