Hello Udoo Community, I'm currently trying to get the Can Bus working on the Udoo Quad. Has someone tried the same already? I have the current kernel sources from http://github.com/UDOOboard/Kernel_Unico and changed the following parts: arch/arm/mach-mx6/board-mx6_seco_UDOO.c: Line 140ff: Code: /******************* CAN *******************/ #define MX6_SECO_UDOO_CAN1_STBY IMX_GPIO_NR(1, 2) #define MX6_SECO_UDOO_CAN1_EN IMX_GPIO_NR(1, 4) Line 1078ff: Code: imx6q_add_flexcan0(&mx6q_sabrelite_flexcan0_pdata); arch/arm/mach-mx6/board-mx6qd_seco_UDOO.h Line 369ff: Code: //MX6Q_PAD_GPIO_7__GPIO_1_7, // can tx MX6Q_PAD_GPIO_7__CAN1_TXCAN, //MX6Q_PAD_GPIO_8__GPIO_1_8, // can rx MX6Q_PAD_GPIO_8__CAN1_RXCAN, Line471: Code: //MX6Q_PAD_GPIO_8__GPIO_MODE, //MX6Q_PAD_GPIO_7__GPIO_MODE, But probably these are not all changes necessary, as its not working. Greets and thanks for any help, yesombre
Seems like its working now. Haven't tried actual communication, but the device is opening. Code: root@localhost:/home/udoo# ip link set can0 type can bitrate 125000 root@localhost:/home/udoo# ipconfig can0 up root@localhost:/home/udoo# ifconfig can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP RUNNING NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:142 ... I will keep you posted if can communication is really working. Greets, yesombre
Hey, I would also be really interested in information about it! Was there any progress or verification?
Hello yesombre, thanks for your post. CAN is working fine with the your changes. Below is the complete diff i used. I do not use any enable or standby pin, only the RX and TX pins. When connecting the CAN-Phy, i discovered a mistake in the schematic pin labels. According to the datasheet (and the kernel sources), GPIO_8 is FLEXCAN1_RX, but in the UDOO schematic the signal is labeled CANTX_IMX. But GPIO_8 must be connected to the R (Receiver output) pin of the Phy. GPIO_7 (FLEXCAN1_TX, and in the schematic CANRX_IMX) must be connected to the D (Driver input) pin of the CAN-Phy. Additionally the according pins of the arduino mcu must be configured as input pins, so they do not interfere. I use the yocto image from https://github.com/rongals/meta-ronga-udoo and added the following packages: Code: IMAGE_INSTALL += " \ canutils \ iproute2 \ " iproute2 is needed to get a ip executable that supports CAN, ip from busybox does not support it. Code: diff --git a/arch/arm/mach-mx6/board-mx6_seco_UDOO.c b/arch/arm/mach-mx6/board-mx6_seco_UDOO.c index 435a50d..942678a 100644 --- a/arch/arm/mach-mx6/board-mx6_seco_UDOO.c +++ b/arch/arm/mach-mx6/board-mx6_seco_UDOO.c @@ -1060,7 +1060,7 @@ static void __init mx6_seco_UDOO_board_init(void) imx_asrc_data.asrc_core_clk = clk_get(NULL, "asrc_clk"); imx_asrc_data.asrc_audio_clk = clk_get(NULL, "asrc_serial_clk"); imx6q_add_asrc(&imx_asrc_data); - // imx6q_add_flexcan0(&mx6q_sabrelite_flexcan0_pdata); + imx6q_add_flexcan0(&mx6q_sabrelite_flexcan0_pdata); /* release USB Hub reset */ gpio_set_value(MX6_UDOO_USB_HUB_RESET, 1); diff --git a/arch/arm/mach-mx6/board-mx6qd_seco_UDOO.h b/arch/arm/mach-mx6/board-mx6qd_seco_UDOO.h index bfd2c4b..9471b03 100644 --- a/arch/arm/mach-mx6/board-mx6qd_seco_UDOO.h +++ b/arch/arm/mach-mx6/board-mx6qd_seco_UDOO.h @@ -366,10 +366,10 @@ static iomux_v3_cfg_t mx6qd_seco_UDOO_pads[] = { // MX6Q_PAD_EIM_D24__UART3_TXD, // MX6Q_PAD_EIM_D24__ECSPI1_SS2, - MX6Q_PAD_GPIO_7__GPIO_1_7, // can tx - // MX6Q_PAD_GPIO_7__CAN1_TXCAN, - MX6Q_PAD_GPIO_8__GPIO_1_8, // can rx - // MX6Q_PAD_GPIO_8__CAN1_RXCAN, + //MX6Q_PAD_GPIO_7__GPIO_1_7, // can tx + MX6Q_PAD_GPIO_7__CAN1_TXCAN, + //MX6Q_PAD_GPIO_8__GPIO_1_8, // can rx + MX6Q_PAD_GPIO_8__CAN1_RXCAN, }; static unsigned int mx6q_set_in_outputmode_low[] = { Regards, chrta
I have compiled the kernel with CAN support (using the patches from the FlexBus thread), you can grab the binaries here: https://git.tunw.net/unxt/udoo-kernel-bin/tree/master (download ZIP does not work, you have to use GIT clone) The Can Bus communication works perfectly! http://imgur.com/cwISFhE
Great job ! It's very interesting to can use can on udoo ! But, what kind of PHY do you use ? Is-it possible for somebody to explain me how to modify the kernel to use it ? I never make this ...
There are instructions on how to modify the kernel in this thread: can-bus-aka-flex-bus-t177.html I had no success compiling the kernel on the UDOO itself, so I used the freescale cross compiler toolchain from the downloads page. As transciever I am using the TI SN65HVD230D, note that the RX/TX lines are switched for the IMX6 EDIT: I also have a ubuntu minimal image (14.04LTS) with CAN support available, I can upload it if someone is interested.
I'd be interested in the general steps you took, to get a minimal Ubuntu 14.04LTS image up and running.
can u post working image please ? i compile my own image with can support but nothing going out from board (tested by osciloscope)