Bug #11976
openFrequencies programmed with chirp have frequency offset in TX
0%
Description
I was programming a Yaesu FT1DR HT with CHIRP. I had just done a “microprocessor reset” on the HT, clearing all memories, so this was “starting from scratch”.
I expected the HT to transmit on the frequencies that I programmed it for.
Instead, several of the frequencies are transmitting on frequencies lower than I had programmed it for, as measured on an SDR waterfall (which has been tested to be accurate with several other sources).
Dial Mhz Measured Mhz Error, kHz¶
146.520 146.519 -1
146.580 146.575 -5
147.480 147.475 -5
147.560 147.556 -4
An error of 5kHz is enough to severely impact readability. It imparts a rough distortion quality to the audio.
If I set the frequency directly on the HT in VFO mode, it transmits accurately on the set frequency. I can also program memories using the HT's own interface, and it transmits accurately on them. It's only when setting frequencies in CHIRP and uploading them to the radio that it transmits off-frequency.
See also issue: https://chirpmyradio.com/issues/1735
Bug #1735 was for the Yaesu VX-8, and it seems to be fixed now. But during troubleshooting, I also checked the frequencies that I had programmed into a VX-8 about 10 years ago with CHIRP (so, before bug #1735 had been fixed), and they had IDENTICAL frequency errors to what the FT1DR is showing. So it may be a similar underlying issue.
Files
Updated by Leigh Marble about 2 months ago
- File config.txt config.txt added
- File Yaesu_FT-1D_blank_test_new_entries.img Yaesu_FT-1D_blank_test_new_entries.img added
- File macos_system_info.txt macos_system_info.txt added
- File debug_log.txt debug_log.txt added
[Uploaded from CHIRP next-20250509]
Updated by Dan Smith about 2 months ago
So, I was not able to reproduce this with an FT3DR (which is the exact same driver and memory map, but obviously some internal differences in the radio itself).
That said, I did find one "unknown" bit that changed when I programmed a channel with chirp vs. the radio itself. This doesn't seem to have any effect on my FT3DR, but it's similar to the one from the vx8 example you dug up. Please try the attached module using LoadingTestModules. You need write a new memory with chirp for this to take effect (or edit a current one in some meaningful way). Just using this to upload won't be enough.
If it doesn't work, please attach an image with two identical memories, one written with chirp and one from the radio itself so I can see if the FT1D is setting other unknown bits.
Also, note that most Yaesu radios (very unfortunately) including this one don't really wipe much when you do a "reset". All your old channels are still in the memory of the radio, just marked as deleted. It makes it very difficult to ever get a clean slate with these. One of the many reasons I avoid them when possible :/
Updated by Leigh Marble about 2 months ago
OK, I got to try the uploading process again, with the test module running. Unfortunately seems to be the same results as before. I tried 3 uploads in a row:
- I started with my saved CHIRP file from last time, added a couple memories in CHIRP, and uploaded it to the radio
- I did a radio reset, then uploaded the same CHIRP file to the radio
- I added a couple more memories in CHIRP, and uploaded the file to radio
I will upload the image with the two identical memories as requested soon...
Updated by Leigh Marble about 2 months ago
Dan Smith wrote in #note-2:
If it doesn't work, please attach an image with two identical memories, one written with chirp and one from the radio itself so I can see if the FT1D is setting other unknown bits.
When creating this CHIRP image, should I have the Test Module loaded?
Updated by Dan Smith about 2 months ago
It doesn't really matter (I just need to know if loaded or not), but for simplicity, I'd say don't have it loaded, just use the clean version.
Updated by Leigh Marble about 2 months ago
OK, I ran a series of radio downloads and uploads, and captured an image at 4 different stages. (Image files are named numerically to keep them in order.)
Yaesu_FT-1D_01_reset.img
Yaesu_FT-1D_02_radio_programmed_mem1.img
Yaesu_FT-1D_03_CHIRP_programmed_mem2.img
Yaesu_FT-1D_04_CHIRP_programmed_round_trip.img
Stage | Desc |
---|---|
01 | Did a "microprocessor reset" on the radio, and downloaded to CHIRP |
02 | Saved memory 1 on the radio (overwrote the default memory 1), and downloaded to CHIRP |
03 | Added memory 2 in CHIRP, with identical frequency as memory 1 |
04 | Uploaded the two-memory image to radio, and then downloaded back to CHIRP |
Updated by Leigh Marble about 2 months ago
PS: And when all that capturing of images was done, I verified again that the radio-programmed memory was transmitting correctly at 146.580, while the CHIRP-programmed memory was transmitting at 146.575, even though the radio display shows 146.580.
Updated by Dan Smith about 2 months ago
Please, if we need to do this again, don't zip up the images. It makes a lot of work for me to grab them out compared to bare attachments. I know the log was too big and had to be zipped, but no need to do that for images.
Also, image 4 is not necessary and image 1 is not important either. As I mentioned, the radio doesn't actually reset anything so the image isn't actually clean like you might think. Yaesus are terrible at that.
There are a number of differences between your radio-saved channel and the chirp one. Attached is a new module to try which makes one of those changes that looks more obvious. Please try and report back. Same rules apply, it only affects newly created or edited memories - an upload is not enough.
Updated by Leigh Marble about 1 month ago
Hey, sorry then about the zip file. I thought it would help to ensure that the 4 files were grouped together. I'll just do raw uploads in the future.
I loaded the new module in CHIRP, downloaded the image from the radio (still had the 2 memory slots from before), added a new (identical) memory entry in CHIRP, then uploaded that to the radio.
The result was unfortunately the same – the CHIRP-programmed memory slots are transmitting at 146.575 instead of 146.580.
If I misunderstood part of the test procedure, I'd be happy to redo it.
Updated by Leigh Marble about 1 month ago
Per your other comment about the 4 images I previously uploaded: I am surprised to hear that image 4 is not helpful. A comparison between image 3 and image 4 shows about a dozen bytes are different between them. Shouldn't a simple "round trip" (upload, download) produce identical images? Clearly you know the issues far better than I do, so there's likely a good reason why that's not the case.
Updated by Dan Smith about 1 month ago
Hey, sorry then about the zip file. I thought it would help to ensure that the 4 files were grouped together. I'll just do raw uploads in the future.
No worries, they're grouped by the comment in which you upload them and it's easier to process them raw.
I loaded the new module in CHIRP, downloaded the image from the radio (still had the 2 memory slots from before), added a new (identical) memory entry in CHIRP, then uploaded that to the radio.
The result was unfortunately the same – the CHIRP-programmed memory slots are transmitting at 146.575 instead of 146.580.
Okay, probably needs to wait for someone who has this radio to try to reproduce it. I would expect my FT3DR to be identical since it is otherwise the same, but I dunno.
Per your other comment about the 4 images I previously uploaded: I am surprised to hear that image 4 is not helpful. A comparison between image 3 and image 4 shows about a dozen bytes are different between them. Shouldn't a simple "round trip" (upload, download) produce identical images? Clearly you know the issues far better than I do, so there's likely a good reason why that's not the case.
CHIRP writes some metadata to each image, so that will appear changed despite the actual radio memory contents being identical. You can't just checksum or bindiff it and expect it to be identical at a file level.
Updated by Alexandre J. Raymond about 1 month ago
- File Yaesu_FT-1D_03_test1.img added
- File clipboard-202505291632-gqpsw.png clipboard-202505291632-gqpsw.png added
Our of curiosity, could you try the attached image?
I looked at Yaesu_FT-1D_03_CHIRP_programmed_mem2.img, and there are some unknown settings being set in memory 2 (CHIRP config) that aren't set in memory 1 (radio config).
Specifically, the first byte contains things such as clock_shift. It looks like a good target to experiment with.
u8 unknown0:2,
mode_alt:1, // mode for FTM-3200D
clock_shift:1,
unknown1:4;
I've manually set that byte to 00 in Yaesu_FT-1D_03_CHIRP_programmed_mem2.img:
Could you try memory 2, to see if it makes a difference?
Updated by Dan Smith about 1 month ago
Alexandre, did you test that change with a real radio? Yaesus are very fragile compared to almost all other brands and do NOT reset all their memories when you do a factory reset (which is inexcusable). Just FYI to be careful making random bit flips and asking people to blow that into their expensive radios...
Updated by Alexandre J. Raymond about 1 month ago
Hi Dan,
I don't have this exact radio to test my change, no. I did try to be as thorough as possible, however, before suggesting this.
Here was my process:
- I compared the two files provided by Leigh (Yaesu_FT-1D_02_radio_programmed_mem1.img vs Yaesu_FT-1D_02_radio_programmed_mem2.img)
There are two differences:
- Memory 2 goes from used=0;valid=0 (byte==00h) to used=1;valid=1 (byte==03h) at address 0x280B in struct flagslot flag[]
- Memory configuration 2 is changed at addresses starting at 0x2D6A (32 bytes per memory configuration)
In Yaesu_FT-1D_02_radio_programmed_mem2.img, I compared memory configurations 1 (programmed via radio) and 2 (programmed via CHIRP):
Radio (memory 1) - 0000 1465 80c0 0000 ffff ffff ffff ffff ffff ffff ffff ffff 0006 000c 000d 0018
CHIRP (memory 2) - 0500 1465 80c0 0000 ffff ffff ffff ffff ffff ffff ffff ffff 0000 0008 0000 0000
^ ^ ^ ^ ^
I then decompiled FT1D_ADMS-6_EXP.zip from Yaesu's web site, and analyzed the code pertaining to the memory configuration set by CHIRP. The values set by CHIRP that differ from what the radio sets are:
- Byte 0 (00h vs 05h): bit 0-1 are for RecvRefFreq, bits 2-3 are for SendRefFreq, bit 4 is for ClkSeft, bit 5 is HalfDev
- Byte 25 (06h vs 00h): middle byte of BCD SeftSendFreq
- Byte 27 (0Dh vs 00h): ToneFreq
- Byte 29 (0Dh vs 00h): bits 0-4 are for PRFreq and bit 5-7 are for DcsCodeRev
- Byte 31 (18h vs 00h): bits 0-2 are for Bell, bit 5 is for Att, bit 7 is for RadioRecv
Since Byte 0 is set to 0 by the radio (in memory configuration 1), and to whatever was in the memory by CHIRP (in memory configuration 2), it seemed like trying to set it to 0 (setting SendRefFreq and RecvRefFreq to 0 like the radio does) would be reasonable.
Since you have way more experience then I do when it comes to these radios, I will follow your advice and take down the test file. Maybe somebody down the line can do something with this analysis.
Updated by Alexandre J. Raymond about 1 month ago
- File deleted (
Yaesu_FT-1D_03_test1.img)
Updated by Dan Smith about 1 month ago
I understand the logic (even without you explaining) I'm just telling you I tend to be much more conservative with those suggestions on Yaesus because they're so terribly fragile. I was testing my changes with an FT3DR (which is not exact, but at least shares the same memory map) and a few bits in the memory field that were already mapped as potentially relevant. I didn't go on to the rest of the unknown bits because I was venturing out of my comfort zone there. On an Icom I would have tried everything :)
Anyway, didn't have to take the image down, I just think it warrants an "at your own risk" disclaimer if you haven't actually tested it in a real radio. I've never bricked a Yaesu, but I've gotten them into very uncomfortable boot loops that would probably be difficult to remotely talk someone out of, is all.