Using WinUSB for Devices


Last Update: May 28, 2018 @ 09:54
Preliminary information subject to change.

PiXCL 11 includes initial support for USB devices that implements Vendor Specific (i.e. Device Class = 0xFF) firmware and hence can be accessed using the WinUSB libraries.

Please note that all Decaf boards identify themselves as HID, and do not use and cannot be accessed with WinUSB.

This Note documents the process of getting WinUSB to work with an LCD panel that identifies as Vendor Specific class.

Hardware Description

A 5″ 800×480 touch panel with 128MB of EEPROM, controlled by a Cortex-M3 chip with a CPLD EPM240 display controller.  It has 16 available GPIO ports for digital input or output. The board comes with two developer interfaces:

  1. UART1 as the main port for control I/O. Commands instruct the board to draw graphics, stored images and return touch event coordinates.
  2. A Full Speed USB-mini supported by WinUSB utility apps to configure and test the board, and to upload images to the EEPROM.

PiXCL 11 Support

In 2015 we developed an Extension Command library to render graphics display and handle touch events. In particular, the board can store a large number of images and icons for user interface content. Due to the CPLD EPM240 LCD controller, images are transferred from EEPROM to screen very quickly.

The library enables a user to

  • draw text in various font sizes
  • draw graphic objects, display images
  • read digital inputs, write digital outputs
  • set a Real Time Clock and display the time.

Development Problem

While functional, the OEM utility apps are difficult to use, and we wanted to create our own as added value. The main requirement was to recreate the ability to load images into EEPROM using USB bulk transfers.

The relevent OEM utility was able to upload 800×480 RGB565 images using WinUSB in around 3 seconds.

Investigating the hardware with USBview

USBview reports the board is a Full Speed (FS) device, with bulk OUT endpoint 0x03 and bulk IN endpoint 0x81, on one interface.

Maximum packet size is 64 bytes, the largest supported by FS mode.

<more to be added>