RPI - CANOpen: Difference between revisions
Line 35: | Line 35: | ||
== CANopen message structure == | == CANopen message structure == | ||
The CANopen frame contains the arbitration field (12 bits) and data fields (8 bytes) | The CANopen frame contains the arbitration field (12 bits) and data fields (8 bytes) | ||
[[File:Fig1.1.png|thumb|CANopen frame sequence]] | [[File:Fig1.1.png|thumb|middle|CANopen frame sequence]] | ||
The arbitration field contains an 11 bit identifier (COB-ID) which describes the message types. The cob-id defines the message priority, 0 is the highest, 0x7ff is the lowest. It also contains a 1 bit RTR (remote transmit request). This requests a response from the target device. | The arbitration field contains an 11 bit identifier (COB-ID) which describes the message types. The cob-id defines the message priority, 0 is the highest, 0x7ff is the lowest. It also contains a 1 bit RTR (remote transmit request). This requests a response from the target device. | ||
[[File:Fig1.2.png|thumb|Arbitration Fields]] | [[File:Fig1.2.png|thumb|middle|Arbitration Fields]] | ||
NMT messages have cob-id of 0 (zero). These messages request the communication state of the node-id (data byte 2) be set to the designated state in data byte 1. | NMT messages have cob-id of 0 (zero). These messages request the communication state of the node-id (data byte 2) be set to the designated state in data byte 1. | ||
[[File:Fig1.3.png|thumb|NMT message structure]] | [[File:Fig1.3.png|thumb|middle|NMT message structure]] |
Revision as of 15:13, 30 November 2023
Links
https://www.autopi.io/blog/canopen-simple-introduction-explained/
https://copperhilltech.com/cangineberry-canopen-module-for-raspberry-pi/
https://copperhilltech.com/search.php?search_query=pican3&Search=
Config
Running a Seeed mcp2518fd based board with 2 can bus.
after boot, should see the following:
$ dmesg | grep can
[ 11.115212] mcp251xfd spi0.1 can0: MCP2518FD rev0.0 (-RX_INT -PLL -MAB_NO_WARN +CRC_REG +CRC_RX +CRC_TX +ECC -HD o:40.00MHz c:40.00MHz m:20.00MHz rs:17.00MHz es:16.66MHz rf:17.00MHz ef:16.66MHz) successfully initialized.
[ 11.217854] mcp251xfd spi0.0 can1: MCP2518FD rev0.0 (-RX_INT -PLL -MAB_NO_WARN +CRC_REG +CRC_RX +CRC_TX +ECC -HD o:40.00MHz c:40.00MHz m:20.00MHz rs:17.00MHz es:16.66MHz rf:17.00MHz ef:16.66MHz) successfully initialized.
Now set the interface "up":
$ sudo ip link set can0 up type can bitrate 100000
$ sudo ip link set can1 up type can bitrate 100000
Now testing the link with can0 connected to can1.
$ candump can0
$ cansend can1 111#ff
CANopen message structure
The CANopen frame contains the arbitration field (12 bits) and data fields (8 bytes)
The arbitration field contains an 11 bit identifier (COB-ID) which describes the message types. The cob-id defines the message priority, 0 is the highest, 0x7ff is the lowest. It also contains a 1 bit RTR (remote transmit request). This requests a response from the target device.
NMT messages have cob-id of 0 (zero). These messages request the communication state of the node-id (data byte 2) be set to the designated state in data byte 1.