<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sigrok.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jostikas</id>
	<title>sigrok - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://sigrok.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jostikas"/>
	<link rel="alternate" type="text/html" href="https://sigrok.org/wiki/Special:Contributions/Jostikas"/>
	<updated>2026-04-19T08:01:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Talk:Rigol_VS5202D&amp;diff=11377</id>
		<title>Talk:Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Talk:Rigol_VS5202D&amp;diff=11377"/>
		<updated>2016-01-05T20:40:48Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: Created page with &amp;quot;Why was the info on this page deleted? ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why was the info on this page deleted? [[User:Jostikas|Jostikas]] ([[User talk:Jostikas|talk]]) 21:40, 5 January 2016 (CET)&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6671</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6671"/>
		<updated>2013-06-13T07:46:03Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Packet types */ USB488 Trigger not implemented.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;. If left out from command sequences, the device will occasionally return the same answer packet to the next query.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
Not implemented, uses standard command sending method with command &amp;quot;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;TRG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Function generator]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6488</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6488"/>
		<updated>2013-05-26T16:39:42Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x01 when trigger is &amp;quot;Single&amp;quot;, 0x03 when Normal.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 0x201-?&lt;br /&gt;
| 0x03 when trigger &amp;quot;Normal&amp;quot;, number of bytes correlates to number of bulk transfers to return&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0x304-0x30B&lt;br /&gt;
| Identical to last 8 bytes of [[#SETUP DSO? (Request = 0x06)|&amp;quot;SETUP DSO?&amp;quot; packet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop has been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6486</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6486"/>
		<updated>2013-05-26T16:25:54Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Unknown control packet (Request = 0x05) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&lt;br /&gt;
&lt;br /&gt;
==== Unknown control transfer (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop ha been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero.&lt;br /&gt;
&lt;br /&gt;
Returns 0x1000 or 0x080000 (the currently selected memory depth). After this request is called, bulk transfers occur the same way they would after [[#Request waveform data (Request = 0x04)|request 0x04]], except the data header is not present.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6485</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6485"/>
		<updated>2013-05-26T16:08:00Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Stop reading waveform data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&lt;br /&gt;
&lt;br /&gt;
==== Unknown control packet (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop ha been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero. Seems like some kind of &amp;#039;flush buffers&amp;#039; command.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with waveform data without data header.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6484</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6484"/>
		<updated>2013-05-26T16:02:30Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* SETUP DSO? (Request = 0x06) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&lt;br /&gt;
&lt;br /&gt;
==== Unknown control packet (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop ha been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero. Seems like some kind of &amp;#039;flush buffers&amp;#039; command.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfer occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
When called in [[#Stop reading waveform data|stop sequence]] returns an empty bulk transfer at first, after which the bulk transfer is reissued and returns the 780 bytes of data.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with 8192 bytes of data.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6483</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6483"/>
		<updated>2013-05-26T15:58:47Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Request waveform data (Request = 0x04) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred. The first transfer can be (and usually, but not always, is) empty. The first returned data packet has a 780 byte header.&lt;br /&gt;
&lt;br /&gt;
===== Data header =====&lt;br /&gt;
Last 8 bytes of header are identical to the ones returned by [[#SETUP DSO? (Request = 0x06)|SETUP DSO? (Request = 0x06)]]. Mostly contains zeroes so maybe can be omitted, however it does seem to contain some meaningful bytes, the meaning of which is as of yet unclear.&lt;br /&gt;
&lt;br /&gt;
==== Unknown control packet (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop ha been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero. Seems like some kind of &amp;#039;flush buffers&amp;#039; command.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with 8192 bytes of data.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6414</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6414"/>
		<updated>2013-05-09T09:47:12Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;. If they are left out, the device will occasionally return the same answer packet to the next query.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;TRG&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Function generator]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6370</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6370"/>
		<updated>2013-05-02T14:07:47Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Vendor Request 0x09 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;. If they are left out, the device will occasionally return the same answer packet to the next query.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;TRG&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6369</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6369"/>
		<updated>2013-05-02T13:43:47Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* Command sequence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;TRG&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6368</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6368"/>
		<updated>2013-05-02T12:54:39Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* TRIGGER */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;TRG&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#*Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6367</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6367"/>
		<updated>2013-05-02T12:54:15Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* ???TRIGGER??? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====TRIGGER====&lt;br /&gt;
*TRG&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#*Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6336</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6336"/>
		<updated>2013-04-27T23:18:19Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: /* WIP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====???TRIGGER???====&lt;br /&gt;
Assuming compliance with USB488 subclass but haven&amp;#039;t tested it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#*Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=User:Jostikas/Rigol_VG1021&amp;diff=6335</id>
		<title>User:Jostikas/Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=User:Jostikas/Rigol_VG1021&amp;diff=6335"/>
		<updated>2013-04-27T23:17:28Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: Jostikas moved page User:Jostikas/Rigol VG1021 to Rigol VG1021: Fit for daylight perhaps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Rigol VG1021]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6334</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6334"/>
		<updated>2013-04-27T23:17:28Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: Jostikas moved page User:Jostikas/Rigol VG1021 to Rigol VG1021: Fit for daylight perhaps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====???TRIGGER???====&lt;br /&gt;
Assuming compliance with USB488 subclass but haven&amp;#039;t tested it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#*Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6333</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6333"/>
		<updated>2013-04-27T22:56:12Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: Shoud be a working set of protocol. Needs a source for command reference.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
Packets seen so far (note that details differ from USBTMC specification):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!MsgID or bRequestType&lt;br /&gt;
!bRequest&lt;br /&gt;
!Endpoint or wIndex&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_OUT&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Prepare for a device dependent command. Header includes command length.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| Command&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Write a command.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Request a response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| DEV_DEP_MSG_IN&lt;br /&gt;
| 2&lt;br /&gt;
| &lt;br /&gt;
| BULK-In(0x82)&lt;br /&gt;
| Read the response for the previous command that requires one.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| Vendor Request 0x09&lt;br /&gt;
| 0xC2&lt;br /&gt;
| 0x09&lt;br /&gt;
| CTRL_MSG&lt;br /&gt;
| Unknown vendor endpoint request, wLength = 0x04. So far always returns 01 00 00 00&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| ???TRIGGER???&lt;br /&gt;
| 128&lt;br /&gt;
| &lt;br /&gt;
| BULK-Out(0x01)&lt;br /&gt;
| Trigger the device. I&amp;#039;m assuming it&amp;#039;s implemented, need to check.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_OUT====&lt;br /&gt;
&lt;br /&gt;
Consists of a USBTMC DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 1&lt;br /&gt;
| Identifies as DEV_DEP_MSG_OUT.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| bTag&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTag is incremented by host every time a USBTMC message is sent. Rolls over from 255 -&amp;gt; 1.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| bTagInverse&lt;br /&gt;
| Number&lt;br /&gt;
| Per USBTMC specification, bTagInverse is the one&amp;#039;s complement of bTag.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x00&lt;br /&gt;
| Must be 0x00.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of command without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| EOM, indicating that the last message byte (excluding alignment bytes) in the transfer is the last byte of the message (used for USBTMC Split messages that use multiple transfers. Yet to see one on this device, don&amp;#039;t know if it supports them. Probably not.)&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0xCDCDCD&lt;br /&gt;
| According to USBTMC spec, must be 0x000000. I interpret as Command Data to follow.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command====&lt;br /&gt;
Consists of a BULK-Out transfer with command without header, leading &amp;quot;:&amp;quot;, newline or alignment bytes. Does not follow the PacketSize = n*4 bytes requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====REQUEST_DEV_DEP_MSG_IN====&lt;br /&gt;
Consists of a USBTMC REQUEST_DEV_DEP_MSG_IN header to BULK-Out(0x01) endpoint. The command is not sent with this packet or message, instead, the command is sent using the DEV_DEP_MSG_OUT and Command packets. This packet only requests the response.&lt;br /&gt;
Consists of a USBTMC Message DEV_DEP_MSG_OUT header:&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as REQUEST_DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Maximum response data bytes. Only seen 0x40.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| According to USBTMC spec, should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)) &lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| TermChar&lt;br /&gt;
| 0x0A&lt;br /&gt;
| See USBTMC spec. For this device, not important.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 10-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====DEV_DEP_MSG_IN====&lt;br /&gt;
Compliant with USBTMC, assuming wMaxPacketLength is 64. Header and data from BULK-In(0x82). If more than 52 bytes of data (plus 12 header) is needed, then rest of the data is sent in following packets without header or alignment bytes, compliant with USBTMC.&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Offset&lt;br /&gt;
!Field&lt;br /&gt;
!Value&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| MsgID&lt;br /&gt;
| 2&lt;br /&gt;
| Identifies as DEV_DEP_MSG_IN.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1-3&lt;br /&gt;
| bTag, bTagInverse, Reserved&lt;br /&gt;
| Number&lt;br /&gt;
| See [[#DEV_DEP_MSG_OUT]]&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4-7&lt;br /&gt;
| TransferSize&lt;br /&gt;
| LSByte first&lt;br /&gt;
| Length of returned data without header or alignment bytes.&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| bmTransferAttributes&lt;br /&gt;
| 0x01&lt;br /&gt;
| See USBTMC Specifications.&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 9-11&lt;br /&gt;
| Reserved&lt;br /&gt;
| 0x0000&lt;br /&gt;
| As specified.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Vendor Request 0x09====&lt;br /&gt;
&lt;br /&gt;
Vendor Endpoint In control message, always returns 0x01000000.&lt;br /&gt;
*bmRequestType = 0xC2&lt;br /&gt;
*bRequest = 0x09&lt;br /&gt;
*wValue = 0x00&lt;br /&gt;
*wIndex = 0x00&lt;br /&gt;
*wLength = 0x04&lt;br /&gt;
&lt;br /&gt;
Assuming first byte of response to be USBTMC_Status byte&amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====???TRIGGER???====&lt;br /&gt;
Assuming compliance with USB488 subclass but haven&amp;#039;t tested it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Transfer sequences===&lt;br /&gt;
&lt;br /&gt;
Transfer sequences as performed by bundled software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Command sequence====&lt;br /&gt;
#DEV_DEP_MSG_OUT&lt;br /&gt;
#Command&lt;br /&gt;
#*If the command requires no response, the process ends here.&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#Vendor Request 0x09&lt;br /&gt;
#*Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
#REQUEST_DEV_DEP_MSG_IN&lt;br /&gt;
#DEV_DEP_MSG_IN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Startup sequence====&lt;br /&gt;
Here commands are in &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039; and responses from device in &amp;#039;&amp;#039;italics&amp;#039;&amp;#039;. Commands can be abbreviated to uppercase portions (per VISA specifications). Commands are sent and responses read using [[#Command sequence]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;*IDN?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;RIGOL TECHNOLOGIES,VG1021, &amp;lt;nowiki&amp;gt;&amp;lt;serial&amp;gt;,&amp;lt;firmware&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SYSTem:BEEPer:STATe ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:RANGe:AUTO ON&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:LOAD INFinity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:POLarity NORMal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;OUTPut:SYNC OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:SQUare:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion::SYMMetry 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PULSe:DCYCle 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion:USER EXP_RISE&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:DEPTh 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:INTernal:RATE 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:SOURce INTernal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:DEViation 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FREQuency 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:INTernal:FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:SPACing LINear&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STARt 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency:STOP 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:TIME 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:NCYCles 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:PHASe 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:SOURce IMMediate&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:INTernal:PERiod 0.01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;TRIGger:DELay 0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:COUPling AC&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:HFRState OFF&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;COUNter:SENSitivity HIGH&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FREQuency 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage 5Vpp&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;VOLTage:OFFSet 0V&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;AM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FSKey:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;PM:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;SWEep:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;BURSt:STATe?&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;OFF&amp;#039;&amp;#039;&lt;br /&gt;
#&amp;#039;&amp;#039;&amp;#039;FUNCtion SINusoid&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Vendor Request 0x09|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6332</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6332"/>
		<updated>2013-04-27T13:58:36Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
This is the anatomy of a command-response cycle as it&amp;#039;s done by the bundled software. Compliant with USBTMC unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
*DEV_DEP_MSG_OUT Bulk-OUT Header has bytes 9-11 set as 0xCDCDCD (should be 0x000000). Header is always sent in its own packet, instead of sending up to wMaxPacketBytes at once.&lt;br /&gt;
*Command packet Bulk-OUT contains the command as plaintext, without leading &amp;quot;:&amp;quot;. Possibly limited to 64 bytes per packet, though I&amp;#039;ve yet to see so long a command.&lt;br /&gt;
**If the command requires no response, the process ends here.&lt;br /&gt;
*REQUEST_DEV_DEP_MSG_IN Bulk-OUT Header has byte 8 set as 0x01 (should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)). Compliant with USBTMC, MaximumTransferSize is always set at 0x40, TermChar always at 0x0A.&lt;br /&gt;
*Unknown Vendor Endpoint from device to host (0xC2) request 0x09, returns with 4 bytes of data (so far always 0x01000000). Currently assuming the first byte to be USBTMC_status described in &amp;lt;sup&amp;gt;[[#References|4]]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
*Same request again, same return.&lt;br /&gt;
**Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
*DEV_DEP_MSG_IN Bulk-IN Header is (maybe, depending on wMaxPacketBytes) compliant with USBTMC spec. wMaxPacketSize is x, answer is sent in 64-byte packets. No EOM or padding. I currently don&amp;#039;t have access to the device, and I forgot to do the sensible thing of exporting the device info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]], [[#Packet types|4]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6331</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6331"/>
		<updated>2013-04-27T13:54:38Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: The bare bones protocol that maybe should work...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]],[[#References|3]]&amp;lt;/sup&amp;gt;. It fails to heed the &amp;quot;multiple of four&amp;quot; transaction length, sends commands in a nonstandard way and uses reserved bytes that should be zero. Any general purpose USBTMC driver will time out when trying to read an answer from the device, because the command requiring response didn&amp;#039;t register as such.&lt;br /&gt;
&lt;br /&gt;
===Packet types===&lt;br /&gt;
This is the anatomy of a command-response cycle as it&amp;#039;s done by the bundled software. Compliant with USBTMC unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
*DEV_DEP_MSG_OUT Bulk-OUT Header has bytes 9-11 set as 0xCDCDCD (should be 0x000000). Header is always sent in its own packet, instead of sending up to wMaxPacketBytes at once.&lt;br /&gt;
*Command packet Bulk-OUT contains the command as plaintext, without leading &amp;quot;:&amp;quot;. Possibly limited to 64 bytes per packet, though I&amp;#039;ve yet to see so long a command.&lt;br /&gt;
**If the command requires no response, the process ends here.&lt;br /&gt;
*REQUEST_DEV_DEP_MSG_IN Bulk-OUT Header has byte 8 set as 0x01 (should be 0x02 (use TermChar from byte 9) or 0x00 (ignore TermChar)). Compliant with USBTMC, MaximumTransferSize is always set at 0x40, TermChar always at 0x0A.&lt;br /&gt;
*Unknown Vendor Endpoint from device to host (0xC2) request 0x09, returns with 4 bytes of data (so far always 0x01000000). Currently assuming the first byte to be USBTMC_status described in &amp;lt;sup&amp;gt;[[#References|2]]&amp;lt;/sup&amp;gt; &lt;br /&gt;
*Same request again, same return.&lt;br /&gt;
**Whether these two are necessary, or just leftovers from a different device, remains to be seen.&lt;br /&gt;
*DEV_DEP_MSG_IN Bulk-IN Header is (maybe, depending on wMaxPacketBytes) compliant with USBTMC spec. wMaxPacketSize is x, answer is sent in 64-byte packets. No EOM or padding. I currently don&amp;#039;t have access to the device, and I forgot to do the sensible thing of exporting the device info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|2]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC 1.00&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#Protocol|3]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs/USBTMC_1_006a.zip USB.org - Approved Class Specification Documents - TMC Specifications] USBTMC-USB488 1.00&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6303</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6303"/>
		<updated>2013-04-27T08:50:14Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#References|1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs USB.org - Approved Class Specification Documents]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6302</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6302"/>
		<updated>2013-04-27T08:48:46Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs USB.org - Approved Class Specification Documents]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6301</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6301"/>
		<updated>2013-04-27T08:48:24Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[[#1]]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[[#References|2]]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;sup&amp;gt;[[#1]]&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
*&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; [http://www.usb.org/developers/devclass_docs USB.org - Approved Class Specification Documents]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6300</id>
		<title>Rigol VG1021</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VG1021&amp;diff=6300"/>
		<updated>2013-04-27T08:45:04Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: Created page with &amp;quot;==WIP==  The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.  Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==WIP==&lt;br /&gt;
&lt;br /&gt;
The Rigol VG1021 is a 20Mhz 100MS/s Function/Arbitrary waveform generator.&lt;br /&gt;
&lt;br /&gt;
Device Class code implies compatibility with USBTMC USB488 (USB Class 0xFE, Subclass 0x03, Protocol 0x01)&amp;lt;sup&amp;gt;[References|1]&amp;lt;/sup&amp;gt;, but deviates significantly from specification.&amp;lt;sup&amp;gt;[#References|2]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;[http://www.usb.org/developers/defined_class#BaseClassFEh USB.org - Defined 1.0 Class Codes]&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;[http://www.usb.org/developers/devclass_docs USB.org - Approved Class Specification Documents]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
	<entry>
		<id>https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6224</id>
		<title>Rigol VS5202D</title>
		<link rel="alternate" type="text/html" href="https://sigrok.org/w/index.php?title=Rigol_VS5202D&amp;diff=6224"/>
		<updated>2013-04-14T16:33:25Z</updated>

		<summary type="html">&lt;p&gt;Jostikas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rigol_VS5202D.png|thumb|right|Rigol VS5000 series]]&lt;br /&gt;
&lt;br /&gt;
The [http://rigol.com/ Rigol VS5202D] is a 2 channel analog and 16 channel digital, 200 MHz, USB-based oscilloscope/logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The device is [http://int.rigol.com/prodserv/Discontinued%20products/ discontinued by Rigol], but you can find the basic specs e.g. [http://www.batronix.com/shop/oscilloscopes/Rigol-VS5202D.html here]. Maybe some more info by comparing with the &lt;br /&gt;
[http://www.digitalscopes.net/pdf/DS1000%20Programming%20Manual%20%28English%29.pdf DS1000 programming manual].&lt;br /&gt;
&lt;br /&gt;
See [[Rigol VS5202D/Info]] for some more details (such as &amp;#039;&amp;#039;&amp;#039;lsusb -vvv&amp;#039;&amp;#039;&amp;#039; output) on the device.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADSP-BF531_BF532_BF533.pdf Analog Devices ADSP-BF531] Blackfin CPU&lt;br /&gt;
* [http://www.skhynix.com/products/consumer/view.jsp?info.ramKind=01&amp;amp;info.serialNo=HY57V281620FTP&amp;amp;posMap=EOL Hynix HY57V281620FTP] 16MB DRAM&lt;br /&gt;
* [http://www.spansion.com/Products/Parallel-Flash/Pages/Spansion%20GL.aspx Spansion S29GL032A] 4MB flash&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Analog acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone/overview/cyc-overview.html Altera Cyclone EP1C6] 6000-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Logic acquisition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.altera.com/devices/fpga/cyclone2/overview/cy2-overview.html Altera Cyclone II EP2C5] 4600-gate FPGA&lt;br /&gt;
* [http://www.altera.com/literature/hb/cfg/cyc_c51014.pdf Altera EPCS] 128Kb flash memory&lt;br /&gt;
* [http://www.issi.com/pdf/61vps_lps25636a_51218a.pdf ISSI IS61LPS25636A] 1MB SRAM&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.davicom.com.tw/userfile/24247/DM9000EPProductBrief_v1.0.pdf Davicom DM9000EP] 10/100 ethernet controller&lt;br /&gt;
* 25MHz oscillator&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;USB interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.plxtech.com/products/usbcontrollers/net2272 PLX NetChip NET2272] USB 2.0 controller&lt;br /&gt;
* 130MHz oscillator&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Rigol VS5202D front.jpg&lt;br /&gt;
File:Rigol VS5202D back.jpg&lt;br /&gt;
File:Rigol VS5202D PCB top.jpg&lt;br /&gt;
File:Rigol VS5202D PCB bottom.jpg&lt;br /&gt;
File:Rigol VS5202D CPU.jpg&lt;br /&gt;
File:Rigol VS5202D ethernet-USB.jpg&lt;br /&gt;
File:Rigol VS5202D analog frontend.jpg&lt;br /&gt;
File:Rigol VS5202D analog op-amps.jpg&lt;br /&gt;
File:Rigol VS5202D analog.jpg&lt;br /&gt;
File:Rigol VS5202D analog EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D logic.jpg&lt;br /&gt;
File:Rigol VS5202D logic EPCS1N.jpg&lt;br /&gt;
File:Rigol VS5202D PCB power.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 1.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 2.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 3.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 4.jpg&lt;br /&gt;
File:Rigol VS5202D PCB detail 5.jpg&lt;br /&gt;
File:Rigol VS5202D accessories.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod.jpg&lt;br /&gt;
File:Rigol VS5202D digital pod connectors.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Work in progress.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The Rigol communication protocol only uses the USB control and bulk transfer. Control is for sending setup and request smaller amounts of data. Bulk transfers is returned by the Rigol box with setup and image data.&lt;br /&gt;
&lt;br /&gt;
All control transfers interesting for us has request type set to &amp;#039;&amp;#039;&amp;#039;0xc0&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
The request field in the control packets is what tells us which command &lt;br /&gt;
is actually sent.&lt;br /&gt;
&lt;br /&gt;
All descriptions below should have both request type and request set to proper&lt;br /&gt;
values, obvious from the headlines what it should be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet types ===&lt;br /&gt;
This information is completely reverse engineered by hand.&lt;br /&gt;
&lt;br /&gt;
==== Read answer (request = 0x00) ====&lt;br /&gt;
Commands ending with a question mark (&amp;#039;?&amp;#039; ASCII 0x3f) returns answer in two control transfers.&lt;br /&gt;
&lt;br /&gt;
First control transfer is to query the size of the data to be returned. &lt;br /&gt;
That is done by value set to 0. One byte of data is returned in the data field&lt;br /&gt;
by this operation which is the size of the string the Rigol box wants to return.&lt;br /&gt;
&lt;br /&gt;
Second control transfer has value set to 1. The buffer, allocated to the size&lt;br /&gt;
just read, is also sent along the command to be filled with the data. The &lt;br /&gt;
returned data is an ASCII string.&lt;br /&gt;
&lt;br /&gt;
==== Write command (request = 0x01) ====&lt;br /&gt;
Commands from the PC program to the Rigol box is sent as text strings.&lt;br /&gt;
Which commands that are available are listed in the [http://www.tequipment.net/pdf/Rigol/VS5000_programming.pdf &amp;#039;&amp;#039;&amp;#039;Programming Guide&amp;#039;&amp;#039;&amp;#039;] from Rigol.&lt;br /&gt;
&lt;br /&gt;
Each character is sent in a control message with the value set to the ASCII character to be sent. Each ASCII string is terminated with a carriage return  (0x0d, &amp;#039;\r&amp;#039;), which terminates the transmission.&lt;br /&gt;
&lt;br /&gt;
==== Request waveform data (Request = 0x04) ====&lt;br /&gt;
When waveform data is requested to be retrieved a control message is sent.&lt;br /&gt;
The index field of the setup data is a bitmask on which channels to be requested. It is encoded as bit 0 meaning Channel 1, bit 1 meaning Channel 2, bit 2 meaning Logic Channel 0, bit 3 meaning Logic Channel 1 etc.&lt;br /&gt;
&lt;br /&gt;
The 4 byte data field of the control packet sent back as an ack contains number of bytes to be returned by bulk messages. It is encoded LSB first.&lt;br /&gt;
&lt;br /&gt;
After that a series of bulk transfers occurs, with up to 4096 bytes in each transfer, until number of bytes given before is transferred.&lt;br /&gt;
&lt;br /&gt;
==== Unknown control packet (Request = 0x05) ====&lt;br /&gt;
This control transfer is unknown, but it occurs when stop ha been pressed and streaming of big bulk blocks is terminated. All encoding in the control transfers are as described by request 0x04 above. The index field is always zero. Seems like some kind of &amp;#039;flush buffers&amp;#039; command.&lt;br /&gt;
&lt;br /&gt;
==== SETUP DSO? (Request = 0x06) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 780 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:DSO? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP LA? (Request = 0x0c) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 260 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:LA? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
==== SETUP ALT? (Request = 0x0d) ====&lt;br /&gt;
After this control transfer a bulk transfers occurs with 396 bytes of data.&lt;br /&gt;
What each byte means is still to be determined, but will occur in a separate description.&lt;br /&gt;
Same data is returned in response to undocumented instruction :SETUP:ALT? over TCP/IP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Transfer sequences ===&lt;br /&gt;
&lt;br /&gt;
==== Turn-on sequence ====&lt;br /&gt;
# *IDN?&lt;br /&gt;
# :INFO:FPGA?&lt;br /&gt;
# :STOP&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
==== Turn-off sequence ====&lt;br /&gt;
Nothing special.&lt;br /&gt;
&lt;br /&gt;
==== Start reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# :RUN&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP DSO? (waiting for something?)&lt;br /&gt;
# Request waveform data.&lt;br /&gt;
# The data is started get transferred using bulk transfer.&lt;br /&gt;
&lt;br /&gt;
==== Stop reading waveform data ====&lt;br /&gt;
2 analogue channels.&lt;br /&gt;
# :STOP&lt;br /&gt;
# :CLEARUSB&lt;br /&gt;
# Request waveform data, which returns with size 0.&lt;br /&gt;
# Unknown transfer, which returns with 8192 bytes of data.&lt;br /&gt;
# The 8192 byte of data is bulked up.&lt;br /&gt;
# :INFO:EUQP?&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
&lt;br /&gt;
==== Command sequences ====&lt;br /&gt;
# Command&lt;br /&gt;
# SETUP DSO?&lt;br /&gt;
# SETUP LA?&lt;br /&gt;
# SETUP ALT?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data blocks ===&lt;br /&gt;
&lt;br /&gt;
==== 260 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| Logic analyzer off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
| Logic analyzer available&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
| Logic analyzer channel 0 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
| Logic analyzer channel 1 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 4&lt;br /&gt;
| Logic analyzer channel 2 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 5&lt;br /&gt;
| Logic analyzer channel 3 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 6&lt;br /&gt;
| Logic analyzer channel 4 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 7&lt;br /&gt;
| Logic analyzer channel 5 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Logic analyzer channel 6 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 9&lt;br /&gt;
| Logic analyzer channel 7 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 10&lt;br /&gt;
| Logic analyzer channel 8 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 11&lt;br /&gt;
| Logic analyzer channel 9 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Logic analyzer channel 10 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 13&lt;br /&gt;
| Logic analyzer channel 11 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 14&lt;br /&gt;
| Logic analyzer channel 12 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 15&lt;br /&gt;
| Logic analyzer channel 13 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 16&lt;br /&gt;
| Logic analyzer channel 14 off/on&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 17&lt;br /&gt;
| Logic analyzer channel 15 off/on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 396 bytes block ====&lt;br /&gt;
No information&lt;br /&gt;
&lt;br /&gt;
==== 780 bytes block ====&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; style=&amp;quot;font-size: smaller&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#6699ff&amp;quot;&lt;br /&gt;
!Address&lt;br /&gt;
!Description&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 8&lt;br /&gt;
| Analogue 1; OFF = 0, ON chan1 = 1, ON chan2 = 2 (bitmask?)\\&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 12&lt;br /&gt;
| Analogue 1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 32 &lt;br /&gt;
| Coupling chan1; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 44&lt;br /&gt;
| Bandwidth Limit chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 46&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 90&lt;br /&gt;
| Analogue 2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 108&lt;br /&gt;
| Coupling chan2; DC = 0, AC = 1, GND = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 120&lt;br /&gt;
| Bandwidth Limit chan2; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 122&lt;br /&gt;
| Invert chan1; OFF = 0, ON = 1&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 448&lt;br /&gt;
| Acquire type; Normal = 0, Average = 1, Peak = 2&lt;br /&gt;
|- bgcolor=&amp;quot;#eeeeee&amp;quot;&lt;br /&gt;
| 456&lt;br /&gt;
| Acquire average; 2 = 1, 4 = 2, 8 = 3, 16 = 4, 32 = 5, 64 = 6, 128 = 7, 256 = 8&lt;br /&gt;
|- bgcolor=&amp;quot;#dddddd&amp;quot;&lt;br /&gt;
| 520&lt;br /&gt;
| Trigger mode; Edge = 0, Pulse = 1, Slope = 2, Video = 3, Alternate = ?, Pattern = 5, Duration = 6 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The image information bulk transfer ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Device]]&lt;br /&gt;
[[Category:Logic analyzer]]&lt;br /&gt;
[[Category:Oscilloscope]]&lt;br /&gt;
[[Category:Mixed-signal oscilloscope]]&lt;br /&gt;
[[Category:Planned]]&lt;/div&gt;</summary>
		<author><name>Jostikas</name></author>
	</entry>
</feed>