timvideos / video-signal-booster-board

Apache License 2.0
3 stars 3 forks source link

Video Booster Board

.. image:: ./img/vsb-board.png

Overview:

This repository contains a KiCad PCB project for an open hardware board design that allows to improve the quality of HDMI video signals transmitted over long cables.

Key features:

Mechanical layout and dimensions

The board has been mechanically optimised for usage with the Numato Opsis <https://hdmi2usb.tv/numato-opsis/>_ open video capture device. It is possible to use it with different platforms using HDMI extender cables.

.. image:: ./img/layout.png

It follows the data flow diagram presented below:

.. image:: ./img/vsb-data-flow.svg

Getting Started

Please refer to KiCad schematic files for more information regarding hardware functionalities implemented in the design. The PCB layout has been defined with a 4-layer stackup. Please check the geometry of differential traces implemented in the design with stackup offered by PCB vendor for optimal impedance match of HDMI traces. There is a BOM document generated from the schematics and shared in this repository. Please short the J5,J7,J8,J12 solder jumpers on the bottom side of the PCB. This will relay the EDID signals on both HDMI channels from input to output. Short the J11,J4 jumpers if you plan to experiment with the provided example MCU firmware. This will make the on-board MCU accessible on EDID bus driven from J2 HDMI input connector. Please check the schematics and software codebase for any other jumper configuration.

Example firmware

The EFM32 MCU used in the design comes with a factory programmed AN0042 bootloader. In order to make the MCU compatible with the provided example firmware it is advisable to replace the default bootloader with Toboot <https://github.com/im-tomu/toboot> over SWD interface using OpenOCD <http://openocd.org/>. The SWD signals from the MCU are exposed on test pads marked with IO and CLK on the bottom side of the Video Booster Board. Additionally there are test pads with system ground and power supply exposed next to them.

To upload the Toboot bootloader, please follow this instruction <https://github.com/im-tomu/toboot/tree/master/openocd>_. Be aware that the provided flashing instruction was originally created for a different hardware platform so the SWD connection wiring differs a little.

There is an example-firmware folder included in this repository, which contains a sample firmware driven by the RTOS derived from the Zephyr project <https://www.zephyrproject.org/>_. The firmware makes the on-board EFM32 MCU act as an EDID slave for the transmitting device.

In order to build the example firmware please use the following commands::

 git clone https://github.com/antmicro/video-signal-booster-board
 cd video-signal-booster-board
 git submodule update --init --recursive
 cd example-firmware      
 python3 -m pip install -r zephyr/scripts/requirements.txt                                    
 wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.3/zephyr-sdk-0.10.3-setup.run
 chmod +x zephyr-sdk-0.10.3-setup.run                                  
 ./zephyr-sdk-0.10.3-setup.run -- -d <zephyr_installation_path>                      
 export ZEPHYR_TOOLCHAIN_VARIANT=zephyr                                
 export ZEPHYR_SDK_INSTALL_DIR=<zephyr_installation_path>
 source zephyr/zephyr-env.sh
 west init -l zephyr
 west update
 make

Once the firmware is compiled, connect the micro USB cable to the Video Booster Board and upload the firmware using the following command::

 dfu-util -d 1209:70b1 -D build/zephyr/zephyr.bin

Please note that in this setup the firmware doesn't stick permanently. After a power cycle a bootloader will start again. This simplifies the developing process.

The example firmware makes the MCU on Video Booster Board accessible on I2C/EDID bus slave device under the address of 0x3a (7-bit notation). It's possible to test the I2C/EDID communication by connecting an I2C master device to TX source HDMI connector (J2). The example firmware makes MCU offer a single 8-bit configuration register. Two least significant bits of this register control the states of the TX_EQ0 and TX_EQ1 signals that define the equalization settings of U3 HDMI level shifter. The states of those signals are also displayed on D8 D9 LEDs installed on board.

A sample Python code that would drive the MCU over I2C bus is::

 python
 import smbus
 bus = smbus.SMBus(<i2c_bus_number>)
 bus.write_byte_data(0x3a, 0x00, 0x03)

3D-printable enclosure

There is also a 3D-printable enclosure available in the 3d-models directory. The enclosure allows the electronics to be covered and attaches the Video Booster Board to the Numato board installed in a typical thin mini-ITX chassis.