yoncho`s blog
CAN Frame, Frame(single, multi) & Flow 본문
참고:
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.
'기술, 나의 공부를 공유합니다. > [Vehicle] CAN, CANFD' 카테고리의 다른 글
CAN, 자동차 통신 프로토콜 Controller Area Network (0) | 2024.09.28 |
---|---|
CAN, 주섬 주섬 (0) | 2023.03.07 |
DBC, 자동차를 위한 CAN 관련 정보 파일 (0) | 2023.02.21 |
CAN Bit Timing, CAN Bus Parameter 설정을 위한 계산 (0) | 2022.11.08 |