I2C
I2C is the most common interface when selecting a microcontroller-level Hardware.
Microcomputers
Many Microcomputers today include JST connectors that uses I2C bus. Some companies have standards around the same JST connector, such as Sparkfun QWIIC and Adafruit STEMMA products.
A good example is Arduino UNO R4 WiFi. Arduino is one the Supported Hardware options, providing all the necessary libraries.
Another example is Sparkfun Redboard.
Note that typical use of non-DUELink I2C on JST connector is done by connecting all modules on the same I2C signals. This is defiantly not the case with DUELink. DUELink only uses I2C on the first module. Then that modules connects to other modules using the Downlink interface. This typology does not consume I2C addresses and allows for Daisylinking hundreds of modules!
The Protocol
A DUELink module is always an I2C slave listening to an I2C bus master on address is 0x52 (7bit), which is fixed and can't be changed.
The host (I2C master) can send data as individual bytes or multiple bytes. The module will look at individual bytes and disregard how they're packed in frames. In other words, start, restart, and stop conditions are ignored by the data stream.
The module (slave) will return 0xFF when the host request data but the device does not have any data to return.
When the device is too busy to accept data, it will use clock stretching feature. Clock stretching support is a standard I2C feature and is required from the host.
Mixing Module Types
Many modules on the market include a JST connector with I2C bus signals. They simply use I2C and most will not have any intelligence. DUELink gracefully allows for these modules to be connected on the same Daisylink. The only rule is you have to connect the non-DUELink modules first in the chain. Access those module like you normally would, as DUELink will simply ignore them.
You can't use any non-DUELink modules that have the same address as DUELink, which is very unlikely!
Pull Up Resistors
I2C requires pull up resistors to operate, typically 2.2K. Some boards on the market do not include these resistors. Instead, they rely on the internal weak pull up resistors inside the micro. This may cause problems in some cases. DUELink has a PullUp module to solve this issue.