Skip to content
Tim 'mithro' Ansell edited this page Sep 2, 2018 · 8 revisions

Configuring the Atlys

Before loading the gateware you need to set the jumpers correctly and connect the cables correctly.

FIXME: Put something here about the Atlys.

Jumpers Configuration

As the HDMI2USB firmware manipulates the EDID information the following jumpers must be removed;

JP2/SDA (which connects the EDID lines from J1/HDMI IN to JA/HDMI OUT).
JP6 and JP7 (which connects the EDID lines from J3/HDMI IN to J2/HDMI OUT).

Cables

  • Plug board in using PROG port & switch on. If using a VM, ensure the device is passed through.

  • The other UART port is for the controlling the firmware. Recommend plugging this in too so you can use/test the device.


The Digilent Atlys board is the primary development platform for the HDMI2USB project.

Steps for using your Atlys Board as a HDMI2USB device

Step 0 - Buy Atlys Board from Digilent

Step 1 - Customizing the board - Customizing the board is not needed.

Step 2 - Loading Firmware

Step 3 - Testing and Troubleshooting

Step 4 - Set up the Development Environment This step is only required if you need to "unbrick" a Digilent Atlys board which has been permanently programmed as a HDMI2USB device and has failed.





Customizing

First find JP9 next to USB PROG connector. See image board top

Turn over the board and look at the bottom of JP9 See image board bottom

You need to break a track joining the two pads for JP9. Break Track Here

Solder a jumper onto the pads.

After following modifications use the listed process below;

  1. Remove the JP9 jumper.
  2. Turn on the power, the device should appear as an unconfigured Cypress chip
  3. Program the Cypress chip EEPROM loading code.
  4. Download new firmware into the EEPROM.
  5. Put the JP9 jumper back on.
  6. Power cycle the board.

Jumper Configuration

FIXME: Write instructions for the correct jumper configuration of the board.

As the HDMI2USB firmware manipulates the EDID information the following jumpers must be removed;

  • JP2 (which connects the EDID lines from J1/HDMI IN to JA/HDMI OUT).
  • JP6 and JP7 (which connects the EDID lines from J3/HDMI IN to J2/HDMI OUT).

This is described in the Atlys™ Board Reference Manual on "Video Input and Output (HDMI Ports)" (page 13).

Programming the FPGA

If you wish to program the Digilent Atlys outside of the LiteX Build Environment directly you can use;

Digilent Adept Tools

To use this method you must have the Adept 2.XX.XX Utilities installed and Adept 2.XX.XX Runtime installed.

  • Step 1 - Plug the power from your power pack into the POWER port.
  • Step 2 - Plug the micro-USB cable from your computer into the PROG port.
  • Step 3 - Run djtgcfg enum, output should be as follows;
$ djtgcfg enum
No devices found
$
$ djtgcfg enum
Found 1 device(s)

Device: Atlys
    Product Name:   Atlys
    User Name:      Atlys
    Serial Number:  210178440327
$
$ djtgcfg init -d Atlys
Initializing scan chain...
Found Device ID: 44008093

Found 1 device(s):
    Device 0: XC6SLX45
$
$ djtgcfg prog -d Atlys -i 0 -f hdmi2usb.bit
Programming device. Do not touch your board. This may take a few minutes...
Programming succeeded.
$
  • Step 8 - The DONE light near the red RESET button should light up.

Xilinx IMPACT Tool

The Xilinx IMPACT tool is useful if you are developing code in Xilinx ISE, so you can do one click download in the Xilinx Design tools.

IMPACT must be installed from the Xilinx Design Tools suite.

Using the GUI

FIXME: Add content

Using the command line

To avoid having to use the Impact GUI, the following script can be used https://gist.github.com/shenki/5387626

impact -batch download.cmd

Checking Stage 1

Once Stage 1 has been loaded onto the Atlys board, the HDMI matrix will be initialized.

The HDMI output ports should be showing the following graphic:

If you plug a device into the HDMI input ports, it should successfully detect a 1024x768 screen input. You should be able to switch to it via the buttons. See Digilent Atlys Board: Switches, Buttons and Status LEDs page for more information.

Programing the Cypress FX2

Once you complete Stage 2 you be unable to go back to Stage 1 without a power cycle.

You must either use;

or

Firmware Needed - hdmi2usb.hex

In both cases, you will need the hdmi2usb.hex file for this stage. Prebuilt firmware blob can be found in the HDMI2USB-firmware-prebuilt repository.

fxload

WARNING: The version of fxload that comes with Ubuntu/Debian is too old

You can download fxload from https://github.com/pbatard/fxload or you can use a prebuilt version found at the same location as the prebuild hdmi2usb firmware.

  • Step 1 - Check your fxload binary is new enough;

Too old

$ fxload -V
Jun  3 2010 (development)
$

Okay

$ ./fxload -V
Mar 12 2013 (development)
$
  • Step 2 - Load the Cypress chip with the firmware using ./fxload -vvv -t fx2 -D 1443:0007 -I hdmi2usb.hex. This command will appear to return instantly!

fx2loader

You should also be able to use http://www.makestuff.eu/wordpress/software/fx2tools/

./fx2loader --vidpid=1443:0007 hdmi2usb.hex ram

Stage 3

  • Step 1 - Unplug the USB micro-cable connected to PROG. DO NOT DISCONNECT THE POWER
  • Step 2 - Plug the USB micro-cable back into the PROG port.
  • Step 3 - Check your kernel logs via dmesg to see if the device is found. It should look something like;
$ dmesg
....
[150303.829773] usb 2-1.1: config 1 interface 2 altsetting 0 endpoint 0x81 has an invalid bInterval 17, changing to 8
[150303.830657] usb 2-1.1: New USB device found, idVendor=fb9a, idProduct=fb9a
[150303.830668] usb 2-1.1: New USB device strings: Mfr=2, Product=1, SerialNumber=1
[150303.830674] usb 2-1.1: Product: HDMI2USB
[150303.830678] usb 2-1.1: Manufacturer: JANI
[150303.830683] usb 2-1.1: SerialNumber: HDMI2USB
[150303.832191] uvcvideo: Found UVC 1.00 device HDMI2USB (fb9a:fb9a)
[150303.832561] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
[150303.833719] cdc_acm 2-1.1:1.2: This device cannot do calls on its own. It is not a modem.
[150303.833885] cdc_acm 2-1.1:1.2: ttyACM0: USB ACM device
  • Step 4 - Use the device as required.
    • See Viewing for how to view the output on Linux.
    • See Cabling for how to connect the cables to the device.

Extra resources












































Old/Obsolete stuff

This information is copied from the Status LEDs, Push buttons and Jumpers section in the "HDMI2USB - Developers Guide" document. Make sure they are kept in sync!

Buttons

Button Description
BTNU (N4) Selects HDMI 0 as output.
BTNL (P4) Selects HDMI 1 as output.
BTNR (F6) ???
BTND (P3) Selects test pattern as output.
BTNC (F5) If pressed emulates display connection to read edid structure.

Switches

SWITCH DESCRIPTION
SW 0 Turns on/off heart beat pixels
  • Resolution mode - 720p (HDMI mode) or 1024x768 (DVI mode)
  • UVC output mode - RAW or MJPEG

Status LEDs

LED Description
LED0 Indicates HDMI 0 input is connected.
LED1 Indicates HDMI 1 input is connected.
LED2 If on then UVC is MJPEG if off then output is RAW.
LED3 Flab B (Full Flag) of cypress USB device.
LED4 Flab C (Empty Flag) of cypress USB device.
LED5 SLWR signal to cypress USB device.
LED7:6 Combination of LED7 and 6 tells which input source is selected as output to HDMI matrix and USB.

Expected Status

  • LED0 should be on if a HDMI source is connected to HDMI port 0.
  • LED1 should be on if a HDMI source is connected to HDMI port 1.
  • LED2 - ???
  • LED3 should remain off at all times when USB is capturing.
  • LED4 should be DIM when USB is capturing.
  • LED5 - ????

Selected Input Source

LED7, LED6 Selected Input
Off, Off HDMI 0
Off, On HDMI 1
On, Off Reserved (for VGA extension board)
On, On Test pattern

The important parts of the Digilent Atlys boards are;

Top edge of the board

  • PGOOD LED - Green LED right under the power switch.
  • HDMI Output 0 - Labelled J2, found just right of the power switch and left of the audio jacks.
  • HDMI In 0 - Labelled J3, found between the audio and Ethernet port
  • JP8 - Found next to the HDMI In 0
  • JP6 & JP7 - Found just below JP8 next to each other. They are also labelled SCL and SDA, but the labels are quite hard to read.

Right edge of the board

  • JP12 - Found next to the VHDCI connector
  • DONE Led - Found between the RESET switch and the VHDCI connector

Bottom edge of the board

  • HDMI Output 1 - A small HDMI-D connector on the underside of the PCB in the lower left corner.
  • JP3 - Also labelled with 5V0 found next to the PMOD header.
  • JP2 - This header is suppose to be labelled JP2 but is not. It is only labeled SCL and SDA.

Left edge of the board

  • JP5 - Next to that
  • HDMI In 1 - Labeled J1, found under the USB UART bridge
  • JP4 - Roughly between HDMI In 1 and the UART Port
  • UART Port - A micro USB Port labelled UART
  • JP11 - Found just below the full size USB port
  • JP9 - Between the PROG Micro USB Port and the full size USB port
  • PROG Port - A micro USB Port labelled PROG

Notes

  • PGOOD LED - This LED must be lit green for anything to work. If it does not light up green then your Atlys board has probably been damaged.

  • JP12 must have a jumper connecting to either the 3V3 or 2V5 side. If no jumper is connected, the FPGA will not boot. From the Digilent Atlys manual;

Always keep JP12 loaded (either on 3.3V or 2.5V). If JP12 is not loaded, bank 2 of the FPGA is not supplied, and neither are the pull-ups for CCLK, DONE, PROGRAM_B and INIT_B. The FPGA is held in the Reset state, so it is not seen in the JTAG chain, neither can be programmed from the serial FLASH.

  • JP11 is used to disable the FPGA from loading the configuration from the onboard SPI flash. This header may not be populated on your board. During normal operation this should not have a jumper on it. This jumper is only needed when loading the HDMI2USB firmware onto the board permanently for the first time. From the Digilent Atlys manual;

An on-board mode jumper (JP11) selects between JTAG/USB and ROM programming modes. If JP11 is not loaded, the FPGA will automatically configure itself from the ROM. If JP11 is loaded, the FPGA will remain idle after power-on until configured from the JTAG or Serial programming port.

MiSoC Firmware

Computer Connections

  • USB PROG needs to be connected to the capture computer. It is used for programming the FPGA and for getting the Webcam adata.

  • USB UART needs to be connected to the capture computer. It is used for controlling the firmware via the serial control.

HDMI Connections

  • HDMI Out 1 and HDMI In 1 can not be used at the same time reliably (due to the EDID lines being connected). Only use one or the other unless you really understand what you are doing.

  • HDMI Out 1 is an unamplified output. Use a very short cable, like 30cm short.

  • The Atlys board doesn't have control over the hot plug signal meaning it is unable to reset the HDMI port. This means after a config change you will have to unplug and replug the HDMI Inputs or otherwise force a config refresh.

Jumper Configuration

Make sure the jumpers in the Notes section above are set. Then you need the following configuration;

  • JP4 must be connected (connects 5Vs to HDMI In 0).

  • JP8 must be connected (connects 5Vs to HDMI In 1).

  • JP3 must be disconnected (removes 5Vs to HDMI Out 1).

  • JP6 & JP7 must be disconnected (means HDMI In 0 and HDMI Out 0 EDID operate independently.

  • JP2 must be connected (connects EDID to HDMI In 1 and HDMI Out 1).

    • Care must be taken to put the jumpers on JP2 in the right direction. They should be XXXX not XXXX.











































Old stuff

Ports

USB Micro PROG --> Capture Computer

Presenters Laptop --> HDMI Input 0
Capture Computer  --> HDMI Input 1

HDMI Output 0 --> Projector
HDMI Output 1 --> Confidence Monitor

Jumpers

HDMI Connectors

J1: IN J2: Out J3: IN JA: BiDi
Type HDMI Type A HDMI Type A HDMI Type A - HDMI Micro D
Location -
Pin / Signal FPGA Pin FPGA Pin FPGA Pin Pin/Signal FPGA Pin
1: D2+ B12 B8 J16 1: HPD JP3
2: D2_S GND GND GND 2: RES VCCB2
3: D2- A12 A8 J18 3: D2+ N5
4: D1+ B11 C7 L17 4: D2_S GND
5: D1_S GND GND GND 5: D2- P6
6: D1- A11 A7 L18 6: D1+ T4
7: D0+ G9 D8 K17 7: D1_S GND
8: D0_S GND GND GND 8: D1- V4
9: D0- F9 C8 K18 9: D0+ R3
10: Clk+ D11 B6 H17 10: D0_S GND
11: Clk_S GND GND GND 11: D0- T3
12: Clk- C11 A6 H18 12: Clk+ T9
13: CEC NC 0K to Gnd NC 13: Clk_S GND
14: RES NC NC NC 14: Clk- V9
15: SCL C13 D9 M16 15: CEC VCCB2
16: SDA A13 C9 M18 16: Gnd GND
17: Gnd GND GND GND 17: SCL C13[2]
18: 5V JP4[1] 5V JP8[1] 18: SCA A13[2]
19: HPD 1K to 5V NC 1K to 5V 19: 5V JP3
  • [1]: jumper can disconnect Vdd
  • [2]: shared with J1 I2C signals via jumper JP2

For HDMI Input (HDMI Sink)

  • HPD should be pulled high.

  • 5V pin should disconnected.

  • There is some indication that crappy computers use the 5V pin for detection rather than HPD. Hence maybe we need to connect the 5V?

For HDMI Output (HDMI Source)

  • HPD should be pulled low.
  • 5V pin should be connected. The Atlys board includes a USB-UART bridge(Exar XR21V1410) which allows serial communication between FPGA and Host. The driver provided by Exar is outdated and does not work on newer Linux Kernel. Driver compatible with latest linux kernel can be found here.

Download driver

git clone https://github.com/shenki/exar-uart-driver.git

To install first remove old driver. Disconnect the USB-UART if it is already connected.

sudo rmmod cdc-acm
sudo rmmod vizzini
sudo modprobe -r usbserial

Install Drivers

cd exar-uart-driver
sudo modprobe usbserial
sudo insmod ./vizzini.ko

Connect the UART-USB bridge. The device should enumerated as dev/ttyUSBx.

To check whether the driver is successfully installed:

dmesg | grep -i tty

Ouput

......
[10118.569307] vizzini 3-2.3:1.0: ttyUSB0: XR21v14x usb uart device
.....
``` * Please see https://github.com/timvideos/HDMI2USB-misoc-firmware/blob/master/scripts/README.md#prerequisite

<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

<hr>
<hr>
<hr>

# Setting up Adept Tools

These instructions are for setting up Adept tools for usage with Digilent Atlys board and the Xilinx ISE tools.

Download Xilinx ISE. The current version is 14.7 and released on the Oct 23, 2013.

http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html "Full Installer for Linux (TAR/GZIP - 6.09 GB)" MD5 SUM Value: e8065b2ffb411bb74ae32efa475f9817


These instructions are based off of the instructions found at http://lighttomorrow.wordpress.com/2011/12/18/how-to-install-digilent-cable-driver-for-xilinx-design-suite-on-ubuntu-11-10/ and http://wiki.gentoo.org/wiki/Xilinx_USB_JTAG_Programmers#Digilent_Xilinx_USB_JTAG_cable but updated to use the latest Adept information.

digilent.adept.runtime_2.13.1-x86_64 digilent.adept.utilities_2.1.1-x86_64 libCseDigilent_2.5.2-x86_64


```bash
# This assumes that ISE was installed to /opt/Xilinx/
tar -zxvf libCseDigilent_2.5.2-x86_64.tar.gz
cd libCseDigilent_2.5.2-x86_64/ISE14x
sudo mkdir -p /opt/Xilinx/14.4/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent/
sudo cp plugin/* /opt/Xilinx/14.4/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent/

Running IMPACT

. /opt/Xilinx/14.4/ISE_DS/settings64.sh
impact

If you get errors like WARNING:iMPACT - Module windrvr6 is not loaded. Please reinstall the cable drivers. See Answer Record 22648. or WARNING:iMPACT:923 - Can not find cable, check cable setup ! then the Digilent Adept plugin is not been successfully found. Try following the install instructions again.

You should get an image which looks like this;

iMPACT Command Output

Get Device ID

INFO:iMPACT - Current time: 20/04/14 3:03 PM
// *** BATCH CMD : ReadIdcode -p 1 
Maximum TCK operating frequency for this device chain: 0.
Validating chain...
Boundary-scan chain validated successfully.
'1': IDCODE is '01000100000000001000000010010011'
'1': IDCODE is '44008093' (in hex).
'1': : Manufacturer's ID = Xilinx xc6slx45, Version : 4

Get Device Signature/Usercode

INFO:iMPACT - Current time: 20/04/14 3:05 PM
// *** BATCH CMD : ReadUsercode -p 1 
Maximum TCK operating frequency for this device chain: 0.
Validating chain...
Boundary-scan chain validated successfully.
'1': Usercode is 'ffffffff'

Get Device Status

INFO:iMPACT - Current time: 20/04/14 3:05 PM
// *** BATCH CMD : ReadStatusRegister -p 1 
Maximum TCK operating frequency for this device chain: 0.
Validating chain...
Boundary-scan chain validated successfully.
'1': Reading bootsts register contents...
[0] VALID_0 - ERROR OR END OF STARTUP (EOS) DETECTED                       :         1
[1] FALLBACK_0 - FALLBACK RECONFIGURATION ATTEMPT DETECTED                 :         0
[2] RESERVED                                                               :         0
[3] WTO_ERROR_0 - WATCHDOG TIME OUT ERROR                                  :         0
[4] ID_ERROR_0 - FPGA DEVICE IDCODE ERROR                                  :         0
[5] CRC_ERROR_0 - CYCLIC REDUNDANCY CHECK (CRC) ERROR                      :         0
[6] VALID_1 - ERROR OR END OF STARTUP (EOS) DETECTED                       :         0
[7] FALLBACK_1 - FALLBACK RECONFIGURATION ATTEMPT DETECTED                 :         0
[8] RESERVED                                                               :         0
[9] WTO_ERROR_1 - WATCHDOG TIME OUT ERROR                                  :         0
[10] ID_ERROR_1 - FPGA DEVICE IDCODE ERROR                                 :         0
[11] CRC_ERROR_1 - CYCLIC REDUNDANCY CHECK (CRC) ERROR                     :         0
[12] STRIKE CNT - STRIKE COUNT FOR FALLBACK ATTEMPTS                       :         0
[13] STRIKE_CNT - STRIKE COUNT FOR FALLBACK ATTEMPTS                       :         0
[14] STRIKE_CNT - STRIKE COUNT FOR FALLBACK ATTEMPTS                       :         0
[15] STRIKE_CNT - STRIKE COUNT FOR FALLBACK ATTEMPTS                       :         0
'1': Reading status register contents...
[0] CRC ERROR                                                              :         0
[1] IDCODE ERROR                                                           :         0
[2] DCM LOCK STATUS                                                        :         1
[3] GTS_CFG_B STATUS                                                       :         1
[4] GWE STATUS                                                             :         1
[5] GHIGH STATUS                                                           :         1
[6] DECRYPTION ERROR                                                       :         0
[7] DECRYPTOR ENABLE                                                       :         0
[8] HSWAPEN PIN                                                            :         1
[9] MODE PIN M[0]                                                          :         1
[10] MODE PIN M[1]                                                         :         1
[11] RESERVED                                                              :         0
[12] INIT_B PIN                                                            :         1
[13] DONE PIN                                                              :         1
[14] SUSPEND STATUS                                                        :         0
[15] FALLBACK STATUS                                                       :         0

Get Device DNA

INFO:iMPACT - Current time: 20/04/14 3:06 PM
// *** BATCH CMD : readdna -p 1 
Maximum TCK operating frequency for this device chain: 0.
Validating chain...
Boundary-scan chain validated successfully.
'1': DNA = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

The device DNA should be 57 bits long. You can use Python to convert the binary number to hexadecimal as follows;

>>> hex(int('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 2))
'0x111111111111111'
Clone this wiki locally