Toby's Study Blog
article thumbnail

๐Ÿ“ถ bxCAN ์ด๋ž€?

ST Microelectronics์—์„œ ๊ฐœ๋ฐœํ•œ CAN ํ†ต์‹  ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ ํ‘œ์ค€ CAN๊ณผ ํ™•์žฅ CAN์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ
์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ๊ณ ์† ์ „์†ก : CAN protocol 2.0 A, B๋ฅผ ํ†ตํ•ด 1 Mbit/s์˜ ์ „์†ก ์†๋„ ์ง€์›
  • ์ €์ „๋ ฅ ์†Œ๋น„ : ์ €์ „๋ ฅ ๋ชจ๋“œ์—์„œ 10 µA ์ดํ•˜์˜ ์ „๋ ฅ ์†Œ๋น„๋ฅผ ์ง€์›
  • ๋‹ค์ค‘ CAN bus ์ง€์› : ์ตœ๋Œ€ 4๊ฐœ์˜ CAN bus๋ฅผ ๋™์‹œ์— ์ง€์›
  • Message filtering : ํŠน์ • ๋ฉ”์‹œ์ง€๋งŒ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Œ
  • Error handling : CAN bus์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌ

 

๐Ÿ“ถ bxCAN ๊ตฌ์กฐ

bxCAN block diagram

์œ„ diagram์€ Dual CAN block diagram ์œผ๋กœ 2๊ฐœ์˜ CAN bus๋ฅผ
๊ฐ๊ฐ Master(๋ฉ”์‹œ์ง€ ์ „์†ก์šฉ)์™€ Slave(๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์šฉ)๋กœ ์—ฐ๊ฒฐํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ
CAN bus ํ•˜๋‚˜๋‹น 2๊ฐœ์˜ Rx FIFO์™€ Rx FIFO ํ•˜๋‚˜๋‹น 3๊ฐœ์˜ mailbox๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
28๊ฐœ์˜ Acceptance Filter banks๋Š” ๋‘ ๊ฐœ์˜ CAN bus๊ฐ€ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋‹ค.

(โ€ป Rx FIFO, mailbox, Filter ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋ž˜์— ๊ธฐ์žฌ)

๐Ÿ“ถ bxCAN ๋ชจ๋“œ

ํŠน์ง• Operation Mode Test Mode
๋ชฉ์  CAN ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™์‹œํ‚ค๊ธฐ
์œ„ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง
CAN ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜,
CAN bus์˜ ์‹ ๋ขฐ์„ฑ์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง
์šฐ์„ ์ˆœ์œ„ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ ์ •ํ™•์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ
์‚ฌ์šฉ ์˜ˆ์‹œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ CAN ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ, CAN bus ์‹ค๋ขฐ์„ฑ ์ธก์ •

 

bxCAN Operation Mode

 

bxCAN operating modes

  • Sleep ๋ชจ๋“œ
    CAN bus ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œํ•œ์˜ ์ „๋ ฅ๋งŒ ์†Œ๋น„ํ•˜๋Š” ๋ชจ๋“œ ์ด๋ฉฐ ์ง„์ž… ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    1. ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ CAN_MCR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLEEP ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด, CAN bus ๋…ธ๋“œ๋Š” Sleep ๋ชจ๋“œ๋กœ ์ „ํ™˜๋จ
      ์ด๋•Œ, CAN bus์˜ ํŠธ๋žœ์‹œ๋ฒ„๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๊ณ , CAN bus์˜ ๋ฒ„์Šค ๋ผ์ธ์— ์—ฐ๊ฒฐ๋œ ์ „์••์ด ๋‚ฎ์•„์ง„๋‹ค.
    2. ํ•˜๋“œ์›จ์–ด๋Š” CAN_MSR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLAK ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ CAN bus ๋…ธ๋“œ๊ฐ€ Sleep ๋ชจ๋“œ์— ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„
      CAN bus ๋…ธ๋“œ๊ฐ€ Sleep ๋ชจ๋“œ์— ์žˆ์œผ๋ฉด, CAN_MSR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLAK ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด,
      ์†Œํ”„ํŠธ์›จ์–ด๋Š” CAN bus ๋…ธ๋“œ๊ฐ€ Sleep ๋ชจ๋“œ์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • Initialzation ๋ชจ๋“œ
    CAN bus ๋…ธ๋“œ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ชจ๋“œ. Initialization ๋ชจ๋“œ ์ด๋ฉฐ ์ง„์ž… ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค
    1. ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ CAN_MCR ๋ ˆ์ง€์Šคํ„ฐ์˜ INRQ ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด, CAN bus ๋…ธ๋“œ๋Š” Listen-Only ๋ชจ๋“œ๋กœ ์ „ํ™˜๋จ
      CAN_MCR ๋ ˆ์ง€์Šคํ„ฐ์˜ INRQ ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด, CAN bus ๋…ธ๋“œ๋Š” Listen-Only ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๋ฉฐ ์ด๋•Œ, CAN bus ๋…ธ๋“œ๋Š” CANTX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๊ณ , ๋ฆฌ์‹œ๋ธŒ ๋น„ํŠธ๋งŒ ์ „์†กํ•จ
    2. ํ•˜๋“œ์›จ์–ด๋Š” CAN_MSR ๋ ˆ์ง€์Šคํ„ฐ์˜ INAK ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ CAN bus ๋…ธ๋“œ๊ฐ€ Listen-Only ๋ชจ๋“œ์— ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„
      CAN bus ๋…ธ๋“œ๊ฐ€ Listen-Only ๋ชจ๋“œ์— ์žˆ์œผ๋ฉด, CAN_MSR ๋ ˆ์ง€์Šคํ„ฐ์˜ INAK ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด,
      ์†Œํ”„ํŠธ์›จ์–ด๋Š” CAN bus ๋…ธ๋“œ๊ฐ€ Listen-Only ๋ชจ๋“œ์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • Normal ๋ชจ๋“œ
    CAN bus ๋…ธ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ชจ๋“œ
    Normal ๋ชจ๋“œ์—์„œ ๋…ธ๋“œ๋Š” CAN bus๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง„์ž… ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    1. CAN_MCR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLEEP ๋น„ํŠธ๋ฅผ ํ•ด์ œ
    2. CAN bus ๋…ธ๋“œ์˜ ๋น„ํŠธ ํƒ€์ด๋ฐ์„ CAN bus์˜ ๋น„ํŠธ ํƒ€์ด๋ฐ๊ณผ ์ผ์น˜์‹œํ‚ด

    ์†ŒํŠธํŠธ์›จ์–ด์—์„œ CAN_MCR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLEEP ๋น„ํŠธ๋ฅผ ํ•ด์ œํ•˜๋ฉด, ๋…ธ๋“œ๋Š” Sleep ๋ชจ๋“œ์—์„œ Normal ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๊ณ 
    ํ•˜๋“œ์›จ์–ด๋Š” CAN_MSR ๋ ˆ์ง€์Šคํ„ฐ์˜ SLAK ๋น„ํŠธ๋ฅผ ํ•ด์ œํ•˜์—ฌ CAN bus ๋…ธ๋“œ๊ฐ€ Normal ๋ชจ๋“œ์— ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

bxCAN Test Mode

  • Slient mode
    Slient mode์—์„œ๋Š” CAN ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CAN bus์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹ ,
    CAN ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž์‹ ์˜ Rx FIFO๋กœ ๋‹ค์‹œ ์ „์†กํ•˜์—ฌ ์ž์‹ ์˜ ์ž…๋ ฅ -> ์ž์‹ ์˜ ์ถœ๋ ฅ์ด ๋œ๋‹ค.
    Rx_FIFO๋งŒ ํ™œ์„ฑํ™” ํ•˜์—ฌ ์ˆ˜์‹  ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.

  • Loopback mode
    Loopback mode์—์„œ๋Š”CAN ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋Š” ์ž์‹ ์˜ Rx FIFO๋กœ ๋‹ค์‹œ ์ „์†กํ•˜์—ฌ
    ์ž์‹ ์˜ ์ถœ๋ ฅ -> ์ž์‹ ์˜ ์ž…๋ ฅ์ด ๋˜๋„๋ก ํ•˜๊ณ   
    Rx_FIFO์™€, Tx_FIFO๋ฅผ ๋‘˜๋‹ค ํ™œ์„ฑํ™” ํ•˜์—ฌ ์†ก์‹  ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.

  • Combined loopback and silent mode
    Combined loopback and silent mode์—์„œ๋Š” CAN ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ „์†กํ•œ ๋ฉ”์‹œ์ง€๋Š” ์ž์‹ ์˜ Rx FIFO๋กœ ๋‹ค์‹œ ์ „์†กํ•˜์—ฌ
    ์ž์‹ ์˜ ์ถœ๋ ฅ -> ์ž์‹ ์˜ ์ž…๋ ฅ์ด ๋˜๋„๋ก ํ•œ๋‹ค.
    Rx_FIFO์™€, Tx_FIFO๋ฅผ ๋‘˜๋‹ค ๋น„ํ™œ์„ฑํ™” ํ•˜์—ฌ ์ฆ‰, CAN_TX, CAN_RX๋กœ ๋ถ€ํ„ฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ 
    ์ž์‹ ์˜ ์ถœ๋ ฅ๊ณผ ์ž…๋ ฅ์ด ๋™์ผํ•œ์ง€ ๋งŒ์„ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค. 

 

๐Ÿ“ถ bxCAN ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 

bxCAN์€ Rx FIFO๋ฅผ ์ด์šฉํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ๋ฐ›์œผ๋ฉฐ mailbox๋ฅผ ์ด์šฉํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์†ก์‹ ํ•œ๋‹ค.  

Rx FIFO - ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 

Rx FIFO๋Š” CAN bus์—์„œ ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฉฐ
์•„๋ž˜ ๋น„ํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ 3๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฑฐ์ณ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

๋น„ํŠธ ์„ค๋ช…
FMP Receive FIFO์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์ž์•„๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
FOVR Receive FIFO๊ฐ€ ๋ฉ”์‹œ์ง€๋กœ ๊ฐ€๋“ ์ฐจ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
RFOM Receive FIFO๊ฐ€ ๋ฉ”์‹œ์ง€๋กœ ๊ฐ€๋“ ์ฐจ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅ ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„

Receive FiFO states

  1. Empty
    CAN Bus๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ•˜์—ฌ Mailbox๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ 
    Mailbox๊ฐ€ Empty ์ƒํƒœ์ด๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ „์†กํ•  ์ˆ˜ ์—†์œผ๋ฉฐ
    CAN_RFxR ๋ ˆ์ง€์Šคํ„ฐ์˜ FMP๋น„ํŠธ์˜ ๊ฐ’์ด 0x00์ผ ๋•Œ Empty ์ƒํƒœ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 
  2. PENDING_1,2,3
    CAN Bus๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ Mailbox์— ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์•„์ง ์ „์†ก๋˜์ง€ ์•Š๋Š” ์ƒํƒœ
    PENDING_1,2,3 ์— ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋Š” 1 -> 2-> 3  ์ˆœ์„œ๋Œ€๋กœ ์ „์†ก๋œ๋‹ค.
    ์ˆ˜์‹ ๋ฐ›์€ ๋ฉ”์‹œ์ง€์˜ ๊ฐœ์ˆ˜๋Š” CAN_RFxR ๋ ˆ์ง€์Šคํ„ฐ์˜ FMP ๋น„ํŠธ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. 
  3. OVERRUN
    FIFO ์•ˆ Mailbox๊ฐ€ ๋ฉ”์‹œ์ง€๋กœ ๊ฐ€๋“ ์ฐจ์„œ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
    OVERRUN์ด ๋ฐœ์ƒํ•˜๋ฉด CPU๋Š” OVERRUN ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉฐ CPU๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ ํ›„
    ์ตœ๊ทผ ๋ฉ”์‹œ์ง€ ์‚ญ์ œ, ์ด์ „ ๋ฉ”์‹œ์ง€ ๋ฎ์–ด์“ฐ๊ธฐ ๋“ฑ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    Overrun ๋ฐœ์ƒ ์‹œ ํ•˜๋“œ์›จ์–ด๊ฐ€ CAN_RFxR ๋ ˆ์ง€์Šคํ„ฐ์˜ FOVRx๋น„ํŠธ๋ฅผ ์„ค์ •ํ•จ

Mailbox - ๋ฉ”์‹œ์ง€ ์†ก์‹  

Mailbox๋Š” CAN bus์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฉฐ ์•„๋ž˜ ๋น„ํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ 4๊ฐ€์ง€ ์ƒํƒœ์— 
๊ฑฐ์ณ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

๋น„ํŠธ ์„ค๋ช…
RQCP Mailbox๊ฐ€ ์ „์†ก ํ™•์ธ์„ ์š”์ฒญํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
TXOK Mailbox์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก์— ์„ฑ๊ณตํ•˜์˜€๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
TME Mailbox์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก ๋งˆ์Šคํฌ์— ์˜ํ•ด ์ฐจ๋‹จ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
ABRQ Mailbox์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€์˜ ์ „์†ก์„ ์ค‘์ง€ํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
NART Mailbox์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ ฑ ๋Œ€ํ•œ ACK๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„

Transmit Maibox States

  1. Empty
    ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ์ „์†ก์— ์„ฑ๊ณตํ•˜์˜€๊ฑฐ๋‚˜, ์‹คํŒจํ•˜์˜€์œผ๋‚˜ ์žฌ์ „์†ก์„ ํ•˜์ง€ ์•Š์•„  Mailbox๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ
  2. PENDING
    Mailbox์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์•„์ง ์ „์†ก๋˜์ง€ ์•Š๋Š” ์ƒ
  3. SCHEDULED
    PENDING ์ƒํƒœ์˜ Mailbox ์ค‘ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ Mailbox์˜ ์ƒํƒœ  
  4. TRANSMIT
    Mailbox์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก ์ค‘์ธ ์ƒํƒœ

 

๐Ÿ“ถ bxCAN ํ•„ํ„ฐ๋ง

Acceptance Filter banks

์ˆ˜์‹ ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ํŠน์ • CAN ID๋ฅผ ๊ฐ€์ง„ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
CAN ID๋ฅผ ์„ค์ •์„ ํ†ตํ•œ ํ•„ํ„ฐ๋ง ๋ฐฉ์‹๊ณผ CAN ID์˜ MASK ์„ค์ •์„ ํ†ตํ•œ ํ•„ํ„ฐ๋ง ๋ฐฉ์‹์ด ์žˆ์œผ๋ฉฐ
ํ•„ํ„ฐ๋งํ•  ID ๋ฒ”์œ„๋ฅผ 16bits ๋˜๋Š” 32bits๋กœ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

  1. Empty
    ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ์ „์†ก์— ์„ฑ๊ณตํ•˜์˜€๊ฑฐ๋‚˜, ์‹คํŒจํ•˜์˜€์œผ๋‚˜ ์žฌ์ „์†ก์„ ํ•˜์ง€ ์•Š์•„  Mailbox๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ
  2. PENDING
    Mailbox์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์•„์ง ์ „์†ก๋˜์ง€ ์•Š๋Š” ์ƒํƒœ
  3. MATCHED
    Acceptance Filter Banks์— ๋“ฑ๋ก๋œ ํ•„ํ„ฐ ์ค‘ ํ•˜๋‚˜์™€ ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ผ์น˜ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ํ—ˆ์šฉ๋œ ์ƒํƒœ
    ํ•ด๋‹น ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜๋ฝ๋˜๋ฉด ๋ฉ”์ผ๋ฐ•์Šค๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • CAN ID ๋ฐฉ์‹ 
    ์ง€์ •๋œ ํŠน์ • ID๋งŒ ์ˆ˜์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฌ์šฐ๋‚˜ ์„ธ๋ฐ€ํ•œ ํ•„ํ„ฐ๋ง์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    ํ•„ํ„ฐ๋งํ•  ID๋ฅผ 32bits๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์ตœ๋Œ€ 2๊ฐœ, 16bits๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์ตœ๋Œ€ 4๊ฐœ๊นŒ์ง€ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    (e.g. ID๋ฅผ 0x00000000์œผ๋กœ ์„ค์ • -> ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ 
            ID๋ฅผ 0x12345678์œผ๋กœ ์„ค์ • -> ID๊ฐ€ 0x123456788์ธ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ) 
  • CAN ID์˜ Mask ์„ค์ •์„ ํ†ตํ•œ ๋ฐฉ์‹
    Mask๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ID์˜ ์ผ๋ถ€ ๋น„ํŠธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„ค์ •์ด ๋ณต์žกํ•˜๋‚˜ ๋ณด๋‹ค ์„ธ๋ฐ€ํ•œ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    ํ•„ํ„ฐ๋งํ•  ID๋ฅผ 32bits๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์ตœ๋Œ€ 1๊ฐœ, 16bits๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    (e.g. ID๋ฅผ 0x00000000์œผ๋กœ ์„ค์ • & Mask๋ฅผ 0x0000FFFF์œผ๋กœ ์„ค์ • ->
            ID์˜ ์ƒ์œ„ 16๋น„ํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ํ•˜์œ„ 16๋น„ํŠธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
            0x00000000, 0x00000001, ..., 0x0000FFFF)

Filter ํ™œ์„ฑํ™” 

Filter๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. CAN_FMR ๋ ˆ์ง€์Šคํ„ฐ์˜ FINIT ๋น„ํŠธ ์„ค์ •
    • Acceptance Filter 1๊ณผ Acceptance Filter 2์˜ ๊ฐ’์ด 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ
    • Acceptance Mask 1๊ณผ Acceptance Mask 2์˜ ๊ฐ’์ด 0xFFFFFFFF์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ
    • Acceptance Filter banks์˜ ์ƒํƒœ๊ฐ€ Inactive๋กœ ์„ค์ •๋จ
  2. CAN_FA1R ๋ ˆ์ง€์Šคํ„ฐ ๋˜๋Š” CAN_FA0R ๋ ˆ์ง€์Šคํ„ฐ์˜ ํ•ด๋‹น ๋น„ํŠธ ์„ค์ •
    • Acceptance Filter banks์˜ ์ƒํƒœ๊ฐ€ Active๋กœ ์„ค์ •๋จ

FilterScale์ด 32 bit์ธ ๊ฒฝ์šฐ ์œ—๋ถ€๋ถ„๊ณผ ๊ฐ™์œผ๋ฉฐ 16 bit์ธ ๊ฒฝ์šฐ ์•„๋žซ๋ถ€๋ถ„๊ณผ ๊ฐ™๋‹ค.ใ…‚S

 

๐Ÿ“ถ bxCAN Bit timing

๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๋Š” ์–‘์ธก ๋…ธ๋“œ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋น„ํŠธ ์œ„์น˜๋ฅผ ๋งž์ถ”๋Š” ๊ฒƒ์„ Bit timing์„ ๋งž์ถ˜๋‹ค๊ณ  ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ Bit timing์€ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ ๋น„ํŠธ๊ฐ€ ์ „์†ก๋˜๊ณ  ์ˆ˜์‹ ๋˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์กฐ์ ˆํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ 

์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ต์‹ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋™๊ธฐํ™” ์„ธ๊ทธ๋จผํŠธ(Sync Segment)
    ๋ฉ”์‹œ์ง€ ์ „์†ก ์ „์— ์ „์†ก๋˜๋ฉฐ ๋…ธ๋“œ๊ฐ€ ๋™๊ธฐํ™”๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. 
    1๊ฐœ์˜ Time Quanta๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 
  • ํŽธ์ง‘ ์„ธ๊ทธ๋จผํŠธ(Propagation Segment)
    ๋ฉ”์‹œ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฉ”์‹œ์ง€ ์‹๋ณ„์ž์™€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํŽ˜์ด์ฆˆ ๋ฒ„ํผ ์„ธ๊ทธ๋จผํŠธ(Phase Buffer Segment)
    ์ˆ˜์‹ ํ•˜๋Š” ๋…ธ๋“œ์˜ ๋งํฌ ์ƒํƒœ๋ฅผ ์•ˆ์ •ํ™”ํ•˜์—ฌ ์ˆ˜์‹  ๋…ธ๋“œ๊ฐ€ ๋ฉ”์‹œ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ๋น„ํŠธ ํƒ€์ž„ ์„ธ๊ทธ๋จผํŠธ(Bit Time Segment)
    ์ „์ฒด ๋น„ํŠธ ํƒ€์ž„์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋™๊ธฐํ™” ์„ธ๊ทธ๋จผํŠธ, ํŽธ์ง‘์„ธ๊ทธ๋จผํŠธ, ํŽ˜์ด์ฆˆ ๋ฒ„ํผ ์„ธ๊ทธ๋จผํŠธ์˜ ํ•ฉ๊ณผ ๊ฐ™๋‹ค.
  • ์‹œ๊ฐ„ ํ€€ํ…€(Time Quantum)
    ์‹œ๊ฐ„ ํ€€ํ…€์€ ๋น„ํŠธ ํƒ€์ž„์„ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ณธ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ, ๋น„ํŠธ ํƒ€์ž„์„ ์ •ํ™•ํ•œ ๋น„ํŠธ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ
    Prescaler / Clock์˜ ๊ฐ’์ด๋‹ค.
  • Sample Point
    ํŠน์ • ์ˆœ๊ฐ„์— ์ธก์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ
    Bit Segment 1๊ณผ 2 ์‚ฌ์ด์˜ ์–ด๋Š ํ•œ ์ง€์ ์— ์œ„์น˜ํ•˜๋ฉฐ ์ƒ˜ํ”Œ๋ง ์ฃผํŒŒ์ˆ˜์— ๋”ฐ๋ผ ํ•ด๋‹น ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.
    ์œ„์น˜ ๊ณต์‹ : (Sync_seg + Seg1) / ์ „์ฒด ํƒ€์ž„ ํ€€ํ…€ 

 

๐Ÿ“ถ bxCAN Error

bxCAN Error state diagram

์ƒํƒœ ์—๋Ÿฌ ํ”Œ๋ž˜๊ทธ ์ „์†ก ์—ฌ๋ถ€ ๋ฐ์ดํ„ฐ ์ „์†ก ์—ฌ๋ถ€    
Error Active ์ „์†ก ์ค‘๋‹จ
Error Passive ๋ฏธ์ „์†ก ๊ฐ€๋Šฅ
Error Off ๋ฏธ์ „์†ก ๊ฐ€๋Šฅ

Error Active

CAN bus์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„, ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์—๋Ÿฌ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์—๋Ÿฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•˜๋Š” ์ƒํƒœ

Error Active ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค‘๋‹จํ•˜๊ณ , ์—๋Ÿฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•œ๋‹ค.

Error Passive

Error Active ์ƒํƒœ์—์„œ ์—๋Ÿฌ๊ฐ€ ์ง€์†๋  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์—๋Ÿฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

Error Passive ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์—๋Ÿฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์—๋Ÿฌ๋ฅผ ์ „ํŒŒํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bus Off

Error Passive ์ƒํƒœ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ์ƒํƒœ

Error Off ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

[์ฐธ์กฐ]

https://www.cnblogs.com/shangdawei/p/4716869.html

https://eteo.tistory.com/389

http://www.bittiming.can-wiki.info/

https://www.youtube.com/watch?v=YHzd-VamCdE&t=305s

 

profile

Toby's Study Blog

@Toby12

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

๊ฒ€์ƒ‰ ํƒœ๊ทธ