Showing posts with label Firmware Update. Show all posts
Showing posts with label Firmware Update. Show all posts

Monday, June 8, 2026

Breaking My Own Golden Rule (And How I Saved My uSDX+)

In my previous post, A Brick Becomes a Diamond, I confessed my absolute dread of firmware updates. I outlined my tried-and-tested workspace mantra: "If it ain't broke, don't fix it!" Applying the version 3.0 update to my MicroPA50 amplifier was a rare exception because that unit was genuinely broken from the factory, constantly rebooting on oversensitive SWR spikes. The update transformed that brick of junk into a rock-solid, 40-watt diamond.

Flush with that victory, I returned to my bench feeling a bit too brave. I looked over at my Chinese clone uSDX+ "White Buttons" QRP transceiver. It was sitting there, doing perfectly fine. Did it have a few quirks? Sure. But it didn't need surgery.

Naturally, I broke my own rule anyway.

I decided I wanted to upgrade the code to add a few custom Morse code CQ messages. It sounded harmless. Fast forward several hours, and I had successfully trapped myself in a cascading nightmare of software locks, ghost buffers, a backward tuning knob, and a radio that was transmitting on completely incorrect frequencies.

If you have ever let workspace hubris get the best of you, here is the non-technical story of how I battled the uSDX+ firmware—and how a single line of code saved the day.


Hurdle 1: The Modern Computer vs. The Unsigned Driver

To send the new code to the radio, I used a standard USBasp V3 hardware programmer. Modern Windows 11 has incredibly strict security rules regarding unrecognized hardware, and the standard USBasp driver files are essentially digital antiques. Windows immediately blocked the programmer, refusing to acknowledge its existence.

  • How it was navigated: I had to bypass the normal Windows infrastructure using a modern utility called Zadig. Zadig wraps the legacy file in a clean, digitally signed security capsule. Windows finally stopped panicking, and the flashing tool successfully established a link.

Hurdle 2: The Bluffing Error Message

The moment I hit the upload button, the software log screamed in bright red text: Error: cannot set sck period; please check for usbasp firmware update. It looked like a catastrophic failure.

  • How it was navigated: This turned out to be a total bluff by the programmer clone. After locating the physical JP3 (Slow SCK) jumper on the USBasp board and bridging it to slow down the data speed, I re-ran the program. The red error message still appeared, but the data stream pushed right past it, completing a 100% byte-for-byte verified flash. Lesson learned: sometimes you just have to ignore the warning text.

Hurdle 3: The Persistent Memory Lock

I booted up the radio, eager to see my changes. My new callsign showed up flawlessly on screen (MY_CALLSIGN lives in the main Flash memory), but my old Morse code messages were still sitting there, completely untouched. Even worse, I realized the tuning was completely off. The radio now assumed it had a standard 27 MHz system clock tracking profile, but my specific "White Buttons" clone board houses a physical 26 MHz crystal.

Because the software math and the physical hardware crystal were out of sync, the internal VFO math completely broke down. The radio interface looked normal, but the actual tuned operating frequency was wildly incorrect on every band. I tried manually clearing the memory using command-line commands and hardware erase flags, but the radio completely ignored them—reverting to its old 27 MHz data blocks on every single reboot.

Hurdle 4: Walking Backwards and Overridden Variables

Before I could even tackle the clock, I ran into another headache: spinning the main tuning knob moved the frequency in the completely wrong direction. The rotary encoder was reversed. I opened up the massive .ino file and changed a configuration constant (like SWAP_ROTARY) to make the knob turn the right way.

Next, I tackled the frequency issue. I used the search bar, located every single active occurrence of 27000000 (the clock frequency constant), and meticulously updated them all to 26000000.

uSDX is shown connected to a laptop via a usbASP dongle for flashing the firmware


I compiled the code and flashed it again. The result? Total disappointment. The knob turned correctly, but the radio booted right back into its broken 27 MHz loop, the tuned frequency remained incorrect, and the old Morse code texts remained. Updating the base constants in the code text was completely useless. The uSDX core engine is built to protect the system profile. On boot, if it detects any pre-existing structural initialization signatures, it completely ignores the user’s code edits and restores the old 27 MHz data framework over your changes anyway.

The Ultimate Solution: Tactical Interception

The breakthrough happened when I dug deep into the code and found the exact line where the system menu binds the clock parameters to the chip:

case SIFXTAL: paramAction(action, si5351.fxtal, ...)

This proved that the uSDX engine forces its built-in memory blocks to load after the initial variables are parsed, completely undoing any user edits right at startup.

Instead of fighting the radio’s complex formatting layout loops, I decided to use a bit of tactical code interception. I went to the absolute last line of the radio's startup sequence (void setup()), right before the code exits to hand control over to the live tuning screen. I injected a single, unyielding line of absolute code:

si5351.fxtal = 26000000;

By placing it at the absolute end, I let the radio finish its messy, stubborn startup loops first. Then, a millisecond before the radio actually woke up, my line stepped in, overrode the memory blocks, and forced the true 26 MHz clock frequency directly into the VFO processor.

The result was instantaneous. The radio booted up perfectly calibrated, and the VFO math was flawlessly restored—bringing the tuned operating frequencies back into perfect alignment across all bands.


The Virtue of Procrastination

When I updated my MicroPA50 amplifier, I learned that a little patience pays off, and that sometimes the next firmware release fixes the bugs you were planning to solder away.

But with the uSDX+ clone, I learned a different lesson: if you break your golden workbench rule and try to fix something that isn't broken, you better be ready to dig through thousands of lines of open-source math to find your way back out!

My portable field stack—the Elecraft KX-3, the MicroPA50, and the newly recalibrated uSDX+—is officially stable, accurate, and ready for action. But the next time I get the urge to touch a perfectly smooth piece of gear? I am leaving the USBasp in the drawer, turning off the soldering iron, and going out for a walk instead.

Monday, June 1, 2026

A brick becomes a diamond

 I dread firmware/software updates. Now I know they're necessary evil; but still that does not ease my tensions when embarking on an upgrade. One never knows what the effect of "fixes" may be. They could end up breaking your customizations that are running smoothly; or in worst cases can "upgrade" features by removing them, because some business overlord deemed that the formerly free feature now needs to go premium. My approach to updates/upgrades has been the tried and tested mantra: "If it ain't broke, don't fix it!"

But broke does not do effective justice to the Micro PA50+ portable amplifier that I had added to my collection. I had bought the amp to give my field activations a little more oomph on especially bad propagation days. I was hoping that it would complement my KX-3 CW activations well. However, after I bought it and tested it, I was in for serious disappointment. The power amplifier constantly rebooted or entered into protection mode making it unusable.  I could not rely on this amplifier in the field for serious activations.

After a thorough research, I found out that such issues were common among Micro PA50+. The root cause was found to be the overly sensitive SWR measurement by the amplifier. Some of the common fixes were to change the resistance of one of the legs of the SWR bridge to "trick" the amp into measuring SWR correctly. Additional fixes included using a capacitor to smooth out the instantaneous SWR spikes. Life got busy and I put off these mods for the time being. The power amplifier was relegated to my pile of "junk" equipment.

After several months, I found the time again to work on this issue. As I was scouring the web for authoritative fixes, I found a few mentions about the new 3.0 version of the firmware that as the "bee's knees". The few folks who installed it recommended that this solved "all" the problems. 

I had a "broken" Micro PA50+ power amplifier that exhibited all the symptoms that the update claimed to fix. If this didn't justify the application of the update nothing else would. So I downloaded the new firmware and proceeded to apply it.

Note that there are several variants of this amplifier around. Therefore, I am not providing links for the upgrade process here. You should be able to search and find the process for your particular variant. But in effect, in addition to the latest firmware you will use a USB Serial adapter and software that will flash the firmware. You would need to hook up about 4 or 5 pins from the serial adapter on to a header on your power amplifier

I ended up using  AVRDUDESS  for flashing the firmware. It provides a simple UI which allows you to select the COM port [corresponding to the USB serial adapter], the firmware file and the board type for flashing. Once I double checked all the values, I hit the upload firmware button. The process took about 15 seconds and went smoothly. 

I breathed a huge sigh of relief when the amp powered on again after the application of the firmware. The boot flash screen confirmed that the firmware version was indeed upgraded. Now it was time to put the amp through its paces.

Micro PA50+ driven by uSDX+ QRP transceiver. N7DDC tuner is used for the antenna
Testing the Micro PA50+. Firmware 3.0 indeed seems to have made it more stable

For testing the update I drove the amp using uSDX+ QRP radio paired with N7DDC tuner.  The drive power varied from 1.8W to about 2.5W depending on the band. The Micro PA50+ was able to put out 40-50 watts across most bands. The difference was night and day. The Micro PA50+ was a transformed beast. It was rock solid during my tests. Its power and SWR measurements were now closer and seemed more accurate. It did suffer from a few reboots. It looks like it still suffers from instantaneous SWR spikes in CW call sequences. I was able to eliminate most such reboots by increasing the CW delay to about 500ms. This does mean that you may occasionally miss the first one or two characters of a CW response. However, I believe this is acceptable for field operations. My confidence in the amplifier was enhanced to a such an extent that I took this out for my field activation on 06/01. It performed almost flawlessly there. 

Micro PA50+ power amplifier being used with Elecraft KX-3  during a  POTA activation
Field test of the Micro PA50+

There were one or two reboots in over 90 minutes of operation. I probably can overcome this by increasing the CW delay or it may very well be that I would still need the capacitor fix to smoothen out the instantaneous spikes. But if I learned the lesson right, perhaps I should procrastinate. The next firmware could very well address that issue as well. Who said that procrastination is not a virtue!

Playing the field

  I t was field day eve. It was the Friday and I did not have any specific plans for the ARRL Field day 2026. I was performing a regular sca...