Interconnect arduinos with 2nd USB C connection

I'm trying to build a split keyboard and need some help understanding how to connect the pins of the USB C connectors to the Arduino boards.

What I want to achieve is something like this:


  • The outer USB C connectors on each PCB (gray boxes) can be connected to the PC, but only 1 at a time, and these will be connected internally to the Arduino boards USB C connectors.
    It says USB-C there, most likely I will just either put the Arduino there directly or an extension cable that will be plugged in the Arduinos USB C port.
  • The halves cannot be connected through a USB hub, as they need to communicate to trigger certain functionality on both boards at the same time with a single trigger (switch or something else).

Here are some pictures of another split keyboard I found that has this setup on their PCBs (SOL 3, if anyone's interested).

The USB C connector has the following pins

There are quite a few examples on how to interconnect arduinos directly through SPI, and which pins on each board you can use for that.
For example: Do you know Arduino? – SPI and Arduino SPI Library – E-Tinkers

But how do I connect the Arduino pins to the USB C connector?
GND is obvious (A1, A12, B12 or B1), but what about the 5V, MOSI, MISO, SS and SCK pins?
Also, do I need to add any other components like resistors between the pins of the Arduino board and the USB C connector?

This project seems strangely familiar... also what is going to happen when Bartholomew comes along and plugs your interface cable into the USB port of your $2000 investment?

Well, the other thread has become so cluttered with many different questions and answers and discussions, it's hard to read. It wasn't my intention, my bad :frowning: I thought I just post this specific hardware related question on a separate topic.

If I understand your other comment, you mean someone can put a USB to USB-C cable into the connector designated to connect the two halves and that could fry the electronics somehow?
Not really worried about it, as I'm not planning to sell it and it's only meant for usage at home. Likewise, someone could just drop it on the floor and step on it, breaking it either way.
Perhaps there's some way to partially protect against it with some extra electronics, but I don't know if it would ever be a problem. For myself I could just use a different color of cable to connect the halves than the one used to connect to the PC.

I'm open to other suggestions to connect the halves, but this is the last thing I need to figure out before I can start to order some of these parts to start prototyping with actual hardware.

I'm just wondering if I can't just do the following

Arduino -> USB-C
GND -> GND (A1)
5V -> VBUS (A4)
SS -> CC1 (A5)
SCK -> CC2 (B5)
MOSI -> D+ (A6)
MISO -> D- (A7)

The CC pins are "configuration channels", in a way I guess you could consider SS (Slave select) and the SCK (clock signal) to be some kind of configuration.

VBUS is for VBUS power, so that should be ok for the 5V?

A6 & A7 for data?

Hard wire it, pass the cables into the enclosures through protective retention grommets. It'll be much easier to connect than the tiny pins on a PCB mount USB socket.

If I would do that, than the 2 sides always need to be connected. One of the things I want is to be able to do, is to have only 1 side connected in some scenarios. For example: sometimes I connect my computer to the TV for gaming, in which case, I'd only need to take 1 half of the keyboard and a mouse with me (which saves space on that table).

Great idea, however, it doesn't fit my needs. If it would have been the case, 2 controllers wouldn't have even been necesary, but alas.

Why do you need the speed of SPI? It's just keypresses you need to communicate, why not just run serial? It would be more reliable and would use fewer wires.

I read that I2C is more error-prone, but that's perhaps not true?
But either way, even if I would need 2 less pins (if I counted correctly), I'd still have the same problem with needing to connect the halves. Or what am I missing?