|
3 | 3 |
|
4 | 4 |
|
5 | 5 | The ArduinoCore for the SAMD21 does not support Isochronous USB datatransfer.
|
6 |
| -This gitHub provides the code to implement support for Isochronous USB IN transactions (ie. streaming data from controller TO laptop). |
7 |
| -The code will implement a speed of around 1MB/S or 10Mb/s. (10,000 x (1023+51)bytes per 10s) |
| 6 | +This gitHub provides the code to implement support for Isochronous USB IN transactions at the max of 1023bytes per transfer (ie. streaming data from controller TO laptop). The code implements a speed of around 1MB/S or 10Mb/s. (10,000 x (1023+51)bytes per 10s from Wireshark) |
8 | 7 | The code provides a library that adds the Isochronous port to Windows keeping the ability to use Serial print accross the common port.
|
9 | 8 |
|
10 |
| -What to find: |
| 9 | +What you find: |
11 | 10 | 1) The Arduino Sketch implementing Isochronous USB IN transactions
|
12 | 11 | 2) The Atmel code implementing Isochronous USB IN transactions
|
13 |
| -3) The Visual studio C++ code implementing a WinUSB based driver for receiving the Isochronous datatransfer in memory databuffer. |
| 12 | +3) The Visual studio C++ code implementing a WinUSB based driver for receiving the Isochronous datatransfer in memory databuffer. (new version!) |
| 13 | + |
| 14 | +The VS C++ code is renewed and provides a C DLL library with several functions as: |
| 15 | + Initialize |
| 16 | + Start |
| 17 | + Stop |
| 18 | + Read |
| 19 | + Copy |
| 20 | +The library provides the class as well as the DLL exports, exposing it to external applications. |
| 21 | + |
| 22 | +References for reading: |
| 23 | +On USB protocol: |
| 24 | + |
| 25 | + http://www.usbmadesimple.co.uk/ |
| 26 | +On Arduino's PluggableUSB framework: |
| 27 | + |
| 28 | + https://github.com/arduino/Arduino/wiki/PluggableUSB-and-PluggableHID-howto |
| 29 | +On WinUSB api for windows receiving end: |
| 30 | + |
| 31 | + https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/windows-desktop-app-for-a-usb-device |
| 32 | + |
| 33 | + https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/how-to-write-a-windows-desktop-app-that-communicates-with-a-usb-device |
| 34 | + |
| 35 | + https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/getting-set-up-to-use-windows-devices-usb |
| 36 | + |
| 37 | +Further detail around some tests I did comparing the BULK, ie. standard data transfer using Serial.print and Isochronous datatransfer. |
| 38 | + Test description: |
| 39 | + Run iterative ADC reads for 5 seconds (using RTC clock). |
| 40 | + Keep number of iterations made = Test result |
| 41 | + Write ADC read to Serial.print in |
| 42 | + package of 2 bytes (serial.print) |
| 43 | + package of 52 bytes (serial.print) |
| 44 | + package of 1023 bytes (isochronous) |
| 45 | + no writing |
| 46 | + Test results: |
| 47 | + 2 bytes: 33 000 iterations |
| 48 | + 52 bytes: 30 000 iterations |
| 49 | + 1023 bytes: 1 293 000 iterations |
| 50 | + no writing: 1 318 000 iterations |
| 51 | + |
| 52 | + |
| 53 | +Hope it can inspire you, |
14 | 54 |
|
15 | 55 | Keep making!
|
0 commit comments