USB control interface
Controlling the board from the USB host
USB is the main control interface for the board and allows the host to configure and control the board.
A master-slave scheme is used where the USB host is the master and the board is the slave.
It’s to the master to initiate a control session by issuing a command to the board and await for a response.
For some commands the response is just and acknowledgement, for others the response has some data.
USB commands
The commands are 64 byte messages sent from the master to the slave.
The responses are also 64 byte messages.
Switch downstream ports
Switches the downstream ports on and off.
Both the Vbus lines and the data-lines are switched on and off.
Command message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| action |
control |
don’t care |
don’t care |
Command message values
| action |
control byte |
Command |
| 0x01 |
0x01 |
Port 1 off |
| 0x02 |
0x02 |
Port 2 off |
| 0x03 |
0x03 |
Port 3 off |
| 0x0A |
0x0A |
All ports off |
| 0x11 |
0x11 |
Port 1 on |
| 0x12 |
0x12 |
Port 2 on |
| 0x13 |
0x13 |
Port 3 on |
| 0x1A |
0x1A |
All ports on |
Response message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| status |
response |
don’t care |
don’t care |
Response message values
| status |
response |
Description |
| 0x01 |
0x01 |
Port 1 off |
| 0x01 |
0x02 |
Port 2 off |
| 0x01 |
0x03 |
Port 3 off |
| 0x01 |
0x0A |
All ports off |
| 0x01 |
0x11 |
Port 1 on |
| 0x01 |
0x12 |
Port 2 on |
| 0x01 |
0x13 |
Port 3 on |
| 0x01 |
0x1A |
All ports on |
Get port state
Ask the board for the switching state of a port.
Command message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| action |
control |
don’t care |
don’t care |
Command message values
| action |
control |
Description |
| 0x21 |
0x21 |
Port 1 state |
| 0x22 |
0x22 |
Port 2 state |
| 0x23 |
0x23 |
Port 3 state |
Response message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| status |
state |
don’t care |
don’t care |
Response message values
| status |
state |
Description |
| 0x01 |
0x01 |
Port 1 off |
| 0x01 |
0x02 |
Port 2 off |
| 0x01 |
0x03 |
Port 3 off |
| 0x01 |
0x11 |
Port 1 on |
| 0x01 |
0x12 |
Port 2 on |
| 0x01 |
0x13 |
Port 3 on |
Switch controllable 5V power port
Commands to switch on and off the 5V output power port.
Command message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| action |
control |
don’t care |
don’t care |
Command message values
| action |
control |
Description |
| 0x04 |
0x04 |
Port off |
| 0x14 |
0x14 |
Port on |
| 0x24 |
0x24 |
Port state |
Response message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| status |
state |
don’t care |
don’t care |
Response message values
| status |
state |
Description |
| 0x01 |
0x04 |
Port off |
| 0x01 |
0x14 |
Port on |
GPIO Read/Write
Commands to read an write from/to GPIO pins.
Command message structure
| byte 0 |
byte 1 |
byte 2 |
… |
byte 63 |
| action |
GPIO pin |
value |
don’t care |
don’t care |
Command message values
| action |
GPIO pin |
value |
Description |
| 0x30 |
0x01 |
- |
Read value of GPIO pin 1 |
| 0x30 |
0x02 |
- |
Read value of GPIO pin 2 |
| 0x30 |
0x03 |
- |
Read value of GPIO pin 3 |
| 0x31 |
0x01 |
0x01 |
Write value 1 to GPIO pin 1 |
| 0x31 |
0x01 |
0x00 |
Write value 0 to GPIO pin 1 |
| 0x31 |
0x02 |
0x01 |
Write value 1 to GPIO pin 2 |
| 0x31 |
0x02 |
0x00 |
Write value 0 to GPIO pin 2 |
| 0x31 |
0x03 |
0x01 |
Write value 1 to GPIO pin 3 |
| 0x31 |
0x03 |
0x00 |
Write value 0 to GPIO pin 3 |
Response message structure
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
… |
byte 63 |
| status |
action |
GPIO pin |
value |
don’t care |
don’t care |
Response message values
| status |
action |
GPIO pin |
value |
Command description |
| 0x01 |
0x30 |
0x01 |
0x01 |
GPIO pin 1 is at value 1 |
| 0x01 |
0x30 |
0x01 |
0x00 |
GPIO pin 1 is at value 0 |
| 0x01 |
0x30 |
0x02 |
0x01 |
GPIO pin 2 is at value 1 |
| 0x01 |
0x30 |
0x02 |
0x00 |
GPIO pin 2 is at value 0 |
| 0x01 |
0x30 |
0x03 |
0x01 |
GPIO pin 2 is at value 1 |
| 0x01 |
0x30 |
0x03 |
0x01 |
GPIO pin 3 is at value 1 |
| 0x01 |
0x30 |
0x03 |
0x00 |
GPIO pin 3 is at value 0 |
| 0x01 |
0x31 |
0x01 |
0x01 |
GPIO pin 1 was set to value 1 |
| 0x01 |
0x31 |
0x01 |
0x00 |
GPIO pin 1 was set to value 0 |
| 0x01 |
0x31 |
0x02 |
0x01 |
GPIO pin 2 was set to value 1 |
| 0x01 |
0x31 |
0x02 |
0x00 |
GPIO pin 2 was set to value 0 |
| 0x01 |
0x31 |
0x03 |
0x01 |
GPIO pin 3 was set to value 1 |
| 0x01 |
0x31 |
0x03 |
0x00 |
GPIO pin 3 was set to value 0 |
GPIO control interface enable or disable
Enable or disable the GPIO as a control interface.
When enabled the pins are configured as digital inputs and the corresponding numbered downstream port state will be set according to the digital level on the pin.
Command message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| 0x32 |
action |
don’t care |
don’t care |
Command message values
| action |
Command description |
| 0x01 |
Enable GPIO control interface |
| 0x00 |
Disable GPIO control interface |
Response message structure
| byte 0 |
byte 1 |
byte 2 |
… |
byte 63 |
| status |
0x32 |
action |
don’t care |
don’t care |
Response message values
| status |
control byte |
action |
description |
|
| 0x01 |
0x32 |
0x01 |
GPIO control interface enabled |
|
| 0x01 |
0x32 |
0x00 |
GPIO control interface enabled |
|
| 0x00 |
- |
- |
Error |
|
Downstream port default state configuration
Configuration of downstream port default state.
On reset or power-on the ports are set to the defined default state.
Command message structure
| byte 0 |
byte 1 |
byte 2 |
… |
byte 63 |
| 0x41 |
port |
default state |
don’t care |
don’t care |
Command message values
| port |
default state |
command description |
| 0x01 |
0x00 |
Set port 1 default state to Off |
| 0x01 |
0x01 |
Set port 1 default state to On |
| 0x02 |
0x00 |
Set port 2 default state to Off |
| 0x02 |
0x01 |
Set port 2 default state to On |
| 0x03 |
0x00 |
Set port 3 default state to Off |
| 0x03 |
0x01 |
Set port 3 default state to On |
Response message structure
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
… |
byte 63 |
| status |
0x41 |
port |
default state |
don’t care |
don’t care |
Response message values
| status |
port |
default state |
command description |
| 0x01 |
0x01 |
0x00 |
Port 1 default state set to Off |
| 0x01 |
0x01 |
0x01 |
Port 1 default state set to On |
| 0x01 |
0x02 |
0x00 |
Port 2 default state set to Off |
| 0x01 |
0x02 |
0x01 |
Port 2 default state set to On |
| 0x01 |
0x03 |
0x00 |
Port 3 default state set to Off |
| 0x01 |
0x03 |
0x01 |
Port 3 default state set to On |
| 0x00 |
- |
- |
Error |
Trigger bootloader mode for firmware update
Command the board to enter into the bootloader mode for a firmware update.
| byte 0 |
… |
byte 63 |
| 0x42 |
don’t care |
don’t care |
I2C interface configuration
I2C interface can be configured to slave or master mode.
When configured to slave mode the I2C becomes a control interface.
Check the I2C section
When in master mode the I2C becomes a host USB-to-I2C gateway.
Check the I2C section
These configurations are persistent and will endure resets and power cycles
Command message structure
| byte 0 |
byte 1 |
byte 2 |
… |
byte 63 |
| 0x51 |
action |
value |
don’t care |
don’t care |
Command message values
| action |
value |
command description |
| 0x01 |
0x00 |
Disable I2C slave mode |
| 0x01 |
0x01 |
Enable I2C slave mode |
| 0x02 |
0x00 |
Disable I2C master mode |
| 0x02 |
0x01 |
Enable I2C master mode |
| 0x03 |
i2c_addr |
Configures the board I2C slave address with value i2c_addr |
Response message structure
| byte 0 |
… |
byte 63 |
| status |
don’t care |
don’t care |
Response message values
| status |
description |
| 0x01 |
Success |
| 0x00 |
Error |
Host USB-to-I2C gateway commands
With I2C master mode enabled, read and write commands are made available
to the USB host.
They allow to write and read an arbitrary number of bytes to
or from the I2C slave devices.
Command message structure
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
byte 4 |
… |
byte 63 |
| 0x52 |
action |
i2c_address |
n_bytes |
buff_0 |
don’t care |
don’t care |
Where:
-
action is a write or read action code. 0x01 is a write and 0x02 is a read.
-
i2c_address is the 7 bit slave address aligned to the most significant bit
and with the byte least significant bit at zero. For example, 0b10100110
byte represents the I2C address 0b1010011.
-
n_bytes is the number of bytes to read from or written to the slave
device.
-
buff_0 is the first byte of the buffer containing the data to be written or
where the read data should be stored.
An example where the USB host transmits two bytes, 0x11 and 0x22,
to I2C slave device with 7 bit address 0x1111111 using the YKUSH3 as a bridge.
The command for this example is the following.
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
byte 4 |
byte 5 |
… |
| 0x52 |
0x01 |
0x11111110 |
0x02 |
0x11 |
0x22 |
- |
In the case of a successful write the following response is received by the
USB host from the YKUSH3.
| byte 0 |
byte 1 |
… |
| 0x01 |
0x52 |
- |
The response message structure, for both write and read commands, is the
following.
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
… |
| status |
0x52 |
n_bytes |
data byte 1 |
… |
Where:
-
status is 0x01 on success, 0x02 error due to board not being set to I2C
master mode or 0x03 I2C transmission error.
-
n_bytes is the number of data bytes to be transmitted, on a write
command, or the number of data bytes received on a read command.
-
data-byte-x is the data byte received from the I2C slave device in the
case on a read command. For write command responses this bytes are not
used.
Reset command
Command to trigger the board reset.
| byte 0 |
… |
byte 63 |
| 0x55 |
- |
- |
Get bootloader and firmware version
Version information of the bootloader and firmware is obtained using the commands presented here.
Command message structure
| byte 0 |
byte 1 |
… |
byte 63 |
| 0x61 |
subject |
- |
- |
subject defines if the command is for the bootloader or firmware version.
0x01 is for bootloader and 0x02 for firmware.
Response message structure
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
byte 4 |
… |
byte 63 |
| status |
0x61 |
major |
minor |
patch |
- |
- |
Where:
status 0x01 for success and 0x00 for error
major version number
minor version number
patch version number