These 4 wire systems are really convenient, and seem to me to have the best chance of being the main hobbyist standard for modularity. There’s various different connectors used for this purpose (Grove, Qwiic,sometimes RJ modular, and sometimes .1″ with no standard ordering), and I2C is the only popular multidrop bus for very short ranges.
But they’re missing a few things. I2C doesn’t cover all use cases. But still, the fewer different connectors a system uses, the easier it is to swap cables around.
So, to fix this, I’m proposing this set of vauge suggestions for carrying non-I2C signals over connections generally accepted as being “I2C connectors”.
Modular electronics never seems to be perfectly modular, so this is not so much a standard as a standard as a set of suggestions to increase the chances two devices will work together easily.
I know Grove seems to already have non I2C stuff, but it seems to be a bit of a free for all there, without much protection.
First, any device may use open collector outputs on the pins normally used for SDA and SCL, and may source current to either one, but only a maximum of 3.3V, and with a minimum of 4.7K of output resistance.
It is unlikely someone would connect enough such devices to an I2C bus to cause an over current, before they stopped because they noticed it did not work, making this usage fairly safe.
Second, unless 2 inputs or 2 outputs are needed, inputs TO the master device are to be via the SDA and outputs FROM the master device are to be via SCL.
The rationale here is that SCL is mainly output by the master in normal I2C, so it’s easy to remember.
Third, when only one bidirectional pin is used, it should be SCL, which gives the best chance of compatibility if input-only pins are used for the master’s SDA pin.
Fourth, devices that are meant for prototyping should attempt to protect against short circuits between any of the pins on a connector.
Fifthly, and I’m less sure of this one than the others, if you want to implement UART programming via Qwiic, simply use 2 connectors, one for UART and one for reset and the pin used to enter bootloading (Yes, I know there’s probably a chip that needs five pins to bootload).
The reset pin should be SDA. This is because bootload pins are usually usable as an output later on, while reset often can’t be used for anything but resetting. Therefore, we should want the bootload pin of the master to connect to the SCL, which we’ve defined as master out.
As reset is sometimes the same as an enable pin, you may be able to use the programming connection for a power switch too. Even if it’s not usable for anything besides programming, 1 extra Qwiic connector is still smaller than many ICSP connections.
Sixth, a “master” board should take it’s power from one of USB, DC barrel jack, or JST-PH, and a “slave” board that needs power other than what it gets from the bus, should use JST-PH as well.
Seventh, quadrature encoders should use SDA for A and SCL for B. Because SDA has the letter A in it, and it is easy to remember.
Eighth, Nobody should use 5V data on a connector that normally uses 3.3v, and if they do so, they should not refer to that connector by its common 3.3v name. e.g. Qwiic should be labeled as something like Qwiic-5V.
Switchable voltage connectors should not have a setting above the standard voltage of a connector.
Ninth, small sensors that require much less than 1mA of power, they may draw said power from SCL if they do not have an enable pin, so the master can switch them off.
Should the sensor require a filter capacitor, a 470Ohm resistor should be used so as to limit inrush to 8mA with 3.3v devices.
Where a pull-up is desired at the master, 10K should be used, as 10K is already the standard in most Arduino tutorials and the like.