Hello,
i use flexcan with an imx6ul.
After setup can0
ip link set can0 up type can bitrate 125000
i send a frame like this
cansend can0 500#1E.10.10
the expected behavior was that the frame is send once.
But thats not the case, it sends continuously.
When i try to send data via
cangen can0
only the first frame will be send (continuously) and a error appears -->
# cangen can0
write: No buffer space available
First i thought the "master" need the acknowledge bit at the end, so i but an another bus "member / slave" into the bus and set it up like this
ip link set can0 up type can bitrate 125000
cansniffer can0
after that, the acknowledge bit was "green" (scoped that with an oscilloscope)
When i use vcan0
modprobe vcan ip link add dev vcan0 type vcan ip link set up vcan0 mtu 72
and send data like this
cansend vcan0 123##3112233445566778899aabbccddeeff
and catch it with
candump -ta -x vcan0
everything works well.
In this case it must be a wrong HW framebuffer config!?
Btw. i have the same issue in case i use QT - serial (#include <QCanBus>)
// create frame and put data into it
QCanBusFrame frame;
frame.setFrameId(frameId);
frame.setPayload(payload);
// send frame
device->writeFrame(frame); so it can not be
either.
Here is the output from #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:1 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:8 (8.0 B) TX bytes:0 (0.0 B)
Interrupt:26
looks wrong for me...
This dude had similar problems.
i.MX6 FlexCAN linux 3.0.35-4.1.0 yocto
So i checked the pinctrl one more time:
&can1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
status = "okay";
};
pinctrl_flexcan1: flexcan1grp{
fsl,pins = <
MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020
MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020
>;
};
I found the problem.
CANL had a lose connection (cold joint solder), what disrupted the signal transmission.