pmsdr, pmsdr_dyn - Linux PMSDR 2.0/2.1 control program


pmsdr [-h] [-u port] [-N device number] [-B USB bus] [-l]


This software manages an PMSDR receiver hardware version 2.0 and 2.1 on *nix operating systems. As per the current state of the development (4Q 2010) the PMSDR doesn't have any A/D conversion capability, therefore the availability of an audio card with duplex capability is mandatory.

As default, pmsdr try to listen for commands on the FIFO /tmp/PMSDRcommands. This is useful if pmsdr is used together with the especially crafted sdr-shell found in

If the above FIFO doesn't exist, pmsdr fall back to interactive on standard input/output, anyway useful for test.

As provided pmsdr is not able to connect to hardware, unless you start owning superuser privileges. Please carefully read the README file to learn how setup udev subsystem to avoid that. Similar considerations apply for the firmware upgrades.


-h display a short help text

-l list all USB devices, PMSDR are shown with asterisk aside.

-u listen for commands on udp port specified. The argument is a short integer (1-65535). Please remeber that using port < 1024 requires super users privilegs.

If run without options try to open the first PMSDR hardware found on USB interfaces.

-B uses the first PMSDR found on nth USB bus

-N uses the nth PMSDR device (the device number can be found using the -l option)


Try to link to the first device found:


Link to the third device and listen for commands at the port 12345:

          pmsdr -N3 -u12345


pmsdr returns a zero exist status if it succeeds to open the hardware. Non zero is returned in case of failure.


f frequency

 set QSD receiver frequency (in Hertz); the value must be in (0.1-55MHz) range

filter n set the receiver filter according to the following table:

f3 frequency set QSD third harmonic receiver frequency (in Hertz); the value must be in (0,3-165 MHz) range

fd frequency set the downconverter LO frequency (in Hertz); the value must be in 10-810 MHz range

qsdbias bias set the QSD mixer bias level, 512 (default), 346-692 (interval allowed)

qsdmute (on|off) mute the QSD receiver

memf frequency set the frequency in not volatile memory in receiver

dfilter n set the down converter filter according to the following table:

memf frequency store initial frequency into PMSDR EEPROM

memf3 frequency store initial third harmonic frequency into PMSDR EEPROM

rmemf restore frequency from PMSDR EEPROM

quit terminate the current process

plcd x-coord y-coord message_text print the message text at X,Y coord on the LCD

ifgain gain for compatibility with old hardware, not anymore apply for current 2.1 hardware


On the first time, it is better compile getting the sources from tarball.

Download the source tarball from Sourceforge:


(Anyway check, on the SourceForge project page, that the above package is the more recent stable one)

Extract sources:

 tar -zxvf pmsdr-2.4.1.tar.gz
Once you have the software sources, please refer to README files for more detailed instructions.

For anyone interested to contribute, this software is available on SourceForge SVN repository at the following URL:

You can do a checkout of whole repository with the following command:

svn co pmsdr

For stable release please look on main SourceForge page or in /tags directory. Please keep in mind that /trunk might have in unpredictable results because it is used for intermediate development release.


Install libusb 0.1.x and wget:

sudo apt-get install libusb-0.1-4 libusb-dev wget

Download and compile the fsusb package:

 tar -zxvf fsusb-0.1.11-2.tar.gz
 cd fsusb-0.1.11-2

Download and unzip the firmware file from Martin' site:


You must have the .hex file into the current directory:

 ls -l *.hex
 -rw-r--r-- 1 andrew andrew 93031 2010-02-14 21:53 PMSDR_V21r7.hex

Double check the file length of file you get after unzip. If it is not equal to that shown above, repeat the procedure !

Now unmount the cover of the PMSDR box and link your PMSDR to USB interface. Please be careful when the box cover is removed: don't touch the internal components when the circuits is powered.

Look behind the USB connector and locate the two push buttons S1 and S2: they are marked on the silkscreen too.

Wait until the display shows the usual messages and the green LED turn on, press both the buttons labeled S1 and S2; they are located into the lower left corner of PCB just behind the USB connector.

The display will be erased: release the S1 button and, after one second, the S2 button. When you release the S1 button the red LED will blink shortly. When you release the S2 button the red LED will light steady.

Now the PMSDR is in bootloader mode with both green LED and red LED turned on. Moreover the PMSDR has renumbered on the USB bus: the VID:PID is now changed as follows:

 $ lsusb
 Bus 003 Device 022: ID 04d8:000b Microchip Technology, Inc.

Note that the PID must now read as 000b instead of 000c.

The next step requires you run the fsusb program. Please do not detach the USB cable while the loader program is running !!!

 $ sudo ./fsusb PMSDR_V21r7.hex
 Locating USB Microchip(tm) PICDEM-FS USB(tm) (vendor 0x04d8/product 0x000b)
 Found USB PICDEM-FS USB as device '022' on USB bus 003
 Communication established.  Onboard firmware version is 1.0
 Writing program memory successful
 Program memory validated

Please ignore the message says that firmware version is 1.0: it refers to the bootloader protocol and not to PMSDR firmware. The programming lasts about 30 seconds: when the fsusb program ends you have to reset the PMSDR to recover the normal operation. Press again the S1 button and the display will show


on the second row.


Martin Pernter IW3AUT, Linux porting by Andrea Montefusco IW0HDV


The main PMSDR site from Martin IW3AUT:

Patrick Kulle, DH2SPK wrote an excellent HowTo's for get working PMSDR on Linux with DttSP and sdr-shell: