Difference between revisions of "WCH CH9325"

From sigrok
Jump to navigation Jump to search
Line 9: Line 9:
== Protocol ==
== Protocol ==


The chip encodes what it receives on the UART RX pin into HID packets of 8 bytes.
The chip stores bytes received via the UART RX pin into a buffer. It transfers the contents of the buffer to a HID packet at regular intervals (maximum 12ms). The HID packets are always 8 bytes long, with the first byte containing the number of payload bytes. This is encoded as ''0xf0 + length''. The next 7 bytes contain the payload, padded with zeroes. Thus, even if no data is ever received on the UART, the chip always sends at least one packet every 12ms containing:
 
f0 00 00 00 00 00 00 00
 
Here's a packet with 2 bytes payload:
 
f2 35 41 00 00 00 00 00
 
Extracting the UART stream on the other side of the USB bus simply entails the reverse process: for every received packet, extract the payload according to the length byte (nibble).

Revision as of 21:43, 2 August 2013

The CH9325 is a USB interface chip, which converts data received via UART to USB and vice versa. The chip presents a HID (Human Interface Device) USB profile, in an effort to not require USB driver installation: this is typically handled by the OS kernel. An example of the profile, in Linux 'lsusb' output format, is here.

The chip runs off of a 12MHz oscillator.

Pin layout

1-   O -16
UART TX 2- -15 USB +5V
UART RX 3- -14
4- -13
5- -12
USB D+ 6- -11
USB D- 7- -10 OSC+
GND 8- -9 OSC-

Protocol

The chip stores bytes received via the UART RX pin into a buffer. It transfers the contents of the buffer to a HID packet at regular intervals (maximum 12ms). The HID packets are always 8 bytes long, with the first byte containing the number of payload bytes. This is encoded as 0xf0 + length. The next 7 bytes contain the payload, padded with zeroes. Thus, even if no data is ever received on the UART, the chip always sends at least one packet every 12ms containing:

f0 00 00 00 00 00 00 00

Here's a packet with 2 bytes payload:

f2 35 41 00 00 00 00 00

Extracting the UART stream on the other side of the USB bus simply entails the reverse process: for every received packet, extract the payload according to the length byte (nibble).