Jim, I'd try playing with the latency timer.  I think we've shot my previous two theories out of the water.  However, buffering between the PC and dongle can alter timing and sometimes accounts for behavioral difference between dongles.

Separately, I like Dan's idea to try sending larger amounts of data at once.  It may provide more data if nothing else.  Like Dan said, there's very little guarantee small sleep values are accurate or efficient.  There are even fewer guarantees that the timing you use to submit each byte in the application is preserved by the USB dongle.  Data takes a much more complex path than if you were to use a HW UART.  It should be a lot closer in that case.

-Nathan


On Fri, Jun 16, 2017 at 7:00 PM, Jim Unroe <rock.unroe@gmail.com> wrote:
>> Have you looked at the code? That's not what is happening. We're waiting
>> for
>> an ack after every block we write to the device. The inter-character
>> delays
>> being introduced basically mean we never fill the tiny buffer in the UART.
>
> Just tossing out potentially helpful ideas.  Are you sure the failure is
> when
> CHIRP is waiting for the "ack" from the radio?  I didn't see anyone report
> that
> specifically.  Does the radio actually send the ack?

There is never an ack when it fails.

> Maybe the best solution is to increase the serial port timeout value in
> CHIRP.

I tried this earlier today and it made no difference.

Jim KC9HI