Electronic – CAN bus appears to have a collision in the middle of transmission

automotivecandigital-communications

I have a CAN bus consisting of only two devices. Each device is transmitting a periodic status message. I am getting periodic error frames (about 1 error frame every 10 transmissions.) When I look at the CAN bus waveform with an oscilloscope I see this:

Error Frame Capture

Does this look like a collision to you?

I thought the CAN bus protocol establishes that a device does not transmit on the bus if the bus is dominant. Even if two devices try to transmit the transmission will stop once one of the devices has loss arbitration.

Edit:
Thanks for the responses. The schematics are very simple. I have a CAN Bus Transceiver connected to a PIC MCU. The same circuit has worked on other applications. There is only two nodes on the bus.

Perhaps this is a better screen capture:
Screencapture 2

Node 1 begins to transmit on the bus. It sends it's 29 bit identifier, then the DLC (both ok), it then begins to send its data fields D0 – D7 (D0 contains a number and D1-D7 happen to have all 0s). The electrical signal is good on the bus, but for some reason, the scope is unable to decode it. Perhaps the other node is also unable to decode the message and thinks the bus is recessive. I did check the voltage level are higher than the thresholds. It appears node 2 begins to transmit while node 1 is still transmitting it's data fields. After 5 dominant bits node 1 tries to send a recessive bit, but the bus is held high by Node 2. This causes a bit stuffing error and an error frame is sent.

After the error frame is sent, node 1 retransmits the exact same message and it is successful every time.
Screen capture of a frame immediately following an error frame

Here is a comparison of the two exact same massages. Black is the good message, blue is the error frame
Comparizon of two messages
Overlay of both good and bad messages

Best Answer

CAN doesn't have collisions, save for the special case where you send two frames with the same arbitration field (identifier etc) but different data. This could perhaps be the case here? Since it looks like a node starts transmitting, then aborts and starts spamming error frames.

The odd little voltage peak at the end normally comes from another node filling in the ACK bit. This is expected to look different from the rest of the package in terms of voltage levels.

But your scope pic doesn't really look like a valid CAN frame, but rather the start of one, followed by a bunch of error frames (6 dominant bits in a row). Similarly, an EOF sequence after the ACK bit with dominant bits would indicate an error as well.