Using $5 USB3 HDMI capture sticks based on the MacroSilicon MS2130, this project allows to stream out up to 75 MByte/s of real time data from an RP2350 (with overclocking) to a host computer with USB3. For more information and the host library, see the main repository and the talk at OsmoDevcon '24.
Make sure you have the latest version of the pico-sdk installed together with an appropriate compiler. You should be able to build the pico-examples.
To build hsdaoh-rp2350:
git clone https://github.com/steve-m/hsdaoh-rp2350.git
mkdir hsdaoh-rp2350/build
cd hsdaoh-rp2350/build
export PICO_SDK_PATH=/<path-to>/pico-sdk
cmake -DPICO_PLATFORM=rp2350 -DPICO_BOARD=pico2 ../
make -j 8
After the build succeeds you can copy the resulting *.uf2 file of the application you want to run to the board.
Apart from the Pico2 with the Pico-DVI-Sock, it also should work with the Adafruit Feather RP2350 with HSTX Port, but so far only the Pico2 was tested.
The repository contains a library - libpicohsdaoh - which implements the main functionality. It reads the data from a ringbuffer, and streams it out via the HSTX port. In addition to that, the apps folder contains a couple of example applications:
This application uses the PIO to generate a 16-bit counter value which is written to a DMA ringbuffer, which is then streamed out via hsdaoh. The counter can be verified using the hsdaoh_test host application.
Sample 16 GPIOs with the PIO and transfer the data, can be used as a 16 bit @ 32 MHz logic analyzer, or be adapted to 8 bit @ 64 MHz and so on. The IOs used for input are GP0-11, GP20-22 and GP26.
The data from the internal ADC is streamed out via USB. Default configuration is overclocking the ADC to 3.33 MS/s. Using the USB PLL and overvolting beyond VREG_VOLTAGE_MAX, up to 7.9 MS/s can be achieved.
This app contains a PIO program that reads the data from a 12-bit ADC connected to GP0-GP11, outputs the ADC clock on GP20, and packs the 12 bit samples to 16-bit words to achieve maximum throughput. It is meant to be used with cheap AD9226 ADC boards. The default setting is overclocking the RP2350 to 320 MHz and driving the ADC with a 40 MHz clock. With higher overclocking up to 50.25 MHz ADC clock can be used.
This can be used for sampling the IF of a tuner/downcoverter, as a direct-sampling HF SDR, or for capturing a video signal e.g. with vhsdecode. For the vhsdecode use-case, there is also an adapter PCB.
hsdaoh-rp2350 is developed by Steve Markgraf, and is based on the dvi_out_hstx_encoder example, and code by Shuichi Takano implementing the HDMI data island encoding, required to send HDMI info frames.