aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Kirienko <pavel.kirienko@gmail.com>2014-05-06 20:14:07 +0400
committerPavel Kirienko <pavel.kirienko@gmail.com>2014-05-06 20:14:07 +0400
commit5716dad25db27315fa7cebf8183a71f864860f41 (patch)
tree0aba50a5ce503b53f95341d0156996a452c769c4
parent7d7a375dd1a69bd286f127de51b11e5ecd390640 (diff)
downloadpx4-firmware-5716dad25db27315fa7cebf8183a71f864860f41.tar.gz
px4-firmware-5716dad25db27315fa7cebf8183a71f864860f41.tar.bz2
px4-firmware-5716dad25db27315fa7cebf8183a71f864860f41.zip
Added workaround for hardware issue on Pixhawk v1
-rw-r--r--src/modules/uavcan/module.mk2
-rw-r--r--src/modules/uavcan/uavcan_main.cpp8
2 files changed, 8 insertions, 2 deletions
diff --git a/src/modules/uavcan/module.mk b/src/modules/uavcan/module.mk
index 6974de8ca..3966210b5 100644
--- a/src/modules/uavcan/module.mk
+++ b/src/modules/uavcan/module.mk
@@ -61,7 +61,7 @@ include $(UAVCAN_DIR)/libuavcan_drivers/stm32/driver/include.mk
SRCS += $(LIBUAVCAN_STM32_SRC)
INCLUDE_DIRS += $(LIBUAVCAN_STM32_INC)
EXTRADEFINES += -DUAVCAN_STM32_NUTTX \
- -DUAVCAN_STM32_NUM_IFACES=1
+ -DUAVCAN_STM32_NUM_IFACES=2
#
# Invoke DSDL compiler
diff --git a/src/modules/uavcan/uavcan_main.cpp b/src/modules/uavcan/uavcan_main.cpp
index fbb2e174b..474063aa6 100644
--- a/src/modules/uavcan/uavcan_main.cpp
+++ b/src/modules/uavcan/uavcan_main.cpp
@@ -37,6 +37,7 @@
#include <systemlib/err.h>
#include <systemlib/systemlib.h>
#include <arch/board/board.h>
+#include <arch/chip/chip.h>
#include "uavcan_main.hpp"
extern "C" __EXPORT int uavcan_main(int argc, char *argv[]);
@@ -53,9 +54,14 @@ void print_usage()
int test_thread(int argc, char *argv[])
{
+ /*
+ * Forced pull up on CAN2 is required for Pixhawk v1 where the second interface lacks a transceiver.
+ * If no transceiver is connected, the RX pin will float, occasionally causing CAN controller to
+ * fail during initialization.
+ */
stm32_configgpio(GPIO_CAN1_RX);
stm32_configgpio(GPIO_CAN1_TX);
- stm32_configgpio(GPIO_CAN2_RX);
+ stm32_configgpio(GPIO_CAN2_RX | GPIO_PULLUP);
stm32_configgpio(GPIO_CAN2_TX);
int res = can_driver.init(1000000);
if (res < 0)