Component: USB Slave (Comms: USB)
Author | Matrix Ltd. |
Version | 1.3 |
Category | Comms: USB |
Contents
USB Slave component
Component to create and communicate using a generic USB communications profile. Has the ability to allow the device to be a slave to the PC. Compatible with simulation and USB enabled microcontroller devices (PIC/dsPIC).
Component Pack
COMMSC
Detailed description
No detailed description exists yet for this component
Examples
The PIC based ECIOs or MIAC are good targets for USB as they do not have any additional configuration setting that need to be setup to allow the firmware to run correctly. For other targets you will have to setup the configuration correctly for your hardware to allow the USB to run correctly.
Basic Embedded Example
Here is an example file which waits for incoming data and then when valid data is received it displays this as a binary value onto the PortB pins before echoing back the data.
USB Slave Simple Receive
USB Drivers
The example requires a device driver to function correctly. The driver can be generated by selecting the USB Slave component on the System panel, Looking down the list of properties in the properties window, selecting the Generate Driver property and switching the setting to Yes. This will place the driver .inf file into the same directory as the Flowcode fcfx project file is located.
Here is a signed version of the USB Slave device driver using the default VID/PID properties. The .inf driver file generated by Flowcode also requires some associated files which are not auto generated, these files can also be downloaded here.
The final driver files can be assembled by extracting the contents of the zip archive into a folder on your computer and adding the .inf file created by your Flowcode project. Running the correct executable for your PC type should then auto install the driver for you.
When the driver is installed correctly you will get your device showing up in the Windows device manager like this.
Basic Simulations Example
Here is an example file which is designed to run in simulation to communicate with the connected embedded device. The instance property will have to match the USB instance for the embedded device to allow the communications to work correctly.
USB Slave Simulation
The USB Slave instance is selected by selecting the USB slave component on the panel and setting the instance property.
When editing the USB Slave examples the slave service macro needs to match the setting in the USB Slave properties as shown below.
Slave Macro Setup
Slave Properties
Example console showing the data passed between the simulation and the embedded hardware.
The MIAC USB Slave and ECIO USB Slave Components are written based on the USB Slave component so these give a good example of what is possible using the component.
Downloadable macro reference
![]() |
SendString |
Adds a string of bytes onto the end of the outgoing data buffer. | |
![]() |
Data |
Data String To Send | |
![]() |
Length |
Max number of bytes to try and add to the outgoing buffer. | |
![]() |
Return |
![]() |
SendByte |
Adds the byte onto the end of the outgoing data buffer. | |
![]() |
Data |
Data byte to transmit to the host | |
![]() |
Return |
![]() |
CheckRx |
Called to check if there is any incoming data waiting to be received. Returns the number of incoming data bytes. Only needed when not running the slave service. | |
![]() |
Return |
![]() |
GetByte |
Retreives the byte at location Idx from the incoming data buffer. | |
![]() |
Idx |
Specifies the location in the incoming buffer | |
![]() |
Return |
![]() |
Initialise |
Starts up the USB communications and attempts to enumerate. Returns 0 for a successful startup or 255 for a enumeration timeout. | |
![]() |
Return |