From 8a9e98bc2bc48f0413c7063789b3b10edd92eb92 Mon Sep 17 00:00:00 2001 From: Jake <jake.read@cba.mit.edu> Date: Wed, 20 Dec 2023 11:08:24 -0500 Subject: [PATCH] tests to 250 bytes and 0p8 Mbit, linux test next --- 2023-12_usb-real-data-rates.md | 17 +++-------------- code/serial_sink/sink.py | 2 +- code/serial_source/COBSUSBSerial.cpp | 7 +++++-- code/serial_source/serial_source.ino | 2 +- ..._ingest-histogram-single-source-pck-250.png | Bin 0 -> 33354 bytes 5 files changed, 10 insertions(+), 18 deletions(-) create mode 100644 images/2023-12-12_ingest-histogram-single-source-pck-250.png diff --git a/2023-12_usb-real-data-rates.md b/2023-12_usb-real-data-rates.md index 1e93f4d..0d0025f 100644 --- a/2023-12_usb-real-data-rates.md +++ b/2023-12_usb-real-data-rates.md @@ -10,27 +10,16 @@ To start, I spun up ...  -I would want to improve these by relating instantaneous real-data-rates with packet length and time deltas... i.e. for a 128 byte packet, supposing a 1ms interval, we have only `128k Byte / sec` whereas the spec looks for `296k Byte / sec` (for all the data). + -So, not done at all: - -- usb packet length is actually 64 bytes, so zero-delimited would mean we should see a step size around ~ 60 bytes, not 64 as tested ? -- plot data-rates as well as per-packet delays -- get COBS up to 512, or whatever the underlying USB packet size is ? how does that plot ? -- what about multiple devices ? -- what about flow control ? -- how does it compare on a linux machine ? (the same machine, with linux) - - how about a raspberry pi ? - -I think the big point will be that we will want to measure these links in-situ, to do intelligent (feedback!) systems design. +So, we do win some speed when we increase packet sizes, but we have a clear trend around ~ 0.6 -> 0.9 Mbits/s ... which is not awesome; our spec for the data printer requires about 4 Mbits/s of real data rate. ## 2023 12 20 So - yeah, I want to keep working through this today, and I'm going to bundle code in here as well. -Firstly, it seems like USB 2.0 Full Speed has core frame sizes of 512 bytes, which we should endeavour to use - finishing our little diagrams above. That means this NanoCOBS implementation as well? +I wanted to see about improving with nanocobs and maybe packing more data (up to 512 encoded bytes rather than 255), but I don't think that's the bottleneck - instead I suspect that we can try linux instead of windows... and then anyways move on to i.e. ethernet tests or multiple devices / async patterns etc etc etc, so, let's see about linux, running the same code. -OK so I'm going to see if I can't swap in nanocobs, then test again at 32 byte packets; diff --git a/code/serial_sink/sink.py b/code/serial_sink/sink.py index bc5adb0..858e5d5 100644 --- a/code/serial_sink/sink.py +++ b/code/serial_sink/sink.py @@ -7,7 +7,7 @@ import matplotlib.pyplot as plt ser = CobsUsbSerial("COM23") stamp_count = 10000 -pck_len = 128 +pck_len = 250 stamps = np.zeros(stamp_count) diff --git a/code/serial_source/COBSUSBSerial.cpp b/code/serial_source/COBSUSBSerial.cpp index 03939cc..74fbf2e 100644 --- a/code/serial_source/COBSUSBSerial.cpp +++ b/code/serial_source/COBSUSBSerial.cpp @@ -64,8 +64,11 @@ boolean COBSUSBSerial::clearToRead(void){ return (rxBufferLen > 0); } -void COBSUSBSerial::send(uint8_t* packet, size_t len){ - // ship it! blind! +void COBSUSBSerial::send(uint8_t* packet, size_t len){ + // we have a max: we need to stuff into 255, + // and we have a trailing zero and the first key + if(len > 253) len = 253; + // ship that, size_t encodedLen = cobsEncode(packet, len, txBuffer); // stuff 0 byte, txBuffer[encodedLen] = 0; diff --git a/code/serial_source/serial_source.ino b/code/serial_source/serial_source.ino index 0096632..6109406 100644 --- a/code/serial_source/serial_source.ino +++ b/code/serial_source/serial_source.ino @@ -40,7 +40,7 @@ void loop() { // tx a stamp AFAP if(cobs.clearToSend()){ chunk.u = micros(); - cobs.send(chunk.bytes, 128); + cobs.send(chunk.bytes, 250); digitalWrite(PIN_LED_G, !digitalRead(PIN_LED_G)); } // blink to see hangups diff --git a/images/2023-12-12_ingest-histogram-single-source-pck-250.png b/images/2023-12-12_ingest-histogram-single-source-pck-250.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe96eec9653307a04a5e901563b2e752b337ed8 GIT binary patch literal 33354 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 PF~~emS3j3^P6<r_roX@2 literal 0 HcmV?d00001 -- GitLab