일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코딩일기
- 프로그래머스
- 최단경로
- 백준
- react-native
- c++
- ps
- 알고리즘
- 정렬
- 백준온라인저지
- 타입스크립트
- 앱개발
- 구현
- 코테
- 이코테
- 이진탐색
- bfs
- TS
- 개발자북클럽
- SQL
- 이것이코딩테스트다
- 그리디
- DP
- 노마드코더
- 코딩테스트
- BOJ
- 빅데이터분석
- Typescript
- 다이나믹프로그래밍
- dfs
- Today
- Total
한량처럼 살고 싶다
CAN Frame 타입 본문
Single Frame
데이터 길이가 7바이트 이하일 경우 single frame 을 사용하여 데이터 전송이 가능하다.
데이터의 형태가 0x06OOOOOOO 라면, 해당 프레임은 싱글 프레임이면서 데이터의 길이는 2인 것이다.
Bit offset | 7 .. 4 (byte 0) | 3 .. 0 (byte 0) | 15 .. 8 (byte 1) | 23 .. 16 (byte 2) |
single | 0 | size (0 .. 7) | Data A | Data B |
Multi Frame
데이터 길이가 7바이트를 초과할 경우 multi frame 을 이용하여 데이터 전송이 가능하다.
멀티 프레임에는 2가지 종류가 있는데,
멀티 프레임을 전송한다는 의미를 담은 가장 첫 번째 프레임인 First Frame과
그 이후에 오는 프레임이라는 내용을 담은 Consecutive Frame 두 가지가 있다.
일반적인 CAN 프레임은 데이터의 길이를 12bit로 표현해야 하므로 전송 가능한 최대 byte 수가 4095이다.
이를 넘어설 경우 CAN FD 프로토콜 혹은 사용자 정의 프로토콜을 사용해야 한다.
Bit offset | 7 .. 4 (byte 0) | 3 .. 0 (byte 0) | 15 .. 8 (byte 1) | 23 .. 16 (byte 2) |
First Frame | 1 | size (12bit) | Data A | |
Consecutive Frame | 2 | index (0..15) | Data A | Data B |
예를 들어 First Frame 이 이런 형태로 들어온다면: 0x1009OOOOOO
최초 상위 4비트가 1 이며 이어오는 12bit 가 009 이기 때문에 이 프레임은 First frame 이자 총 데이터의 길이가 9 라는 뜻이 된다.
그러므로 이번 프레임이 오고 나서 2로 시작되는 다른 프레임이 온다는 것까지 알 수 있다.
Consecutive Frame 은 20, 21, 22, 23 ... 2F 이런 식으로 늘어난다.
인덱스가 0부터 15까지이며 만약 16개의 연속된 Consecutive Frame 을 전송했는데 데이터가 남아있을 경우 다시 20부터 순환하게 된다.
주의할 점은 첫 번째 Consecutive Frame (CF)는 0x21부터 시작하고, 2F까지 증가한 후, 다음 프레임에서는 다시 0x20으로 순환하는 구조라는 점이다.
21 22 .. 2F 까지 다 돈 뒤에 그 다음에 오는 Consecutive가 20 부터 시작된다는 의미이다.
Flow Control Frame
can 통신에서는 여러 프레임을 연속적으로 보낼 때 상대방으로부터 Flow Control Frame 을 받은 뒤에 보낸다.
Bit offset | 7 .. 4 (byte 0) | 3 .. 0 (byte 0) | 15 .. 8 (byte 1) | 23 .. 16 (byte 2) |
description | type | if the transfer is allowed | Block Size | Separation time |
Single | type = 3 | 0: Continue to send 1: Wait 2: Overflow/abort |
0: flow control frame 혹은 delay 없이 consecutive 전송 | Separation time |
Single | type = 3 | > 0: 다음 Flow Control Frame을 기다리기 전 보낼 Consecutive Frame 수 | 0xF1 ~ 0xF9 100~900 의 마이크로초 |
상위 4비트는 3으로 고정되어있다.
하위 4비트는 0일 경우 Consecutive 전송, 1일 경우 다음 Flow Control Frame 을 기다린다는 의미, 2일 경우 중단한다.
Block Size 가 0일 경우 Flow Control Frame / Delay 없이 Consecutive Message를 전송한다는 의미이다.
만약 0보다 큰 값이 올 경우 다음 Flow Control Frame 을 기다리기 전 보낼 Consecutive Frame 수를 말한다.
'CAN통신' 카테고리의 다른 글
05. CAN Tranceiver & CAN Controller (0) | 2024.05.06 |
---|---|
04. CAN High & CAN Low signal (0) | 2024.05.06 |
03. 120옴 저항 (0) | 2024.05.06 |
02. CAN 통신의 커넥터 (0) | 2024.05.06 |
01. CAN통신 토폴로지 & 전송방식 (0) | 2024.05.06 |