armcan-buslpc

How do I eliminate an ACK slot error in CAN?


I am interfacing two LPC2129 microcontrollers using the CAN bus. Sending the message from the transmitter at once, but at the receiver side the receive interrupt is executing continuously.

I am getting an ACK error at the beginning as it is a lower priority interrupt over the receive interrupt, but later on the receive interrupt will occur continuously and data will also be received properly even though I am sending only once from transmitter.

A few more details are:

     baud rate: 125 kbit/s
     Transceiver: MCP2551
     Acceptance filter: enabled (not using *FULL CAN Mode*)

How do I eliminate this ACK error?


Solution

  • You need to eliminate the ACK error "at the source".

    If the receiver is getting receive interrupts, then it must think it has ACKed the frame (you shouldn't get a receive interrupt for an erroneous CAN frame).

    Therefore the TX side must be "not seeing" the ACK bit - it then keeps retrying the frame, hence your continuous receive interrupts.

    I would suggest looking at the bus on an oscilloscope to see what is going on - you'll probably see that the ACK bit is not correctly getting out of the receiver node and into the transmitter node. Then figure out why that should be (dodgy soldering maybe?)