On Mon, 11 Oct 2010, Wolfgang Grandegger wrote:
> On 10/11/2010 05:01 PM, "Müller, René" wrote:
> > Now we have two cases, one with missing frames and one without:
> > Case 1:
> >  - candump -l -s2 can0 -> logging in an file which is stored in RAM
> >  - we get all messages in the logfile
> > 
> > Case 2:
> >  - candump -l -s2 can0 -> logging in an file which is stored on an 
> > CompactFlash-card
> >  - the CF-card is connected via the IDE-interface without DMA (we don't get 
> > DMA working with the CF-card, unfortunately it only works with harddrives)
> >  - we are loosing messages:
> >    - every 35s we are missing messages in blocks, never we are missing 1 
> > message, always 5-6 at once
> > 
> > Anyone had similar problems? Any hints?
> 
> Sounds like a receive buffer overrun when the application is not able to
> read messages fast enough. You could use setsockopt(... ,SOL_SOCKET,
> SO_RCVBUF, ....) to increase the buffer size. It's also possible to
> detect dropped CAN frames as described here:

I'm not sure whether this is receive buffer overrun. AFAIK 5200 has some
problems with ATA. People using 5200 with CF complain about hudge
latencies caused by ATA interrupts. I do not know whether this is
related to using DMA or not.

The CAN controller on 5200 has hardware buffers only for 2 messages. The
driver reads the received messages in soft-irq so if the soft-irq is
delayed you loose the mesasges because of hardware buffer overruns. I
gess this is very likely especially if you use CF.

We were able to avoid losing messages by reading them in hard-irq
context (with lincan driver), but I'm not sure whether this will help if
you use CF (we do not use it).

-Michal
_______________________________________________
Socketcan-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-users

Reply via email to