yoncho`s blog

CAN Frame, Frame(single, multi) & Flow 본문

기술, 나의 공부를 공유합니다./[Vehicle] CAN, CANFD

CAN Frame, Frame(single, multi) & Flow

욘초 2023. 2. 3. 17:24

참고:

https://en.wikipedia.org/wiki/ISO_15765-2

https://www.linkedin.com/pulse/can-tp-iso-15765-2-vivek-maurya/

https://happilyembedded.wordpress.com/2016/02/15/can-multiple-frame-transmission/


[1] Frame Type 구분표

Receive Can Data에서 첫 번째 Byte의 7 ~ 4 bits에 해당하는 값으로 Frame Type을 구분할 수 있다.

  0 : Single Frame (SF) - For unsegmented messages which can fit into single CAN frame

  1 : First Frame (FF) - First frame of segmented message. (multi - frame)

  2 : Consecutive Frame (CF) - Frames followed by First frame are consecutive frames

  3 : Flow control Frame (FF) - When a First frame is received, a flow control frame is send back which contains status,
       block size, separation time

 

*일반/표준 주소 지정의 경우 Single Frame에서 최대 7바이트의 데이터를 전송할 수 있으며 확장 주소 지정인 First Frame의 경우 6바이트의 데이터만 전송할 수 있다.

 

 


[2] First - Consecutive Frame - Relationship

*CAN 에서 보낼 Data Length 가 9이상 일 때, Multi Frame (First Frame, Consecutive Frame)구성으로 진행된다. 
First Frame에는 보내고자 하는 총 Data Length정보와 6byte 길이의 Data로 구성된 8byte data를 전송한다.
그러면 Flow Control Frame을 응답받게 되는데.
Flow Control Frame에는 status, block size, separation time minimum 값 정보가 있다. 이 정보를 활용해 Consecutive Frame을 컨트롤한다.
Consecutive Frame에는 Sequence Index정보와 7byte 길이의 Data가 포함된다.

 

First - Flow Control - Consecutive -...

*임의의 Sender와 Receiver 사이에서 first frame과 flow control frame, consecutive frame을 구성해보겠다.

 

Origin data

ID   | DLC | Message (20 byte)
7E0  | ..  | A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3

*보내고자 하는 Message가 20byte인 상황일 때를 가정해보자.
우리는 origin data를 sender로써 First Frame과 Consecutive Frame으로 구성할 필요가 있다.

 

First Frame (send)

ID   | DLC | Message (8 byte)
7E0  | 08  | 10 14 A0 A1 A2 A3 A4 A5
...  | ..  | 1. .. : Frame Type (First Frame)
...  | ..  | .0 14 : First Frame Data Length

*message의 첫 번째 byte의 7-4bits는 frame type을 표시하는 자리며, "1" 은 First Frame을 의미한다.

*First Frame에서 message의 첫 번째 byte의 3-0bit과 두 번째 byte는 총 Data Length값을 표시하며,
 "014"는 decimal값으로 20이다. 
first frame은 보내고자 하는 origin data의 길이 정보, origin data 앞에서 6개 byte를 전송할 수 있다. 
first frame에 전송된 origin data의 6byte를 제외한 나머지 byte들은 consecutive frame으로 전송된다.

*consecutive frame은 최대 7byte data를 전송할 수 있다. 

 

Flow Control Frame (receive)

ID   | DLC | Message (8 byte)
7E8  | 08  | 30 00 00 xx xx xx xx xx
...  | ..  | 3. .. .. : Frame Type (Consecutive Frame)
...  | ..  | .0 .. .. : Flow Status (0, 1, 2)
...  | ..  | .. 00 .. : Block Size 
...  | ..  | .. .. 00 : Separation Time

*message의 첫 번째 byte의 7-4bits는 frame type을 표시하는 자리며, "3" 은 Flow Control Frame을 의미한다.

*message의 첫 번째 byte의 3-0bits는 flow status을 표시하는 자리며, "0" 은 continue to send로써, consecutive frame을 block size와 separation time에 맞게 send하면 된다.

*message의 두 번째 byte는 block size를 표시하는 자리며, 다음 flow control frame 까지 send할 consecutive frame 수 이다.

*message의 세 번째 byte는 separation time을 표시하는 자리며, consecutive frame간의 간격 delay time을 의미한다.

 

Consecutive Frame (send)

*sequence index는 0 to 15이다. 하지만 first frame을 0번째 consecutive frame으로 생각하여, first frame 이후 consecutive frame의 sequence index는 1부터 시작한다. 그리고 15 다음에는 다시 0부터 시작하게된다.

 

consecutive frame #01

ID   | DLC | Message (8 byte)
7E0  | 08  | 21 A6 A7 A8 A9 AA AB AC
...  | ..  | 2. : Frame Type (Consecutive Frame)
...  | ..  | .1 : Sequence Index (0 to 15)

*message의 첫 번째 byte의 7-4bits는 frame type을 표시하는 자리며, "2" 은 Consecutive Frame을 의미한다.

*message의 첫 번째 byte의 3-0bits는 Sequence Index를 의미하며 0부터 15까지 순서대로 부여됩니다. 단, First Frame을 0으로 간주하기 때문에 First Frame이후에 오는 Consecutive Frame은 1부터 시작한다.

 

consecutive frame #02

ID   | DLC | Message (8 byte)
7E0  | 08  | 22 AD AE AF B0 B1 B2 B3
...  | ..  | 2. : Frame Type (Consecutive Frame)
...  | ..  | .2 : Sequence Index (0 to 15)

*마지막 consecutive frame이다.

 


[3] Flow Control - Data Structure

Flow Status (0, 1, 2) :

  0 : Continue to send  - Consecutive Frame 전송

  1 : Wait for the next flow control frame - 다음 Flow Control Frame을 기다림 (Consecutive Frame 수행 x)

  2 : Overflow/abort - 중단

 

Block Size (BS)

  BS = 0 : Flow Control Frame 혹은 Delay없이 Consecutive Message 전송 

  BS > 0 : 다음 Flow Control Frame을 기다리기 전, 보낼 Consecutive Frame 수

 

Separation Time (ST-min)

*minimum delay time between frames (end of one frame and the beginning of the other)

  ST-min <= 127 : ST in milliseconds - 최대 0x7F(127) 이하의 값은 ms단위의 delay time을 가진다.

  ST-min in (0xF1 to 0xF9) : 100 to 900 microseconds - 값이 0xF1(100micro), 0xF2(200micro) ... 0xF9(900micro)
                                              사이 일 때, 100 ~ 900 사이의 microseconds 단위의 delay time을 가진다.

 

 

 


[4]  Multi Frame (First, Flow Control, Consecutive) Flow Ex.

Comments