<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title><![CDATA[Dobrica Pavlinušić's random unstructured stuff: X300 dongle]]></title>
<link>https://saturn.ffzg.hr/rot13/index.cgi?x300_dongle</link>
<description></description>
<pubDate>Wed, 15 Jun 2016 10:11:23 -0000</pubDate>
<webMaster>root@saturn.ffzg.hr</webMaster>
<generator>Socialtext Workspace v2.19.0.2</generator>

<item>
<title><![CDATA[X300 dongle]]></title>
<link>https://saturn.ffzg.hr/rot13/index.cgi?x300_dongle</link>
<description><![CDATA[<div>Creator: Dobrica Pavlinušić</div><hr/><div>Tags: FPGA</div><hr/><div class="wiki">
<br /><div class="nlw_phrase"><table class="wafl_container">
  <tr>
    <td>
      <div class="wafl_box">
        
          <div class="wafl_titlebox">
            <div class="wafl_title">
              
                Contents: [Dobrica Pavlinušić's random unstructured stuff]
              
            </div>
          </div>
          <div class="wafl_items">
            
              <div class="wiki">
<ul>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#x300_dongle">Dobrica Pavlinušić's random unstructured stuff (X300 dongle)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] X300 dongle} --></span></li>

<ul>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#jtag">Dobrica Pavlinušić's random unstructured stuff (JTAG)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] JTAG} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#svf_programming">Dobrica Pavlinušić's random unstructured stuff (SVF programming)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] SVF programming} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#vhdl_to_toggle_pins">Dobrica Pavlinušić's random unstructured stuff (VHDL to toggle pins)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] VHDL to toggle pins} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#rj45">Dobrica Pavlinušić's random unstructured stuff (RJ45)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] RJ45} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#ps2">Dobrica Pavlinušić's random unstructured stuff (PS2)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] PS2} --></span></li>
</ul>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#audio_jack">Dobrica Pavlinušić's random unstructured stuff (Audio jack)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] Audio jack} --></span></li>

<ul>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#channel_1">Dobrica Pavlinušić's random unstructured stuff (channel 1)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] channel 1} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#channel_2">Dobrica Pavlinušić's random unstructured stuff (channel 2)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] channel 2} --></span></li>
</ul></ul>
</div>

            
            
          </div>
        
      </div>
    </td>
  </tr>
</table>
<!-- wiki: {toc: }
--></div><br /><br /><h1 id="x300_dongle">X300 dongle</h1>
<ul>
<li><a href="https://saturn.ffzg.hr/rot13/index.cgi?altera" title="(121 months) Bunch of references for Altera FPGA toc JTAG pinout image altera-jtag-pinout.jpg Bus Pirate programm...">Altera</a> EPM3064A TC44-10N <a target="_blank" title="(external link)" href="ftp://ftp.altera.com/outgoing/download/bsdl/3064at44.bsd">ftp://ftp.altera.com/outgoing/download/bsdl/3064at44.bsd</a></li>
<li>LD1117A L33AUD</li>
</ul>
<h2 id="jtag">JTAG</h2>
<p>
I took picture of both sides of board, corrected it using perspective tool in gimp and added layers with VCC (5V and 3.3V) and GND (checked with unimer continuity test).</p>
<span class="nlw_phrase"><img alt="x300_dongle-jtag.jpg" src="https://saturn.ffzg.hr/rot13/index.cgi/x300_dongle-jtag.jpg?action=attachments_download;page_name=x300_dongle;id=20140804143748-0-24283" /><!-- wiki: {image: x300_dongle-=jtag.jpg} --></span><br /><br /><p>
JTAG pinout doesn't match silkscreen designation of pin 1 (it's rotated). It also doesn't have VCC pin connected, so you need to supply 5V power via other means (I used PS/2 connector).</p>
<p>
<a href="https://saturn.ffzg.hr/rot13/index.cgi?bus_blaster" title="(88 months)  file BusBlaster-v2.0a1.sch.landscape.pdf http dangerousprototypes.com docs Bus_Blaster_v2_design_ov...">Bus Blaster</a> jtag try:</p>
<pre>
jtag&gt; cable jtagkey vid=0x0403 pid=0x6010 interface=0
Connected to libftd2xx driver.
jtag&gt; detect
IR length: 10
Chain length: 1
Device Id: 00010111000001100100000011011101 (0x170640DD)
  Manufacturer: Altera (0x0DD)
  Part(0):      EPM3064A (0x7064)
  Stepping:     1
  Filename:     /usr/local/share/urjtag/altera/epm3064a/epm3064a

jtag&gt; print chain
 No. Manufacturer              Part                 Stepping Instruction          Register
-------------------------------------------------------------------------------------------------------------------
*  0 Altera                    EPM3064A             1        BYPASS               BYPASS

# IMPORTANT: load signal aliases for this package
jtag&gt; include /usr/local/share/urjtag/altera/epm3064a/t44

# get values of all pins

jtag&gt; instruction SAMPLE/PRELOAD
jtag&gt; shift ir
jtag&gt; shift dr
jtag&gt; dr
010010111010111010010111010010010010111111111010111010
111010010010010111010010010010010010010010010010010010
010010010010010010010010010010010010010010010010010010
010010010010010111010111010010
 (0x0000000000000000000000000000000024924924924975D2)

jtag&gt; print chain
 No. Manufacturer              Part                 Stepping Instruction          Register
-------------------------------------------------------------------------------------------------------------------
*  0 Altera                    EPM3064A             1        SAMPLE/PRELOAD       BSR

jtag&gt; get signal IO2
IO2 = 1
jtag&gt; get signal IO3
IO3 = 1
jtag&gt; get signal IO43
IO43 = 1
jtag&gt; get signal IO44
IO44 = 1

# toggle single pin

jtag&gt; instruction EXTEST
jtag&gt; shift ir

jtag&gt; print chain
 No. Manufacturer              Part                 Stepping Instruction          Register
-------------------------------------------------------------------------------------------------------------------
*  0 Altera                    EPM3064A             1        EXTEST               BSR

jtag&gt; set signal IO10 out 0
jtag&gt; shift dr

# re-read values of all pins

jtag&gt; instruction SAMPLE/PRELOAD
jtag&gt; shift ir
jtag&gt; shift dr
jtag&gt; get signal IO10
IO10 = 0

</pre>
<br /><h2 id="svf_programming">SVF programming</h2>
<pre>
jtag&gt; svf /blue-zfs/FPGA/Altera-x300/x300_dongle/output_files/dongle1.svf stop progress
detail: Parsing     20/520 (  3%)warning: unimplemented mode 'ABSENT' for TRST
detail: Parsing    520/520 (100%)detail: 
detail: Scanned device output matched expected TDO values.
</pre>
<br /><h2 id="vhdl_to_toggle_pins">VHDL to toggle pins</h2>
<p>
Toggle pins on all four sides of CPLD and create additional two images with all one and all zero for easy test where pin is</p>
<span class="nlw_phrase"><a href="https://saturn.ffzg.hr/rot13/index.cgi/dongle1.vhd?action=attachments_download;page_name=x300_dongle;id=20140805185701-0-16161">dongle1.vhd</a><!-- wiki: {file: dongle1.vhd} --></span><br /><br /><p>
Then I connected logic analyzer on pins and tried different svf files (all-0, all-1, left, bottom, right, top) to locate which pin change depending on image loaded. To isolate pins I used EXTEST and toggled pins.</p>
<h2 id="rj45">RJ45</h2>
<span class="nlw_phrase"><img alt="rj45-pins.jpg" src="https://saturn.ffzg.hr/rot13/index.cgi/rj45-pins.jpg?action=attachments_download;page_name=x300_dongle;id=20140802213808-0-17133" /><!-- wiki: {image: rj45-=pins.jpg} --></span> <span class="nlw_phrase"><img alt="Pro050-rj45.png" src="https://saturn.ffzg.hr/rot13/index.cgi/Pro050-rj45.png?action=attachments_download;page_name=x300_dongle;id=20160615100846-0-25787" /><!-- wiki: {image: Pro050-=rj45.png} --></span><br /><br /><table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">pin</td>
<td style="border: 1px solid black;padding: .2em;">pull</td>
<td style="border: 1px solid black;padding: .2em;">cable</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">1</td>
<td style="border: 1px solid black;padding: .2em;"><span style="padding:.5em">&nbsp;</span></td>
<td style="border: 1px solid black;padding: .2em;">GND</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">2</td>
<td style="border: 1px solid black;padding: .2em;">1</td>
<td style="border: 1px solid black;padding: .2em;">VGA?</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">3</td>
<td style="border: 1px solid black;padding: .2em;">0</td>
<td style="border: 1px solid black;padding: .2em;">IO?</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">4</td>
<td style="border: 1px solid black;padding: .2em;">1</td>
<td style="border: 1px solid black;padding: .2em;">VGA?</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">5</td>
<td style="border: 1px solid black;padding: .2em;">0</td>
<td style="border: 1px solid black;padding: .2em;">IO?</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">6</td>
<td style="border: 1px solid black;padding: .2em;">1</td>
<td style="border: 1px solid black;padding: .2em;">VGA?</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">7</td>
<td style="border: 1px solid black;padding: .2em;"><span style="padding:.5em">&nbsp;</span></td>
<td style="border: 1px solid black;padding: .2em;">IO10</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">8</td>
<td style="border: 1px solid black;padding: .2em;"><span style="padding:.5em">&nbsp;</span></td>
<td style="border: 1px solid black;padding: .2em;">5V</td>
</tr>
</table>
<br /><h2 id="ps2">PS2</h2>
<span class="nlw_phrase"><div class="wiki-include-page">
<div class="wiki-include-title"><a href='https://saturn.ffzg.hr/rot13/index.cgi?ps2' >PS2</a> </div>
<div class="wiki-include-content">
<p>
<a target="_blank" title="(external link)" href="http://www.computer-engineering.org/ps2protocol/">http://www.computer-engineering.org/ps2protocol/</a></p>
<table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">female socket</td>
<td style="border: 1px solid black;padding: .2em;">male plug</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;"><span class="nlw_phrase"><img alt="ps2-female-socket.JPG" src="https://saturn.ffzg.hr/rot13/index.cgi/ps2-female-socket.JPG?action=attachments_download;page_name=ps2;id=20140805113214-0-9264" /><!-- wiki: {image: ps2-=female-=socket.JPG} --></span></td>
<td style="border: 1px solid black;padding: .2em;"><span class="nlw_phrase"><img alt="ps2-male-plug.JPG" src="https://saturn.ffzg.hr/rot13/index.cgi/ps2-male-plug.JPG?action=attachments_download;page_name=ps2;id=20140805113203-0-9246" /><!-- wiki: {image: ps2-=male-=plug.JPG} --></span></td>
</tr>
</table>
<br /><p>
6-pin Mini-DIN (PS/2): <br />
1 - Data <br />
2 - Not Implemented <br />
3 - Ground <br />
4 - Vcc (+5V) <br />
5 - Clock <br />
6 - Not Implemented</p>
</div></div><!-- wiki: {include: [PS2]} --></span><br /><br /><p>
Keyboard (left, purple)</p>
<table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">pin</td>
<td style="border: 1px solid black;padding: .2em;">IO</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">1 (data)</td>
<td style="border: 1px solid black;padding: .2em;">IO43</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">5 (clock)</td>
<td style="border: 1px solid black;padding: .2em;">IO44</td>
</tr>
</table>
<br /><p>
Mouse (right, green)</p>
<table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">pin</td>
<td style="border: 1px solid black;padding: .2em;">IO</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">1 (data)</td>
<td style="border: 1px solid black;padding: .2em;">IO34</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">5 (clock)</td>
<td style="border: 1px solid black;padding: .2em;">IO35</td>
</tr>
</table>
<br /><h1 id="audio_jack">Audio jack</h1>
<p>
R2R D2A</p>
<p>
all measurements are done on Hantek 2090 with 500mV/div setting which may account for some accuracy errors</p>
<h2 id="channel_1">channel 1</h2>
<table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">state</td>
<td style="border: 1px solid black;padding: .2em;">min</td>
<td style="border: 1px solid black;padding: .2em;">max</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">off</td>
<td style="border: 1px solid black;padding: .2em;">64.17 mV</td>
<td style="border: 1px solid black;padding: .2em;">95.54 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO23</td>
<td style="border: 1px solid black;padding: .2em;">1.664 V</td>
<td style="border: 1px solid black;padding: .2em;">1.696 V</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO22</td>
<td style="border: 1px solid black;padding: .2em;">864 mv</td>
<td style="border: 1px solid black;padding: .2em;">895 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO21</td>
<td style="border: 1px solid black;padding: .2em;">472 mV</td>
<td style="border: 1px solid black;padding: .2em;">503 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO20</td>
<td style="border: 1px solid black;padding: .2em;">283 mV</td>
<td style="border: 1px solid black;padding: .2em;">299 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO19</td>
<td style="border: 1px solid black;padding: .2em;">189 mv</td>
<td style="border: 1px solid black;padding: .2em;">221 mV</td>
</tr>
</table>
<br /><h2 id="channel_2">channel 2</h2>
<table style="border-collapse: collapse;" class="formatter_table">
<tr>
<td style="border: 1px solid black;padding: .2em;">state</td>
<td style="border: 1px solid black;padding: .2em;">min</td>
<td style="border: 1px solid black;padding: .2em;">max</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">off</td>
<td style="border: 1px solid black;padding: .2em;">3.3</td>
<td style="border: 1px solid black;padding: .2em;">50 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO33</td>
<td style="border: 1px solid black;padding: .2em;">113 mV</td>
<td style="border: 1px solid black;padding: .2em;">144 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO31</td>
<td style="border: 1px solid black;padding: .2em;">207 mV</td>
<td style="border: 1px solid black;padding: .2em;">254 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO28</td>
<td style="border: 1px solid black;padding: .2em;">395 mV</td>
<td style="border: 1px solid black;padding: .2em;">442 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO27</td>
<td style="border: 1px solid black;padding: .2em;">803 mV</td>
<td style="border: 1px solid black;padding: .2em;">850 mV</td>
</tr>
<tr>
<td style="border: 1px solid black;padding: .2em;">IO25</td>
<td style="border: 1px solid black;padding: .2em;">1.603 V</td>
<td style="border: 1px solid black;padding: .2em;">1.635 V</td>
</tr>
</table>
</div>
<hr/><div>Attachments: altera-jtag-pinout.jpg, dongle1.vhd, Pro050-rj45.png, rj45-pins.jpg, x300_dongle-jtag.jpg</div>]]></description>
<author>Dobrica Pavlinu&#x161;i&#x107;</author>
<category>FPGA</category>
<guid isPermaLink="true">https://saturn.ffzg.hr/rot13/index.cgi?x300_dongle</guid>
<pubDate>Wed, 15 Jun 2016 10:11:23 -0000</pubDate>
</item>
</channel>
</rss>