Files
PX4-Autopilot/docs/en/dronecan/ark_cannode.md
Jacob Dahl 0524a374d9 fix(drivers/uavcannode): make CANNODE_NODE_ID the sole node ID policy (#27644)
* fix(drivers/uavcannode): make CANNODE_NODE_ID the sole node ID policy

The startup bootloader_app_shared_write() never reached the bootloader:
it only accepts App-signed data and invalidates the shared region on
every boot. The only consumer was uavcannode itself on a restart
without a reset (nsh stop/start), where the persisted bus_speed=0 made
the CAN driver init fail and left the node off the bus. The bootloader
learns our node ID exclusively through the firmware update handoff in
cb_beginfirmware_update, which already carries the static ID.

CANNODE_NODE_ID now overrides the bootloader handoff only when nonzero,
so the default (0) reuses the ID the bootloader already allocated
instead of running allocation a second time. The handoff is ignored
unless it carries a valid bitrate, healing regions poisoned by firmware
that wrote bus_speed=0. Max is 125 because 126/127 are reserved for
debug tools by DroneCAN convention, matching UAVCAN_NODE_ID.

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>

* fix(drivers/uavcannode): harden bootloader handoff validation

Invalidate the shared region whenever it was read valid, not only when
the handoff is accepted, so stale data cannot linger on boards whose
bootloader never invalidates it. Require a plausible bitrate (the
CANNODE_BITRATE minimum) rather than nonzero: the canbootloader alt-app
update path can hand off bus_speed = CAN_UNDEFINED (999). Reword the
invalid-param error, which claimed dynamic allocation while keeping the
bootloader handoff.

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>

---------

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>
2026-07-16 20:43:22 -06:00

4.8 KiB

ARK CANnode

ARK CANnode is an open source generic DroneCAN node that includes a 6 degree of freedom IMU. Its main purpose is to enable the use of non-CAN sensors (I2C, SPI, UART) on the CAN bus. It also has PWM outputs to expand a vehicle's control outputs in quantity and physical distance.

ARK CANnode

Where to Buy

Order this module from:

Hardware Specifications

  • Open Source Schematic and BOM
  • Sensors
    • Bosch BMI088 6-Axis IMU or Invensense ICM-42688-P 6-Axis IMU
  • STM32F412CGU6 MCU
    • 1MB Flash
  • Two Pixhawk Standard CAN Connectors
    • 4 Pin JST GH
  • Pixhawk Standard I2C Connector
    • 4 Pin JST GH
  • Pixhawk Standard UART/I2C Connector (Basic GPS Port)
    • 6 Pin JST GH
  • Pixhawk Standard SPI Connector
    • 7 Pin JST GH
  • PWM Connector
    • 10 Pin JST
    • 8 PWM Outputs
    • Matches Pixhawk 4 PWM Connector Pinout
  • Pixhawk Standard Debug Connector
    • 6 Pin JST SH
  • Small Form Factor
    • 3cm x 3cm x 1.3cm
  • LED Indicators
  • USA Built
  • Power Requirements
    • 5V
    • Current dependent on connected peripherals

Hardware Setup

Wiring

The ARK CANnode is connected to the CAN bus using a Pixhawk standard 4 pin JST GH cable. For more information, refer to the CAN Wiring instructions.

Firmware Setup

ARK CANnode runs the PX4 DroneCAN Firmware. As such, it supports firmware update over the CAN bus and dynamic node allocation.

ARK CANnode boards ship with recent firmware pre-installed, but if you want to build and flash the latest firmware yourself see PX4 DroneCAN Firmware > Building the Firmware.

  • Firmware target: ark_cannode_default
  • Bootloader target: ark_cannode_canbootloader

Flight Controller Configuration

Enable DroneCAN

In order to use the ARK CANnode board, connect it to the Pixhawk CAN bus and enable the DroneCAN driver by setting parameter UAVCAN_ENABLE to 2 for dynamic node allocation (or 3 if using DroneCAN ESCs).

The steps are:

Once enabled, the module will be detected on boot.

DroneCAN configuration in PX4 is explained in more detail in DroneCAN > Enabling DroneCAN.

Enable Sensors

You will need to enable the subscriber appropriate for each of the sensors that are connected to the ARK CANnode.

This is done using the parameters named like UAVCAN_SUB_* in the parameter reference (such as UAVCAN_SUB_ASPD, UAVCAN_SUB_BARO etc.).

Ark CANNode Configuration

On the ARK CANnode, you may need to configure the following parameters:

Parameter Description
CANNODE_NODE_ID CAN node ID (0 for dynamic allocation). If set to 0 (default), dynamic node allocation is used. Set to 1-125 to use a static node ID.
CANNODE_TERM CAN built-in bus termination.

LED Meanings

  • Blinking green is normal operation
  • Rapid blinking blue and red is firmware update

If you see a solid red LED there is an error and you should check the following:

  • Make sure the flight controller has an SD card installed.
  • Make sure the ARK CANnode has ark_cannode_canbootloader installed prior to flashing ark_cannode_default.
  • Remove binaries from the root and ufw directories of the SD card and try to build and flash again.

See Also