
Ich habe ein sama5d36-Gerät mit Debian Jessie (Kernel 4.1.10) und DMA USART. Damit DMA USART korrekt ausgibt, musste ich ECHO und ONLCR ausschalten.
stty -F /dev/ttyS2 -echo -onlcr speed 115200
Wenn ich einen Test durchführe, bei dem ich eine Reihe von Bytes sende, empfange ich 2048 Bytes und dann wird der Empfang unterbrochen, bis ich neu starte.
cat testLines > /dev/ttyS2
cat < /dev/ttyS2
Hier ist die Ausgabe von /proc/tty/driver/atmel_serial
2: uart:ATMEL_SERIAL mmio:0xF0020000 irq:31 tx:2185 rx:2048 DSR|CD|RI
Hier ist meine stty-Ausgabe (stty -F /dev/ttyS2 -a):
atmel_usart f0020000.serial: using dma0chan4 for rx DMA transfers
atmel_usart f0020000.serial: using dma0chan5 for tx DMA transfers
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
Der DMA-Puffer für atmel_serial ist 512 Bytes groß.
Irgendwelche Erkenntnisse?
Update: Weiteres Spielen hat gezeigt, dass die serielle Schnittstelle mehr als 2048 Bytes schreiben kann, aber nach 2048 Bytes einfriert und dann erst weiterschreibt, wenn 2048 Bytes geschrieben wurden. Wenn man sich atmel_serial.c im Kernel ansieht, sieht es so aus, als wäre der Ringpuffer auf 1024 eingestellt. Ich bin also immer noch verwirrt, warum 2048 Bytes wichtig sind.
Antwort1
Aktualisieren Sie Ihren Kernel auf einen neueren Kernel. In früheren Kerneln gab es Probleme mit diesem Treiber.