- Joined
- Oct 3, 2005
- Posts
- 6,044
So, I decided to take another shot at a JVS IO device. I wanted to avoid the mess of hosting a USB myself, but still make it easy to use USB peripherals with my NAOMI.
Initially, I tried a straight serial adapter, to attach a USB host (i.e. a Raspberry Pi) to a JVS bus. The design was very simple - a USB UART and an RS485 transceiver and a few parts to make the Sense lines work. Then, the intent was, I could just implement the JVS protocol on software under Linux or whatever, and read any gamepad that Linux could read.
The problem is, JVS requires that the device turns around a request in 100 microseconds. That's a ton of time for a microcontroller and a UART, but it's impossible if you're across a USB. The USB host could get the whole packet at once, ideally, but would have to wait for the next 1ms USB frame to send its reply back to the adapter. So, for example, the NAOMI would time-out waiting for the response when it enumerates the JVS devices.
I could have dropped the USB part and just gone straight to a 9-pin serial port or something, but real native serial ports are rare nowadays. (A USB-to-serial adapter has the same problem of course.)
Instead, I built a JVS device that runs by itself - implementing the JVS protocol on a microcontroller - but also acts as a USB device, and gets the switch data from the USB host. It was trivial to also add some inputs for plain old switches, so it's also an IO Board by itself.
I drew a circuit board and ordered some prototypes. I ended up submitting the order one day after the factory closed for New Years... and then was quarantined for a month. But the boards got here eventually, and I put one together. My solder paste is kinda expired, though, and I ended up toasting part of the board in the process...

The firmware still needs some polish, but luckily it's easy to update - the Silicon Labs microcontroller comes with a bootloader that runs over USB. So, it has a "firmware update" button and doesn't require any special equipment.
I'm going to try getting these assembled and selling them, once the world sorts itself out a bit.
Initially, I tried a straight serial adapter, to attach a USB host (i.e. a Raspberry Pi) to a JVS bus. The design was very simple - a USB UART and an RS485 transceiver and a few parts to make the Sense lines work. Then, the intent was, I could just implement the JVS protocol on software under Linux or whatever, and read any gamepad that Linux could read.
The problem is, JVS requires that the device turns around a request in 100 microseconds. That's a ton of time for a microcontroller and a UART, but it's impossible if you're across a USB. The USB host could get the whole packet at once, ideally, but would have to wait for the next 1ms USB frame to send its reply back to the adapter. So, for example, the NAOMI would time-out waiting for the response when it enumerates the JVS devices.
I could have dropped the USB part and just gone straight to a 9-pin serial port or something, but real native serial ports are rare nowadays. (A USB-to-serial adapter has the same problem of course.)
Instead, I built a JVS device that runs by itself - implementing the JVS protocol on a microcontroller - but also acts as a USB device, and gets the switch data from the USB host. It was trivial to also add some inputs for plain old switches, so it's also an IO Board by itself.
I drew a circuit board and ordered some prototypes. I ended up submitting the order one day after the factory closed for New Years... and then was quarantined for a month. But the boards got here eventually, and I put one together. My solder paste is kinda expired, though, and I ended up toasting part of the board in the process...

The firmware still needs some polish, but luckily it's easy to update - the Silicon Labs microcontroller comes with a bootloader that runs over USB. So, it has a "firmware update" button and doesn't require any special equipment.
I'm going to try getting these assembled and selling them, once the world sorts itself out a bit.