Bus load = used capacity / Max capcity 로 계산된다.
먼저 worst case의 프레임 bit 수를 알아야하는데, 예를들어 11 bit identifier를 CAN frame을 예시로 계산해보자.
Field Name | Sub Field | Length (bit) |
Start of Frame | SOF | 1 |
Arbitration Field | Identifier | 11 |
RTR | 1 | |
Control Field | IDE | 1 |
R0 | 1 | |
DLC | 4 | |
Data Field | D0-D8 | 8n |
CRC Field | CRC | 15 |
CRC Delimiter | 1 | |
Ack Field | Ack | 1 |
Ack Delimiter | 1 | |
End of Frame | EOF | 7 |
여기에다 추가해야 할 것이 있다.
프레임 사이의 intermission 3 bit 가 있고, SOF부터 CRC(CRC delimiter 제외)까지는 bit stuffing 적용되어서 최악의 경우 (34+8n-1)/4 개의 stuff bits가 붙을 수 있는데 말 그대로 worst case일 뿐이라 보통 20%라고 보면 무방하다.
Data를 8byte로 하고, stuff bits를 19로 계산했을 때 worst case의 프레임은 130 bit이다.
Case 1. bit rate는 500kbps를 사용하고 해당 프레임을 every 100ms 간격으로 전송한다고 가정해보자.
500kbps는 한 bit를 전송하는데 2us가 걸린다.
130 bit를 전송하는데 걸리는 시간은 260us이다.
그럼 100ms 시간동안 bus 는 260us동안만 차지될 것이고
260 / 100,000 = 0.0026, 즉 bus load는 0.26%로 계산된다.
Case 2. bit rate는 500kbps를 사용하고 해당 프레임을 10ms 간격으로 1프레임, 100ms 간격으로 1프레임, 1000ms 간격으로 1 프레임을 송신한다고 해보자.
1초에 111 프레임을 송신한다. bus가 사용되는 시간은 111 * 260us 이다.
28,860 / 1,000,000 = 0.02886, 즉 bus load는 2.886%로 계산된다.
Case 3. bit rate는 250kbps를 사용하고, 해당 프레임을 1ms 간격으로 전송한다면 bus load는?
1초에 250,000 bit를 전송할 수 있는 capacity를 가지고 있는데 1초에 130,000 bit(130*1000)를 전송한다.
130,000/250,000 = 0.52, 즉 bus load는 52%로 계산된다.
공식으로 하면 다음과 같다.
worst case transmission time = worst case bits / bandwidth
bus load = worst case trasmission time / given period for each message
Extended CAN Frame
Stand Classic CAN보다 Arbitration Field에서 20 bit가 더 붙는다고 보면 된다.
CAN FD Frame
참고로 CAN FD에선 payload 16 byte 까지는 CRC가 17 bit 사용되고 그보다 큰 20, 24, 32, 48, 64 byte 일 땐 CRC가 21 bit 사용된다.
BRS가 사용되는 경우 계산이 조금 더 복잡하다.
Reference :
https://en.wikipedia.org/wiki/CAN_bus
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
FatFs, f_getfree(), f_readdir() 드라이브 여유 공간/사용 공간 확인 (0) | 2023.03.31 |
---|---|
FPGA IP (Intellectual Property) Core (0) | 2023.03.31 |
메모리 인터페이스, SDRAM 인터페이스 (0) | 2023.03.20 |
Fragmentation을 피하기 위한(안전한) UDP payload size (0) | 2023.03.20 |
MDIO(Management Data Input/Output) (0) | 2023.03.12 |