

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://proghq.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bsjolen</id>
	<title>Proghq - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://proghq.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bsjolen"/>
	<link rel="alternate" type="text/html" href="https://proghq.org/wiki/Special:Contributions/Bsjolen"/>
	<updated>2026-04-15T02:21:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=970</id>
		<title>XGecu Protocol</title>
		<link rel="alternate" type="text/html" href="https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=970"/>
		<updated>2024-06-07T14:10:38Z</updated>

		<summary type="html">&lt;p&gt;Bsjolen: Adding pin mapping for gnd, vcc and vpp.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;based on minipro, list of commands:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|&#039;&#039;&#039;command&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866a/cs&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866II+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T48&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T56&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|GET_SYSTEM_INFO&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|-&lt;br /&gt;
|NAND_INIT&lt;br /&gt;
| -&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|-&lt;br /&gt;
|START_TRANSACTION&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|-&lt;br /&gt;
|END_TRANSACTION&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|-&lt;br /&gt;
|GET_CHIP_ID&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER&lt;br /&gt;
|0x10&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER&lt;br /&gt;
|0x11&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|-&lt;br /&gt;
|READ_CFG&lt;br /&gt;
|0x12&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CFG&lt;br /&gt;
|0x13&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER_DATA&lt;br /&gt;
|0x14&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER_DATA&lt;br /&gt;
|0x15&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CODE&lt;br /&gt;
|0x20&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|-&lt;br /&gt;
|READ_CODE&lt;br /&gt;
|0x21&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|-&lt;br /&gt;
|ERASE&lt;br /&gt;
|0x22&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|-&lt;br /&gt;
|READ_DATA&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_DATA&lt;br /&gt;
|0x31&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_LOCK&lt;br /&gt;
|0x40&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|-&lt;br /&gt;
|READ_LOCK&lt;br /&gt;
|0x41&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|-&lt;br /&gt;
|READ_CALIBRATION&lt;br /&gt;
|0x42&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_OFF&lt;br /&gt;
|0x44&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_ON&lt;br /&gt;
|0x45&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|-&lt;br /&gt;
|AUTODETECT&lt;br /&gt;
|0xfc&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_WRITE&lt;br /&gt;
|0xaa&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_ERASE&lt;br /&gt;
|0xcc&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK_TSOP48&lt;br /&gt;
|0xfd&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GET_STATUS&lt;br /&gt;
|0xfe&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|-&lt;br /&gt;
|READ_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x26&lt;br /&gt;
|-&lt;br /&gt;
|LOGIC_IC_TEST_VECTOR&lt;br /&gt;
|&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM2&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x2a&lt;br /&gt;
|-&lt;br /&gt;
|SWITCH&lt;br /&gt;
| -&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|-&lt;br /&gt;
|SET_LATCH&lt;br /&gt;
|0xd1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|RESET_PIN_DRIVERS&lt;br /&gt;
|0xd0&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|-&lt;br /&gt;
|READ_ZIF_PINS&lt;br /&gt;
|0xd2&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|0x35&lt;br /&gt;
|-&lt;br /&gt;
|SET_DIR&lt;br /&gt;
|0xd4&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_OUT&lt;br /&gt;
|0xd5&lt;br /&gt;
|0x36&lt;br /&gt;
|&lt;br /&gt;
|0x36&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_PIN&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|-&lt;br /&gt;
|SET_GND_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLDOWNS&lt;br /&gt;
|&lt;br /&gt;
|0x31&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLUPS&lt;br /&gt;
|&lt;br /&gt;
|0x32&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|0xff&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|-&lt;br /&gt;
|? pin detect&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x3e&lt;br /&gt;
|-&lt;br /&gt;
|?? autofind ??&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|detect_drm_adapter&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x24&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|??? set / read / pin (imax?)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|??? after read cfg&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x22&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== 0x2E  SET_VCC_PIN (and voltage) (t48) ======&lt;br /&gt;
 send 2e 00 00 00  00 00 00 00  aa bb cc dd  00 00 00 00  xx 00 00 00  yy 00 zz 00 &lt;br /&gt;
Set which pins are VCC in aa bb cc dd according to vcc pin map, lsb of aa first:&lt;br /&gt;
 vccmap = &lt;br /&gt;
 [1,2,3,4,5,6,7,8,16,15,14,13,12,11,10,9,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
yy is written straight to DAC hold register R32_DAC_R12BDHR2. Some code writes it to 0x96,&lt;br /&gt;
writing 0x01 e.g. breaks reading voltages with cmd 0x33 but with 0x00 it still works.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
zz is VCC voltage 01 to 3F. 00 means don&#039;t set VCC. &lt;br /&gt;
 voltagemap_vcc[64]={  0.0, 1.74, 1.83, 1.89, 2.00, 2.07, 2.18, 2.23,&lt;br /&gt;
                      2.32, 2.41, 2.45, 2.56, 2.65, 2.73, 2.79, 2.90,&lt;br /&gt;
                      3.02, 3.08, 3.16, 3.28, 3.33, 3.42, 3.48, 3.57,&lt;br /&gt;
                      3.65, 3.75, 3.84, 3.89, 3.97, 4.08, 4.16, 4.23,&lt;br /&gt;
                      4.31, 4.40, 4.48, 4.55, 4.65, 4.71, 4.80, 4.88,&lt;br /&gt;
                      4.97, 5.05, 5.14, 5.18, 5.29, 5.37, 5.45, 5.54,&lt;br /&gt;
                      5.64, 5.76, 5.81, 5.91, 5.99, 6.06, 6.18, 6.23,&lt;br /&gt;
                      6.33, 6.37, 6.45, 6.54, 6.62, 6.72, 6.80, 6.86 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== 0x2F  SET_VPP_PIN (and vpp and vccio voltage) (t48) ======&lt;br /&gt;
 send 2f 00 00 00  00 00 00 00  aa bb 00 00  xx 00 00 00&lt;br /&gt;
Set which pins are VPP in aa bb according to vpp pin map, lsb of aa first:&lt;br /&gt;
 vppmap = &lt;br /&gt;
 [ 31,30,10,9,4,3,2,1,32,33,34,36,37,38,39,40]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VPP on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 01 00 00  00 00 00 00  xx 00 00 00 &lt;br /&gt;
Sets vpp voltage xx 00 to 3f from 9.31 to 25.16 volts, ca 0.25V per step.&lt;br /&gt;
 voltagemap_vpp[64]={  9.31,  9.56,  9.83, 10.11, 10.32, 10.60, 10.87, 11.14,&lt;br /&gt;
                      11.32, 11.61, 11.86, 12.15, 12.35, 12.63, 12.90, 13.18,&lt;br /&gt;
                      13.35, 13.62, 13.88, 14.16, 14.38, 14.66, 14.92, 15.19,&lt;br /&gt;
                      15.39, 15.65, 15.93, 16.19, 16.43, 16.70, 16.95, 17.23,&lt;br /&gt;
                      17.22, 17.48, 17.76, 18.04, 18.26, 18.53, 18.80, 19.07,&lt;br /&gt;
                      19.25, 19.52, 19.80, 20.07, 20.30, 20.56, 20.85, 21.10,&lt;br /&gt;
                      21.27, 21.56, 21.82, 22.10, 22.31, 22.59, 22.86, 23.13,&lt;br /&gt;
                      23.32, 23.58, 23.86, 24.13, 24.37, 24.63, 24.90, 25.16 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 02 00 00  00 00 00 00  xx 00 00 00&lt;br /&gt;
Sets vccio voltage 00 to 04. &lt;br /&gt;
 voltagemap_vccio[5]={ 2.35, 2.47, 2.93, 3.23, 3.45 };&lt;br /&gt;
&lt;br /&gt;
====== 0x30  SET_GND_PIN (t48) ======&lt;br /&gt;
 send 30 00 00 00  00 00 00 00  aa bb cc dd  00 00 00 00  xx 00 00 00&lt;br /&gt;
Set which pins are gnd in aa bb cc dd according to gnd pin map, lsb of aa first:&lt;br /&gt;
 gndmap = &lt;br /&gt;
 [8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,32,31,30,29,27,25,20,18,40,39,38,37,36,35,34,33]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables EGND on J6/J8/J16 on ISP-connector.&lt;br /&gt;
&lt;br /&gt;
====== 0x31  SET_PULLUPS (t48) ======&lt;br /&gt;
 send 31 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull up for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x32  SET_PULLDOWNS (t48) ======&lt;br /&gt;
 send 32 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull down for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x33  MEASURE_VOLTAGES (t48) ======&lt;br /&gt;
 send 33 00 00 00 00 00 00 00&lt;br /&gt;
 recv 33 00 00 00  00 00 00 00  pp pp pp pp  uu uu uu uu  vv vv vv vv  ii ii ii ii&lt;br /&gt;
Measures voltages.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
pp is vpp voltage.vpp = (pp*0xf78/0x1000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
uu is usb voltage. vusb = (uu*0xccf6/0x27000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
vv is vcc voltage. vcc = ((vv*0xb32e/0x27000)-0x14)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
ii is vccio voltage. vccio = (ii*0x294/0x1000)/100.0&lt;br /&gt;
&lt;br /&gt;
====== 0x35  READ_PINS (t48) ======&lt;br /&gt;
 send 35 00 00 00 00 00 00 00&lt;br /&gt;
 recv 35 00 00 00 00 00 00 00 aa bb cc dd ee ff gg 00&lt;br /&gt;
Reads pins and returns bits for all 56 pins on aa bb cc dd ee ff gg&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
first pin is lsb of aa.&lt;br /&gt;
&lt;br /&gt;
====== 0x36  SET_OUT (t48) ======&lt;br /&gt;
 send 36 xx 00 00 ii 00 00 00&lt;br /&gt;
Sets pin ii to value xx (00 or 01) AND sets the pin to output push-pull 50 MHz.&lt;br /&gt;
&lt;br /&gt;
====== 0x3E  PIN_DETECT ======&lt;br /&gt;
 send 3E 00 aa bb 00 00 00 00&lt;br /&gt;
 recv  3E 00 aa bb 00 00 00 00 b0 b1 b2 b3 b4 b5 b6 00&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 aa bb : chip ID&lt;br /&gt;
 b0 : ZIF8-ZIF1&lt;br /&gt;
 b1 : ZIF16-ZIF9&lt;br /&gt;
 b2 : ZIF24-ZIF17&lt;br /&gt;
 b3 : ZIF32-ZIF25&lt;br /&gt;
 b4 : ZIF40-ZIF33&lt;br /&gt;
 b5 : ISP8-ISP1&lt;br /&gt;
 b6: ISP16-SIP9&lt;/div&gt;</summary>
		<author><name>Bsjolen</name></author>
	</entry>
	<entry>
		<id>https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=969</id>
		<title>XGecu Protocol</title>
		<link rel="alternate" type="text/html" href="https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=969"/>
		<updated>2024-05-26T23:46:26Z</updated>

		<summary type="html">&lt;p&gt;Bsjolen: Adding voltage maps.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;based on minipro, list of commands:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|&#039;&#039;&#039;command&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866a/cs&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866II+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T48&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T56&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|GET_SYSTEM_INFO&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|-&lt;br /&gt;
|NAND_INIT&lt;br /&gt;
| -&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|-&lt;br /&gt;
|START_TRANSACTION&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|-&lt;br /&gt;
|END_TRANSACTION&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|-&lt;br /&gt;
|GET_CHIP_ID&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER&lt;br /&gt;
|0x10&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER&lt;br /&gt;
|0x11&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|-&lt;br /&gt;
|READ_CFG&lt;br /&gt;
|0x12&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CFG&lt;br /&gt;
|0x13&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER_DATA&lt;br /&gt;
|0x14&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER_DATA&lt;br /&gt;
|0x15&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CODE&lt;br /&gt;
|0x20&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|-&lt;br /&gt;
|READ_CODE&lt;br /&gt;
|0x21&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|-&lt;br /&gt;
|ERASE&lt;br /&gt;
|0x22&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|-&lt;br /&gt;
|READ_DATA&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_DATA&lt;br /&gt;
|0x31&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_LOCK&lt;br /&gt;
|0x40&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|-&lt;br /&gt;
|READ_LOCK&lt;br /&gt;
|0x41&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|-&lt;br /&gt;
|READ_CALIBRATION&lt;br /&gt;
|0x42&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_OFF&lt;br /&gt;
|0x44&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_ON&lt;br /&gt;
|0x45&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|-&lt;br /&gt;
|AUTODETECT&lt;br /&gt;
|0xfc&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_WRITE&lt;br /&gt;
|0xaa&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_ERASE&lt;br /&gt;
|0xcc&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK_TSOP48&lt;br /&gt;
|0xfd&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GET_STATUS&lt;br /&gt;
|0xfe&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|-&lt;br /&gt;
|READ_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x26&lt;br /&gt;
|-&lt;br /&gt;
|LOGIC_IC_TEST_VECTOR&lt;br /&gt;
|&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM2&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x2a&lt;br /&gt;
|-&lt;br /&gt;
|SWITCH&lt;br /&gt;
| -&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|-&lt;br /&gt;
|SET_LATCH&lt;br /&gt;
|0xd1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|RESET_PIN_DRIVERS&lt;br /&gt;
|0xd0&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|-&lt;br /&gt;
|READ_ZIF_PINS&lt;br /&gt;
|0xd2&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|0x35&lt;br /&gt;
|-&lt;br /&gt;
|SET_DIR&lt;br /&gt;
|0xd4&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_OUT&lt;br /&gt;
|0xd5&lt;br /&gt;
|0x36&lt;br /&gt;
|&lt;br /&gt;
|0x36&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_PIN&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|-&lt;br /&gt;
|SET_GND_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLDOWNS&lt;br /&gt;
|&lt;br /&gt;
|0x31&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLUPS&lt;br /&gt;
|&lt;br /&gt;
|0x32&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|0xff&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|-&lt;br /&gt;
|? pin detect&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x3e&lt;br /&gt;
|-&lt;br /&gt;
|?? autofind ??&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|detect_drm_adapter&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x24&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|??? set / read / pin (imax?)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|??? after read cfg&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x22&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== 0x2E  SET_VCC_PIN (and voltage) (t48) ======&lt;br /&gt;
 send 2e 00 00 00  00 00 00 00  aa bb cc dd  ee ff gg 00  xx 00 00 00  yy 00 zz 00 &lt;br /&gt;
Set which pins are VCC in aa bb cc dd ee ff gg according to vcc pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
yy is written straight to DAC hold register R32_DAC_R12BDHR2. Some code writes it to 0x96,&lt;br /&gt;
writing 0x01 e.g. breaks reading voltages with cmd 0x33 but with 0x00 it still works.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
zz is VCC voltage 01 to 3F. 00 means don&#039;t set VCC. &lt;br /&gt;
 voltagemap_vcc[64]={  0.0, 1.74, 1.83, 1.89, 2.00, 2.07, 2.18, 2.23,&lt;br /&gt;
                      2.32, 2.41, 2.45, 2.56, 2.65, 2.73, 2.79, 2.90,&lt;br /&gt;
                      3.02, 3.08, 3.16, 3.28, 3.33, 3.42, 3.48, 3.57,&lt;br /&gt;
                      3.65, 3.75, 3.84, 3.89, 3.97, 4.08, 4.16, 4.23,&lt;br /&gt;
                      4.31, 4.40, 4.48, 4.55, 4.65, 4.71, 4.80, 4.88,&lt;br /&gt;
                      4.97, 5.05, 5.14, 5.18, 5.29, 5.37, 5.45, 5.54,&lt;br /&gt;
                      5.64, 5.76, 5.81, 5.91, 5.99, 6.06, 6.18, 6.23,&lt;br /&gt;
                      6.33, 6.37, 6.45, 6.54, 6.62, 6.72, 6.80, 6.86 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====== 0x2F  SET_VPP_PIN (and vpp and vccio voltage) (t48) ======&lt;br /&gt;
 send 2f 00 00 00  00 00 00 00  aa bb cc dd  xx 00 00 00&lt;br /&gt;
Set which pins are VPP in aa bb cc dd according to vpp pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VPP on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 01 00 00  00 00 00 00  xx 00 00 00 &lt;br /&gt;
Sets vpp voltage xx 00 to 3f from 9.31 to 25.16 volts, ca 0.25V per step.&lt;br /&gt;
 voltagemap_vpp[64]={  9.31,  9.56,  9.83, 10.11, 10.32, 10.60, 10.87, 11.14,&lt;br /&gt;
                      11.32, 11.61, 11.86, 12.15, 12.35, 12.63, 12.90, 13.18,&lt;br /&gt;
                      13.35, 13.62, 13.88, 14.16, 14.38, 14.66, 14.92, 15.19,&lt;br /&gt;
                      15.39, 15.65, 15.93, 16.19, 16.43, 16.70, 16.95, 17.23,&lt;br /&gt;
                      17.22, 17.48, 17.76, 18.04, 18.26, 18.53, 18.80, 19.07,&lt;br /&gt;
                      19.25, 19.52, 19.80, 20.07, 20.30, 20.56, 20.85, 21.10,&lt;br /&gt;
                      21.27, 21.56, 21.82, 22.10, 22.31, 22.59, 22.86, 23.13,&lt;br /&gt;
                      23.32, 23.58, 23.86, 24.13, 24.37, 24.63, 24.90, 25.16 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 02 00 00  00 00 00 00  xx 00 00 00&lt;br /&gt;
Sets vccio voltage 00 to 04. &lt;br /&gt;
 voltagemap_vccio[5]={ 2.35, 2.47, 2.93, 3.23, 3.45 };&lt;br /&gt;
&lt;br /&gt;
====== 0x30  SET_GND_PIN (t48) ======&lt;br /&gt;
 send 30 00 00 00 00 00 00 00 aa bb cc dd ee ff gg 00 xx 00 00 00&lt;br /&gt;
Set which pins are gnd in aa bb cc dd ee ff gg according to gnd pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables EGND on J6/J8/J16 on ISP-connector.&lt;br /&gt;
&lt;br /&gt;
====== 0x31  SET_PULLUPS (t48) ======&lt;br /&gt;
 send 31 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull up for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x32  SET_PULLDOWNS (t48) ======&lt;br /&gt;
 send 32 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull down for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x33  MEASURE_VOLTAGES (t48) ======&lt;br /&gt;
 send 33 00 00 00 00 00 00 00&lt;br /&gt;
 recv 33 00 00 00  00 00 00 00  pp pp pp pp  uu uu uu uu  vv vv vv vv  ii ii ii ii&lt;br /&gt;
Measures voltages.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
pp is vpp voltage.vpp = (pp*0xf78/0x1000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
uu is usb voltage. vusb = (uu*0xccf6/0x27000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
vv is vcc voltage. vcc = ((vv*0xb32e/0x27000)-0x14)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
ii is vccio voltage. vccio = (ii*0x294/0x1000)/100.0&lt;br /&gt;
&lt;br /&gt;
====== 0x35  READ_PINS (t48) ======&lt;br /&gt;
 send 35 00 00 00 00 00 00 00&lt;br /&gt;
 recv 35 00 00 00 00 00 00 00 aa bb cc dd ee ff gg 00&lt;br /&gt;
Reads pins and returns bits for all 56 pins on aa bb cc dd ee ff gg&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
first pin is lsb of aa.&lt;br /&gt;
&lt;br /&gt;
====== 0x36  SET_OUT (t48) ======&lt;br /&gt;
 send 36 xx 00 00 ii 00 00 00&lt;br /&gt;
Sets pin ii to value xx (00 or 01) AND sets the pin to output push-pull 50 MHz.&lt;br /&gt;
&lt;br /&gt;
====== 0x3E  PIN_DETECT ======&lt;br /&gt;
 send 3E 00 aa bb 00 00 00 00&lt;br /&gt;
 recv  3E 00 aa bb 00 00 00 00 b0 b1 b2 b3 b4 b5 b6 00&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 aa bb : chip ID&lt;br /&gt;
 b0 : ZIF8-ZIF1&lt;br /&gt;
 b1 : ZIF16-ZIF9&lt;br /&gt;
 b2 : ZIF24-ZIF17&lt;br /&gt;
 b3 : ZIF32-ZIF25&lt;br /&gt;
 b4 : ZIF40-ZIF33&lt;br /&gt;
 b5 : ISP8-ISP1&lt;br /&gt;
 b6: ISP16-SIP9&lt;/div&gt;</summary>
		<author><name>Bsjolen</name></author>
	</entry>
	<entry>
		<id>https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=968</id>
		<title>XGecu Protocol</title>
		<link rel="alternate" type="text/html" href="https://proghq.org/w/index.php?title=XGecu_Protocol&amp;diff=968"/>
		<updated>2024-05-26T23:37:26Z</updated>

		<summary type="html">&lt;p&gt;Bsjolen: Adding some documentation for for t48 commands 2e, 2f, 30 , 31, 32, 33, 35 and 36.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;based on minipro, list of commands:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|&#039;&#039;&#039;command&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866a/cs&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;TL866II+&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T48&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;T56&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|GET_SYSTEM_INFO&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|0x00&lt;br /&gt;
|-&lt;br /&gt;
|NAND_INIT&lt;br /&gt;
| -&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|0x02&lt;br /&gt;
|-&lt;br /&gt;
|START_TRANSACTION&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|0x03&lt;br /&gt;
|-&lt;br /&gt;
|END_TRANSACTION&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|0x04&lt;br /&gt;
|-&lt;br /&gt;
|GET_CHIP_ID&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|0x05&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER&lt;br /&gt;
|0x10&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|0x06&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER&lt;br /&gt;
|0x11&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|0x07&lt;br /&gt;
|-&lt;br /&gt;
|READ_CFG&lt;br /&gt;
|0x12&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|0x08&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CFG&lt;br /&gt;
|0x13&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|0x09&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_USER_DATA&lt;br /&gt;
|0x14&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|0x0a&lt;br /&gt;
|-&lt;br /&gt;
|READ_USER_DATA&lt;br /&gt;
|0x15&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|0x0b&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_CODE&lt;br /&gt;
|0x20&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|0x0c&lt;br /&gt;
|-&lt;br /&gt;
|READ_CODE&lt;br /&gt;
|0x21&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|0x0d&lt;br /&gt;
|-&lt;br /&gt;
|ERASE&lt;br /&gt;
|0x22&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|0x0e&lt;br /&gt;
|-&lt;br /&gt;
|READ_DATA&lt;br /&gt;
|0x30&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|0x10&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_DATA&lt;br /&gt;
|0x31&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|0x11&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_LOCK&lt;br /&gt;
|0x40&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|0x14&lt;br /&gt;
|-&lt;br /&gt;
|READ_LOCK&lt;br /&gt;
|0x41&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|0x15&lt;br /&gt;
|-&lt;br /&gt;
|READ_CALIBRATION&lt;br /&gt;
|0x42&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|0x16&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_OFF&lt;br /&gt;
|0x44&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|0x18&lt;br /&gt;
|-&lt;br /&gt;
|PROTECT_ON&lt;br /&gt;
|0x45&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|0x19&lt;br /&gt;
|-&lt;br /&gt;
|AUTODETECT&lt;br /&gt;
|0xfc&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|0x37&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_WRITE&lt;br /&gt;
|0xaa&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|0x3b&lt;br /&gt;
|-&lt;br /&gt;
|BOOTLOADER_ERASE&lt;br /&gt;
|0xcc&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|0x3c&lt;br /&gt;
|-&lt;br /&gt;
|UNLOCK_TSOP48&lt;br /&gt;
|0xfd&lt;br /&gt;
|0x38&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GET_STATUS&lt;br /&gt;
|0xfe&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|0x39&lt;br /&gt;
|-&lt;br /&gt;
|READ_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|0x1d&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_JEDEC&lt;br /&gt;
| -&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|0x1e&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x26&lt;br /&gt;
|-&lt;br /&gt;
|LOGIC_IC_TEST_VECTOR&lt;br /&gt;
|&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|0x28&lt;br /&gt;
|-&lt;br /&gt;
|WRITE_BITSTREAM2&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|0x2a&lt;br /&gt;
|-&lt;br /&gt;
|SWITCH&lt;br /&gt;
| -&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|0x3d&lt;br /&gt;
|-&lt;br /&gt;
|SET_LATCH&lt;br /&gt;
|0xd1&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|RESET_PIN_DRIVERS&lt;br /&gt;
|0xd0&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|0x2d&lt;br /&gt;
|-&lt;br /&gt;
|READ_ZIF_PINS&lt;br /&gt;
|0xd2&lt;br /&gt;
|0x35&lt;br /&gt;
|&lt;br /&gt;
|0x35&lt;br /&gt;
|-&lt;br /&gt;
|SET_DIR&lt;br /&gt;
|0xd4&lt;br /&gt;
|0x34&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_OUT&lt;br /&gt;
|0xd5&lt;br /&gt;
|0x36&lt;br /&gt;
|&lt;br /&gt;
|0x36&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1b&lt;br /&gt;
|0x1b&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VCC_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|0x2e&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_VOLTAGE&lt;br /&gt;
|&lt;br /&gt;
|0x1c&lt;br /&gt;
|0x1c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_VPP_PIN&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|0x2f&lt;br /&gt;
|-&lt;br /&gt;
|SET_GND_PIN&lt;br /&gt;
|&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|0x30&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLDOWNS&lt;br /&gt;
|&lt;br /&gt;
|0x31&lt;br /&gt;
|0x31&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SET_PULLUPS&lt;br /&gt;
|&lt;br /&gt;
|0x32&lt;br /&gt;
|0x32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|RESET&lt;br /&gt;
|0xff&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|0x3f&lt;br /&gt;
|-&lt;br /&gt;
|? pin detect&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x3e&lt;br /&gt;
|0x3e&lt;br /&gt;
|-&lt;br /&gt;
|?? autofind ??&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x29&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|detect_drm_adapter&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x24&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|??? set / read / pin (imax?)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x33&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|??? after read cfg&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x22&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== 0x2E  SET_VCC_PIN (and voltage) (t48) ======&lt;br /&gt;
 send 2e 00 00 00  00 00 00 00  aa bb cc dd  ee ff gg 00  xx 00 00 00  yy 00 zz 00 &lt;br /&gt;
Set which pins are VCC in aa bb cc dd ee ff gg according to vcc pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
yy is written straight to DAC hold register R32_DAC_R12BDHR2. Some code writes it to 0x96,&lt;br /&gt;
writing 0x01 e.g. breaks reading voltages with cmd 0x33 but with 0x00 it still works.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VCC on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
zz is VCC voltage 01 to 3F. 00 means don&#039;t set VCC. &lt;br /&gt;
&lt;br /&gt;
====== 0x2F  SET_VPP_PIN (and vpp and vccio voltage) (t48) ======&lt;br /&gt;
 send 2f 00 00 00  00 00 00 00  aa bb cc dd  xx 00 00 00&lt;br /&gt;
Set which pins are VPP in aa bb cc dd according to vpp pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables VPP on ISP-connector.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 01 00 00  00 00 00 00  xx 00 00 00 &lt;br /&gt;
Sets vpp voltage xx 00 to 3f from 9.31 to 25.16 volts, ca 0.25V per step.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
 send 2f 02 00 00  00 00 00 00  xx 00 00 00&lt;br /&gt;
Sets vccio voltage 00 to 04. 0=2.35, 1=2.47, 2=2.93, 3=3.23, 4=3.45&lt;br /&gt;
&lt;br /&gt;
====== 0x30  SET_GND_PIN (t48) ======&lt;br /&gt;
 send 30 00 00 00 00 00 00 00 aa bb cc dd ee ff gg 00 xx 00 00 00&lt;br /&gt;
Set which pins are gnd in aa bb cc dd ee ff gg according to gnd pin map.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
xx is 00 or 01 where 01 enables EGND on J6/J8/J16 on ISP-connector.&lt;br /&gt;
&lt;br /&gt;
====== 0x31  SET_PULLUPS (t48) ======&lt;br /&gt;
 send 31 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull up for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x32  SET_PULLDOWNS (t48) ======&lt;br /&gt;
 send 32 00 00 00 00 00 00 00 &lt;br /&gt;
Enable pull down for all pins and set all pins to input.&lt;br /&gt;
&lt;br /&gt;
====== 0x33  MEASURE_VOLTAGES (t48) ======&lt;br /&gt;
 send 33 00 00 00 00 00 00 00&lt;br /&gt;
 recv 33 00 00 00  00 00 00 00  pp pp pp pp  uu uu uu uu  vv vv vv vv  ii ii ii ii&lt;br /&gt;
Measures voltages.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
pp is vpp voltage.vpp = (pp*0xf78/0x1000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
uu is usb voltage. vusb = (uu*0xccf6/0x27000)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
vv is vcc voltage. vcc = ((vv*0xb32e/0x27000)-0x14)/100.0&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
ii is vccio voltage. vccio = (ii*0x294/0x1000)/100.0&lt;br /&gt;
&lt;br /&gt;
====== 0x35  READ_PINS (t48) ======&lt;br /&gt;
 send 35 00 00 00 00 00 00 00&lt;br /&gt;
 recv 35 00 00 00 00 00 00 00 aa bb cc dd ee ff gg 00&lt;br /&gt;
Reads pins and returns bits for all 56 pins on aa bb cc dd ee ff gg&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
first pin is lsb of aa.&lt;br /&gt;
&lt;br /&gt;
====== 0x36  SET_OUT (t48) ======&lt;br /&gt;
 send 36 xx 00 00 ii 00 00 00&lt;br /&gt;
Sets pin ii to value xx (00 or 01) AND sets the pin to output push-pull 50 MHz.&lt;br /&gt;
&lt;br /&gt;
====== 0x3E  PIN_DETECT ======&lt;br /&gt;
 send 3E 00 aa bb 00 00 00 00&lt;br /&gt;
 recv  3E 00 aa bb 00 00 00 00 b0 b1 b2 b3 b4 b5 b6 00&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
 aa bb : chip ID&lt;br /&gt;
 b0 : ZIF8-ZIF1&lt;br /&gt;
 b1 : ZIF16-ZIF9&lt;br /&gt;
 b2 : ZIF24-ZIF17&lt;br /&gt;
 b3 : ZIF32-ZIF25&lt;br /&gt;
 b4 : ZIF40-ZIF33&lt;br /&gt;
 b5 : ISP8-ISP1&lt;br /&gt;
 b6: ISP16-SIP9&lt;/div&gt;</summary>
		<author><name>Bsjolen</name></author>
	</entry>
</feed>