Skip to main content
ๆŽงๅˆถๅ™จๅฑ€ๅŸŸ็ฝ‘๏ผˆCAN๏ผ‰ๆ˜ฏไธ€็งๅŸบไบŽๆถˆๆฏ็š„ไธฒ่กŒๅ่ฎฎใ€‚ๆœฏ่ฏญ CAN ๅ’Œ CAN ๆ€ป็บฟๅœจๅŒไธ€่ฏญๅขƒไธ‹ไฝฟ็”จใ€‚CAN ็š„ไผ˜็‚นๅฆ‚ไธ‹๏ผš
  • ไฝฟ็”จ CSMA/CD ๆ–นๆณ•ๅ’Œ้€ไฝ็ซžไบ‰๏ผŒๅœจไฝ็บงๅˆซๆ„Ÿ็Ÿฅๆ€ป็บฟๅนถไผ ่พ“ๆถˆๆฏใ€‚
  • ๆฏๆกๆถˆๆฏ้ƒฝ่ขซๅˆ†้…ไธ€ไธชไผ˜ๅ…ˆ็บงใ€‚ไผ˜ๅ…ˆ็บงๆœ€้ซ˜็š„ๆถˆๆฏๅง‹็ปˆๆŽงๅˆถๆ€ป็บฟไปฒ่ฃใ€‚็”ฑไบŽไปฒ่ฃๅŸบไบŽไฝ๏ผŒๅ› ๆญคๅญ˜ๅœจๆ˜พๆ€งๅ’Œ้šๆ€งไฝ็”ตๅนณใ€‚
  • ไปปไฝ•่Š‚็‚น้ƒฝๅฏไปฅ้šๆ—ถๅ‘้€๏ผŒๆฒกๆœ‰ไธปไปŽ่Š‚็‚นไน‹ๅˆ†ใ€‚
  • ๆ‰€ๆœ‰ๆ•ฐๆฎ้€š่ฟ‡ไธคๆก๏ผˆๅทฎๅˆ†ๅฏน๏ผ‰็บฟ่ทฏไผ ่พ“๏ผšCAN_H ๅ’Œ CAN_L ็บฟใ€‚
  • CAN ่Š‚็‚นไฝฟ็”จไฝๅŒๆญฅ่ฟ›่กŒๅŒๆญฅ๏ผŒๅ…ถไธญๆฏไธชไฝๆ—ถ้—ด่ขซๅˆ’ๅˆ†ไธบๅ››ไธชๆ—ถ้—ด้‡ๅญๆฎตใ€‚
  • ้€š่ฟ‡ๅŸบไบŽๆถˆๆฏ็š„ๅ่ฎฎๅฎž็Žฐๅคšไธช่Š‚็‚นไน‹้—ด็š„้€šไฟก๏ผŒๆ— ้œ€ๅคง้‡ๅธƒ็บฟใ€‚
  • ้€š่ฟ‡ๅŒ…ๆ‹ฌๆฃ€ๆต‹ใ€้€š็Ÿฅๅ’Œ็บ ๆญฃๅœจๅ†…็š„้”™่ฏฏ็ฎก็†็กฎไฟๆ•ฐๆฎๅฎ‰ๅ…จใ€‚
ๆณจๆ„
  • ๅœจ RB3Gen2 ๅผ€ๅ‘ๅฅ—ไปถๅ’Œ Dragonwing IQ-615 ่ฏ„ไผฐๅฅ—ไปถไธŠ๏ผŒCAN ้€š่ฟ‡ๅค–้ƒจ Microchip SPI ่ฝฌ CAN ๆŽงๅˆถๅ™จ้ป˜่ฎคๅฏ็”จใ€‚QCS6490ใ€QCS5430 ๅ’Œ Dragonwing IQ-615 ๅ‡ไธๅŒ…ๅซๆฟ่ฝฝ CAN ๆŽงๅˆถๅ™จใ€‚
  • Dragonwing IQ-9075 ๅ’Œ Dragonwing IQ-8275 ๆ”ฏๆŒ RTSS CAN๏ผŒไฝ†่ฝฏไปถไธญๅฐšๆœชๅฏ็”จใ€‚

CAN ็‰นๆ€ง

CAN ๅ่ฎฎๆ”ฏๆŒไปฅไธ‹็‰นๆ€งใ€‚
  • ๅŸบไบŽไผ˜ๅ…ˆ็บง็š„ๅคšๆŽงๅˆถๅ™จๆ€ป็บฟ่ฎฟ้—ฎ
  • ๅŸบไบŽๅ†…ๅฎน็š„้ž็ ดๅๆ€งไปฒ่ฃ
  • ้€š่ฟ‡ๅ…จๅธงไผ ่พ“ๅฎž็Žฐๅนฟๆ’ญ
  • ้€š่ฟ‡ๆŽฅๅ—่ฟ‡ๆปคๅฎž็Žฐ็ป„ๆ’ญๅธงไผ ่พ“
  • ่ฟœ็จ‹ๆ•ฐๆฎ่ฏทๆฑ‚
  • ้…็ฝฎ็ตๆดปๆ€ง
  • ๅ…จ็ฝ‘ๆ•ฐๆฎไธ€่‡ดๆ€ง
  • ้”™่ฏฏๆฃ€ๆต‹ๅ’Œ้”™่ฏฏ้€š็Ÿฅ
  • ่‡ชๅŠจ้‡ไผ ๅœจไผ ่พ“่ฟ‡็จ‹ไธญๅคฑๅŽปไปฒ่ฃใ€็ผบๅฐ‘ๅบ”็ญ”ๆˆ–้‡ๅˆฐ้”™่ฏฏ็š„ๅธง
  • ๅŒบๅˆ†่Š‚็‚น็š„ไธดๆ—ถ้”™่ฏฏๅ’Œๆฐธไน…ๆ€งๆ•…้šœ๏ผŒๅนถ่‡ชๅŠจๅœ็”จๆ•…้šœ่Š‚็‚น

CAN ๆžถๆž„

MCP2517 ๆ˜ฏไธ€ๆฌพๅค–้ƒจๅฏ้…็ฝฎ็š„ CAN ๆŽงๅˆถๅ™จ๏ผŒๅฏ้€š่ฟ‡ SPI ็บฟ่ฎฟ้—ฎใ€‚SPI ๆŽฅๅฃๆœ€้ซ˜ๆ”ฏๆŒ 20 MHz๏ผŒๅนถๆ”ฏๆŒ Mode0,1ใ€‚่ฏฅๆŽงๅˆถๅ™จ่ฟžๆŽฅๅˆฐไธ€ไธช QUP ๆจกๅ—๏ผŒๅ…ถ SE3 ้…็ฝฎไธบ 4 ๅผ•่„š SPI ๆ“ไฝœใ€‚SPI ๆŽงๅˆถๅ™จ่ฟžๆŽฅๅˆฐๆ”ถๅ‘ๅ™จ๏ผˆMCP2561xxx๏ผ‰๏ผŒๅŽ่€…่ฟžๆŽฅๅˆฐ CAN ๆ€ป็บฟใ€‚SPI ๆŽงๅˆถๅ™จๅ’Œ CAN ๆ”ถๅ‘ๅ™จ็š„็”ตๆบ่พ“ๅ…ฅๆฅ่‡ช SoCใ€‚
CAN ๆžถๆž„

ๅ›พ๏ผšCAN ๆžถๆž„

็”จๆˆทๅบ”็”จ็จ‹ๅบไธŽ SocketCAN ๆไพ›็š„็ฝ‘็ปœๆŽฅๅฃ้€šไฟกใ€‚่ฝฏไปถ้ฉฑๅŠจๆ˜ฏ Linux ไธญ SPI ๆ ธๅฟƒๆจกๅ—็š„ๅฎขๆˆท็ซฏ๏ผŒQUP_SPI ้ฉฑๅŠจๅ‘่ฏฅๆ ธๅฟƒๆจกๅ—ๆณจๅ†Œใ€‚ๅฎž้™…็กฌไปถ้€š่ฟ‡ SPI ๅผ•่„š่ฟžๆŽฅใ€‚
CAN ่ฝฏไปถๆ ˆ

ๅ›พ๏ผšCAN ่ฝฏไปถๆ ˆ

CAN API

ๆœ‰ๅ…ณ CAN ๅ…ฌๅ…ฑ API๏ผŒ่ฏทๅ‚้˜… https://www.kernel.org/doc/Documentation/networking/can.txtใ€‚

CAN ็คบไพ‹ๅ’Œๅทฅๅ…ท

ไธ‹่กจๅˆ—ๅ‡บไบ†็”จไบŽๆ˜พ็คบใ€่ฎฐๅฝ•ใ€็”Ÿๆˆๅ’Œ้‡ๆ”พ CAN ๆต้‡็š„ SocketCAN ็”จๆˆท็ฉบ้—ดๅฎž็”จๅทฅๅ…ทๅ’Œๅทฅๅ…ทใ€‚ ่กจ๏ผš SocketCAN ๅฎž็”จๅทฅๅ…ท
ๅฎž็”จๅทฅๅ…ทๆ่ฟฐ
candumpๆ˜พ็คบใ€่ฟ‡ๆปค CAN ๆ•ฐๆฎๅนถๅฐ†ๅ…ถ่ฎฐๅฝ•ๅˆฐๆ–‡ไปถใ€‚
canplayer้‡ๆ”พ CAN ๆ—ฅๅฟ—ๆ–‡ไปถใ€‚
cansendๅ‘้€ๅ•ไธชๅธงใ€‚
cangen็”Ÿๆˆ๏ผˆ้šๆœบ๏ผ‰CAN ๆต้‡ใ€‚
cansnifferๆ˜พ็คบ CAN ๆ•ฐๆฎๅ†…ๅฎนๅทฎๅผ‚๏ผˆไป…้™ 11 ไฝ CAN ID๏ผ‰ใ€‚
่ฆไธ‹่ฝฝ CAN ๅฎž็”จๅทฅๅ…ท๏ผŒ่ฏทๅ‚้˜… https://github.com/linux-can/can-utilsใ€‚ ๆœ‰ๅ…ณ CAN ้ฉฑๅŠจๆ–‡ไปถ็š„ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… kernel/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.cใ€‚

CAN ๅˆ†ๆžไปช - PCAN-USB FD

PCAN-USB FD ๆ˜ฏไธ€ๆฌพๅคšๅŠŸ่ƒฝ CAN ๆ•ฐๆฎๅŒ…/ๆถˆๆฏๅ—…ๆŽขๅ™จ๏ผŒๅฏไฝœไธบไปปไฝ• CAN ๆ€ป็บฟไธŠ็š„่Š‚็‚น่ฟ่กŒ๏ผŒๆ”ฏๆŒ็ตๆดป็š„ๆ•ฐๆฎ้€Ÿ็އใ€‚ๅฎƒๅฏ็”จไบŽ้€š่ฟ‡ USB ๅœจไธปๆœบไธŠๅ—…ๆŽขๅ’Œๅ‘้€ CAN ๆ•ฐๆฎๅŒ…ใ€‚ไธป่ฆ็‰นๆ€งๅฆ‚ไธ‹๏ผš
  • PCAN-View GUI ๅทฅๅ…ท
    • ๆไพ›ๆ นๆฎ็”จๆˆท้œ€ๆฑ‚ๅ—…ๆŽขๅ’Œๅ‘้€ CAN ๆ•ฐๆฎๅŒ…็š„ไพฟๆทๆ–นๅผใ€‚
    • ๅœจๅผ€ๅ‘ๅ’Œๆต‹่ฏ•ๆœŸ้—ด็›‘ๆŽงๅ’Œ่ฐƒ่ฏ• CAN ๆ•ฐๆฎๅŒ…ใ€‚
  • PCAN-USB FD ๆŽฅๅฃ
    • ๅฏ่ฝปๆพ่ฟžๆŽฅๅˆฐ CAN FD ๅ’Œ CAN ็ฝ‘็ปœใ€‚
    • ็ดงๅ‡‘็š„ๅก‘ๆ–™ๅค–ๅฃณ๏ผŒ้€‚็”จไบŽ็งปๅŠจๅบ”็”จใ€‚
    • ้ซ˜่พพ 500 V ็š„็”ตๆฐ”้š”็ฆปๅฐ† PC ไธŽ CAN ๆ€ป็บฟ่งฃ่€ฆใ€‚
  • CAN FD ๆ ‡ๅ‡†
    • ็‰น็‚นๆ˜ฏๆ•ฐๆฎไผ ่พ“ๅธฆๅฎฝๆ›ด้ซ˜ใ€‚
    • ๅ…่ฎธๆฏไธช CAN FD ๅธงไผ ่พ“ๅคš่พพ 64 ไธชๆ•ฐๆฎๅญ—่Š‚๏ผˆ่€Œไธๆ˜ฏ 8 ไธช๏ผ‰ใ€‚
    • ๆ”ฏๆŒ้ซ˜่พพ 12 Mbit/s ็š„ๆฏ”็‰น็އใ€‚
    • ๅ‘ไธ‹ๅ…ผๅฎน CAN 2.0 ๆ ‡ๅ‡†ใ€‚
    • CAN FD ่Š‚็‚นๅฏไปฅๆ’ๅ…ฅๆฒกๆœ‰ CAN FD ๆ‰ฉๅฑ•็š„็Žฐๆœ‰ CAN ็ฝ‘็ปœใ€‚
็กฌไปถ่ฎพ็ฝฎ
  1. ่ฟžๆŽฅๅˆฐ DB9 ่ฟžๆŽฅๅ™จใ€‚
    • PCAN ๅ…ทๆœ‰ไธ€ไธช DB9 ่ฟžๆŽฅๅ™จ๏ผŒๅฏไปฅๆ’ๅ…ฅไปปไฝ•ๆ ‡ๅ‡† DB9 ่ฟžๆŽฅๅ™จใ€‚
  2. ่ฟžๆŽฅๅˆฐ Qualcomm ่ฎพๅค‡ใ€‚
    • ๅผ•ๅ‡บ CAN_Hใ€CAN_L ๅ’Œ GND ็บฟใ€‚
    • ๅฐ†่ฟ™ไบ›็บฟ่ฟžๆŽฅๅˆฐไธคไธช 120 ฮฉ ็š„็ปˆ็ซฏ็”ต้˜ปใ€‚
  3. ่ฟžๆŽฅ CAN_Hใ€CAN_L ๅ’Œๅœฐ็บฟใ€‚
CAN ่ฟžๆŽฅ

ๅ›พ๏ผšCAN ่ฟžๆŽฅ

  1. ่ฟžๆŽฅๅค–้ƒจ็ปˆ็ซฏ็”ต้˜ปใ€‚
ๆณจๆ„่ฎพๅค‡ๆฒกๆœ‰ 120 ฮฉ ็š„ๅ†…้ƒจ็ปˆ็ซฏ็”ต้˜ปใ€‚่ฟ™ไธ€็‚น่‡ณๅ…ณ้‡่ฆ๏ผŒๅ› ไธบๆŸไบ›ๅทฅๅ…ทๆไพ›ไบ†ๅฏน็ปˆ็ซฏ็”ต้˜ป็š„ๅ†…็ฝฎๆ”ฏๆŒใ€‚
CAN ็ปˆ็ซฏ็”ต้˜ป

ๅ›พ๏ผšCAN ็ปˆ็ซฏ็”ต้˜ป

ไธ‹ๅ›พๆ˜พ็คบไบ†่ฟžๆŽฅๅฅฝ็š„็กฌไปถใ€‚
CAN USB FDใ€ๅค–้ƒจ็”ต้˜ปๅ’Œ่ฎพๅค‡่ฟžๆŽฅ

ๅ›พ๏ผšCAN USB FDใ€ๅค–้ƒจ็”ต้˜ปๅ’Œ่ฎพๅค‡่ฟžๆŽฅ

ๅฏๅŠจ CAN ๆŽฅๅฃ

ๅœจๆž„ๅปบ CAN ้ฉฑๅŠจๅนถๅฐ†ๅ…ถๅŠ ่ฝฝๅˆฐๅ†…ๆ ธๅŽ๏ผŒไปฅไธ‹ๅ‘ฝไปคๅบๅˆ—ไผšๅ‘้€ๆ•ฐๆฎไปฅ็กฎ่ฎค CAN ่Š‚็‚นๆ˜ฏๅฆๅทฒๅฏๅŠจใ€‚ๅฏไปฅไฝฟ็”จไธ‹่กจๅˆ—ๅ‡บ็š„ๅ‘ฝไปคๅฏๅŠจๆˆ–ๅœๆญข CAN ่Š‚็‚นใ€‚
ๆณจๆ„ๆ‰€ๆœ‰็ฝ‘็ปœ่ฎพๅค‡ๅ‡ไฝฟ็”จ ifconfig -aใ€‚
่กจ๏ผš CAN ๅ‘ฝไปค
่ฏดๆ˜Žๅ‘ฝไปค
ๆŸฅ็œ‹ CAN ่Š‚็‚น็ผ–ๅทifconfig -a
่ฎพ็ฝฎ 125 kbps ็š„ๆฏ”็‰น็އip link set can0 up type can bitrate 125000
ๅฏๅŠจ CANip link set can0 up
ๅœๆญข CANip link set can0 down
ๆฃ€ๆŸฅ CAN ้…็ฝฎip -details link show can0
CAN ๅ†…้ƒจ็Žฏๅ›žip link set can0 up type can bitrate 500000 loopback on
CAN FD ๅ†…้ƒจ็Žฏๅ›žip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on loopback on
ๅ‘้€ CAN FD ๅธงcansend can0 213##311223344
่ฆๅฏๅŠจไปปไฝ• CAN ่Š‚็‚น๏ผŒๅฟ…้กปๅฎšไน‰ๆ€ป็บฟ็š„ๆฏ”็‰น็އ๏ผŒๆˆ–่€…ๅœจๆ€ป็บฟ้€Ÿ็އๅทฒๅฏ็”จๆ—ถ่ฟ›่กŒ้…็ฝฎใ€‚ๆญค้…็ฝฎๅฏ็กฎไฟ CAN ่Š‚็‚นๅค„ไบŽๅฏๅŠจๅ’ŒๆดปๅŠจ็Šถๆ€ใ€‚ๆœ‰ๅ…ณ CAN ๅฎž็”จๅทฅๅ…ท็š„ๆ›ดๅคš่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ฏทๅ‚้˜… https://manpages.debian.org/testing/can-utils/index.htmlใ€‚

ๅ‘้€ๅ’ŒๆŽฅๆ”ถๆ•ฐๆฎ

CAN-Utils ๆ–‡ไปถไธญๆไพ›ไบ†ไธ€ไบ›ๅฎž็”จๅทฅๅ…ทใ€‚SocketCAN ไฝฟ CAN ่Š‚็‚น่ƒฝๅคŸๅ‘้€ๅ’ŒๆŽฅๆ”ถๆ•ฐๆฎใ€‚SocketCAN API ไนŸๅฏ็”จไบŽ่‡ชๅฎšไน‰ๅบ”็”จ็จ‹ๅบใ€‚
  • ๅ‘้€ๅธฆ 11 ไฝ ID ็š„ๆ•ฐๆฎ
  • ๅ‘้€ๅธฆ 29 ไฝ ID ็š„ๆ•ฐๆฎ
  • ๆŸฅ็œ‹ can0 ่Š‚็‚นไธŠๅฝ“ๅ‰ไผ ๅ…ฅ็š„ๆ•ฐๆฎ

้…็ฝฎ CAN ๆŽฅๅฃ

SocketCAN ๆ˜ฏ Linux ไธŠ CAN ๅ่ฎฎ็š„ไธ€็งๅฎž็Žฐใ€‚SocketCAN ไฝฟ็”จ Berkeley ๅฅ—ๆŽฅๅญ— API ๅ’Œ Linux ็ฝ‘็ปœๆ ˆ๏ผŒๅนถๅฐ† CAN ่ฎพๅค‡้ฉฑๅŠจๅฎž็Žฐไธบ็ฝ‘็ปœๆŽฅๅฃใ€‚CAN ๅฅ—ๆŽฅๅญ— API ็š„่ฎพ่ฎกๅฐฝๅฏ่ƒฝไธŽ TCP/IP ๅ่ฎฎ็›ธไผผ๏ผŒไฝฟ็†Ÿๆ‚‰็ฝ‘็ปœ็ผ–็จ‹็š„็”จๆˆทๅฏไปฅ่ฝปๆพๅญฆไน ๅฆ‚ไฝ•ไฝฟ็”จ CAN ๅฅ—ๆŽฅๅญ—ใ€‚

ๅˆๅง‹ๅŒ–็กฌไปถ

้ฉฑๅŠจไผšๅˆๅง‹ๅŒ–ๅนถ้…็ฝฎๅบ•ๅฑ‚็กฌไปถๆจกๅ—ใ€‚ๅˆๅง‹ๅŒ–ๅ‘็”Ÿๅœจ่ฐƒ็”จ driver's _probe() ๅ‡ฝๆ•ฐไน‹ๅŽใ€‚

่ฐƒ่ฏ• CAN ้—ฎ้ข˜

ๅฏไปฅไฝฟ็”จ ftrace ๅทฅๅ…ท่ฐƒ่ฏ• CAN ้—ฎ้ข˜ใ€‚MCP2517 ้ฉฑๅŠจๆ”ฏๆŒ dev_coredump() APIใ€‚

CAN ็คบไพ‹

ๆœ‰ๅ…ณ CAN ็คบไพ‹๏ผŒ่ฏทๅ‚้˜… https://github.com/linux-can/can-utils/blob/master/README.mdใ€‚