Sorry, sent that last one to Jef only by mistake.
On 13/03/14 00:52, Hamish Moffatt wrote:
I'm starting to wonder if the dive computer needs that time and the only reason it works on Windows and Mac is because the default latency timer is higher which is adding that delay...
Aha. So, I increased the latency on linux (after first turning off the low_latency flag, which the driver sets by default):
# setserial /dev/ttyUSB0 ^low_latency # echo 16 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
Now it works. With a value of 2 in there, it mostly works (glitches occasionally). Here's the timing:
[0.000026] DATETIME 2014-03-12T13:58:50Z (1394632730) [0.000052] VERSION 0.5.0-devel (575f2e9016ac9baa2b1b031caa6fe0bc77cdbbee) [0.000057] DEVICE=/dev/ttyUSB0 [0.000065] oceanic_atom2_device_open [0.000073] INFO: Open: name=/dev/ttyUSB0 [0.000812] INFO: Configure: baudrate=38400, databits=8, parity=0, stopbits=1, flowcontrol=0 [0.000929] INFO: Timeout: value=3000 [0.000940] INFO: Sleep: value=100 [0.101016] INFO: Flush: queue=3, input=0, output=0 [0.101439] INFO: Write: size=1, data=84 [0.103600] INFO: Read: size=1, data=5A [0.107599] INFO: Read: size=17, data=4F43452056543320523244203531324BBF [0.107615] dc_device_dump [0.108581] INFO: Write: size=3, data=B10000 [0.109599] INFO: Read: size=1, data=5A [0.121477] INFO: Read: size=17, data=0416041120081001425800730000000075 [0.124581] INFO: Write: size=3, data=B10001 [0.124596] INFO: Read: size=1, data=5A [0.135469] INFO: Read: size=17, data=6701DA064204E506E206DC06FF0FAAFBF6 [0.136583] INFO: Write: size=3, data=B10002 [0.137476] INFO: Read: size=1, data=5A [0.149352] INFO: Read: size=17, data=0000DC06FF0FDC06FF0F00000000AA8A14 [0.152581] INFO: Write: size=3, data=B10003 [0.152595] INFO: Read: size=1, data=5A [0.163354] INFO: Read: size=17, data=890E370D00011B0B670542053250AAE1C2 [0.164588] INFO: Write: size=3, data=B10004 [0.165312] INFO: Read: size=1, data=5A [0.177359] INFO: Read: size=17, data=300220028003500530BEB0BB0000000085 [0.180580] INFO: Write: size=3, data=B10005 [0.180595] INFO: Read: size=1, data=5A [0.191212] INFO: Read: size=17, data=A014000300002C01980805A0022100024E [0.192580] INFO: Write: size=3, data=B10006 [0.193229] INFO: Read: size=1, data=5A
With a value of 4 it downloaded the whole memory dump with no errors.
Hamish
On 2014-03-12 15:03, Hamish Moffatt wrote:
Sorry, sent that last one to Jef only by mistake.
On 13/03/14 00:52, Hamish Moffatt wrote:
I'm starting to wonder if the dive computer needs that time and the only reason it works on Windows and Mac is because the default latency timer is higher which is adding that delay...
Aha. So, I increased the latency on linux (after first turning off the low_latency flag, which the driver sets by default):
# setserial /dev/ttyUSB0 ^low_latency # echo 16 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
Now it works. With a value of 2 in there, it mostly works (glitches occasionally). Here's the timing:
[0.000026] DATETIME 2014-03-12T13:58:50Z (1394632730) [0.000052] VERSION 0.5.0-devel (575f2e9016ac9baa2b1b031caa6fe0bc77cdbbee) [0.000057] DEVICE=/dev/ttyUSB0 [0.000065] oceanic_atom2_device_open [0.000073] INFO: Open: name=/dev/ttyUSB0 [0.000812] INFO: Configure: baudrate=38400, databits=8, parity=0, stopbits=1, flowcontrol=0 [0.000929] INFO: Timeout: value=3000 [0.000940] INFO: Sleep: value=100 [0.101016] INFO: Flush: queue=3, input=0, output=0 [0.101439] INFO: Write: size=1, data=84 [0.103600] INFO: Read: size=1, data=5A [0.107599] INFO: Read: size=17, data=4F43452056543320523244203531324BBF [0.107615] dc_device_dump [0.108581] INFO: Write: size=3, data=B10000 [0.109599] INFO: Read: size=1, data=5A [0.121477] INFO: Read: size=17, data=0416041120081001425800730000000075 [0.124581] INFO: Write: size=3, data=B10001 [0.124596] INFO: Read: size=1, data=5A [0.135469] INFO: Read: size=17, data=6701DA064204E506E206DC06FF0FAAFBF6 [0.136583] INFO: Write: size=3, data=B10002 [0.137476] INFO: Read: size=1, data=5A [0.149352] INFO: Read: size=17, data=0000DC06FF0FDC06FF0F00000000AA8A14 [0.152581] INFO: Write: size=3, data=B10003 [0.152595] INFO: Read: size=1, data=5A [0.163354] INFO: Read: size=17, data=890E370D00011B0B670542053250AAE1C2 [0.164588] INFO: Write: size=3, data=B10004 [0.165312] INFO: Read: size=1, data=5A [0.177359] INFO: Read: size=17, data=300220028003500530BEB0BB0000000085 [0.180580] INFO: Write: size=3, data=B10005 [0.180595] INFO: Read: size=1, data=5A [0.191212] INFO: Read: size=17, data=A014000300002C01980805A0022100024E [0.192580] INFO: Write: size=3, data=B10006 [0.193229] INFO: Read: size=1, data=5A
With a value of 4 it downloaded the whole memory dump with no errors.
Good catch! We're getting closer.
I suspect that due to the higher latency on Windows and Mac OS X (16ms seems to be the default), reading the data takes slightly longer and that is enough delay for the next write. On linux, with the latency timer set to 1, there is virtually no delay, and the next write happens too fast.
Some interesting reading about the ftdi low latency stuff:
http://projectgus.com/2011/10/notes-on-ftdi-latency-with-arduino/
Jef