It's working at 3K/sec with a fixed delay as in my original code snippet. >10x slower than I wish for at 400kbaud. I had some success with hardware flow control, but the improvement is only marginal, and it's difficult. The code is much more complex.