Difference between revisions of "PoLabs PoScope Mega50"

From sigrok
Jump to navigation Jump to search
(move USB info from device page to info sub page)
Line 17: Line 17:
== '''Protocol''' ==
== '''Protocol''' ==


TODO
The main communication when setting it up/changing configuration always goes like this:
 
 
The host sends a "URB_BULK out" command where there are 64 bytes of data.
 
The device sends a packet with 4 times 0x00 as data
 
The host returns the same data but with an 0x00 instead of an 0x01 at byte 16
 
The device returns a "URB_BULK in" command with a lot of data in the 64 bytes of data.
 
 
 
 
'''The setup:'''
 
// In the following examples, I'm only talking about the 64 bytes of data, because (I think) everything else gets handled by the driver itself
 
//I'm making assumptions about what the commands do
 
'''Booting:'''
 
the host sends 0xa2 followed by 63 0x00
 
the host sends 0xa8 followed by 63 0x00
 
 
the host sends 0xa4 + 0x30 + 0x00 + 0x20 + 60 * 0x00
 
now, the host counts bytes 1 and 2 up in 0x20 steps, always 0xa4 at byte 0 like that:
 
byte:
 
<!--
0xa4 + 0x30 + '''0x20''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0x40''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0x60''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0x80''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0xa0''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0xc0''' + 0x20 + 60 * 0x00
 
0xa4 + 0x30 + '''0xe0''' + 0x20 + 60 * 0x00
 
0xa4 + '''0x31''' + '''0x00''' + 0x20 + 60 * 0x00
 
0xa4 + '''0x31''' + '''0x20''' + 0x20 + 60 * 0x00
-->
 
<table>
<tr>
    <th>byte 0</th>
    <th>1</th>
    <th>2</th>
    <th>3</th>
    <th>4-64</th>
  </tr>
  <tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0x20''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0x40''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0x60''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0x80''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0xa0''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0xc0''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x30 + </th>
    <th>'''0xe0''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x31 + </th>
    <th>'''0x00''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
<tr>
    <th>0xa4 + </th>
    <th>0x31 + </th>
    <th>'''0x20''' + </th>
    <th>0x20 + </th>
    <th>60 * 0x00</th>
  </tr>
 
</table>
 
until byte 1 is 0x3f and byte 2 is 0xe0
 
then the host sends: 0xa4 + 0x40 + 0x00 + 0x00 + 60 * 0x00

Revision as of 17:40, 5 January 2020

See PoScopeMega50/Info for lsusb information.

Hardware

  • Cypress CY7C68013A-56: USB Microcontroller
  • Analog Devices AD9288: 8-Bit Dual A/D Converter
  • NXP LPC1111F: Cortex-M0 based microcontroller (For the output probably)
  • NXP PCA9555: 16 I/O CMOS device
  • 4x Nexpia: 74HC4052: Dual 4-channel analog multiplexer/demultiplexer (two per analog channel)


Photos

Coming soon


Protocol

The main communication when setting it up/changing configuration always goes like this:


The host sends a "URB_BULK out" command where there are 64 bytes of data.

The device sends a packet with 4 times 0x00 as data

The host returns the same data but with an 0x00 instead of an 0x01 at byte 16

The device returns a "URB_BULK in" command with a lot of data in the 64 bytes of data.



The setup:

// In the following examples, I'm only talking about the 64 bytes of data, because (I think) everything else gets handled by the driver itself

//I'm making assumptions about what the commands do

Booting:

the host sends 0xa2 followed by 63 0x00

the host sends 0xa8 followed by 63 0x00


the host sends 0xa4 + 0x30 + 0x00 + 0x20 + 60 * 0x00

now, the host counts bytes 1 and 2 up in 0x20 steps, always 0xa4 at byte 0 like that:

byte:


byte 0 1 2 3 4-64
0xa4 + 0x30 + 0x20 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0x40 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0x60 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0x80 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0xa0 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0xc0 + 0x20 + 60 * 0x00
0xa4 + 0x30 + 0xe0 + 0x20 + 60 * 0x00
0xa4 + 0x31 + 0x00 + 0x20 + 60 * 0x00
0xa4 + 0x31 + 0x20 + 0x20 + 60 * 0x00

until byte 1 is 0x3f and byte 2 is 0xe0

then the host sends: 0xa4 + 0x40 + 0x00 + 0x00 + 60 * 0x00