9215 -- CAN bus lost messages

I’m having some trouble with CAN communication. When a message transmitted on the bus, but not yet received, and another request to send a message on the bus is initiated, the latter message doesn’t wait for the previous message to be received. It simply “overwrites” that message.

I was looking in the naCBus files to find some way to interface with the CAN bus to detect whether a message has been ACKed or not, but I don’t see that anywhere.

The other MCU I have on the bus is a PIC.

Here’s what’s happening:

  1. 9215 sends MSG_1 (ACKed)
  2. PIC received MSG_1 (begins processing it)
  3. 9215 sends MSG_2 (NACKed; PIC still busy)
  4. 9215 sends MSG_2 (keeps trying; still NACKed)
  5. 9215 sends MSG_3 (overwriting MSG_2) (NACKed; PIC still busy)
  6. PIC finishes processing MSG_1
  7. 9215 sends MSG_3 (tries again; ACKed)
    … etc.

So, I need to either detect that MSG_2 was lost, or I need to make sure it gets resent at some point. How do I do this?