The table of CAN node numbers is full, or was cleared
What ArduPilot says:
- DroneCAN DNA allocation failed; database full
- UC DNA database reset
A DroneCAN device with no fixed number asks the flight controller for one (dynamic node allocation, DNA). The flight controller remembers every number it has ever given, so that a device always gets the same one; there are 125. “allocation failed; database full” means none is left, and the device that asked stays without a number and does not work. “UC DNA database reset” confirms that the table was cleared at this start.
What to do, most likely first
Many different devices have been connected to this flight controller over time (a test bench).
FixClear the table: add 1 to
CAN_D1_UC_OPTION(bit 0) and reboot; the bit clears itself.A device changes its hardware ID at every start and takes a new number each time.
CheckThe same device shows up under a new node number after each power cycle.
FixGive that device a fixed node number, or update its firmware.
Parameters to look at
| Parameter | What it is |
|---|---|
CAN_D1_UC_OPTION | DroneCAN options |
Where to do it:Board & Wiring Planner
The code that sends it
DroneCAN DNA allocation failed; database full
libraries/AP_DroneCAN/AP_DroneCAN_DNA_Server.cpp AP_DroneCAN_DNA_Server::handle_allocation() · Open in ArduPilot Copter-4.7.1
UC DNA database reset
libraries/AP_DroneCAN/AP_DroneCAN_DNA_Server.cpp AP_DroneCAN_DNA_Server::init() · Open in ArduPilot Copter-4.7.1