diff --git a/radio/releasenotes.txt b/radio/releasenotes.txt
index e735d5d84..f6a1b9b32 100644
--- a/radio/releasenotes.txt
+++ b/radio/releasenotes.txt
@@ -30,6 +30,7 @@
Added Timer3 to stats screen (#2515)
FrSky S.Port Airspeed sensor unit set to kph (#2305)
Frsky-D Telemetry protocol bug fixed (0x5D followed by 0x3D)
+Added support for 0.01V resolution to D series VFAS ID 0x39 (#2607)
[Boards with narrow LCD (9X, 9XR, etc)]
diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h
index cff9517f5..67097dce4 100644
--- a/radio/src/telemetry/frsky.h
+++ b/radio/src/telemetry/frsky.h
@@ -91,6 +91,9 @@
#define D_A1_ID 0xF1
#define D_A2_ID 0xF2
+#define VFAS_D_HIPREC_OFFSET 2000
+
+
// FrSky new DATA IDs (2 bytes)
#define ALT_FIRST_ID 0x0100
#define ALT_LAST_ID 0x010f
@@ -152,6 +155,7 @@
#define DATA_ID_SP2UH 0x45 // 5
#define DATA_ID_SP2UR 0xC6 // 6
+
// Global Fr-Sky telemetry data variables
extern uint8_t frskyStreaming; // >0 (true) == data is streaming in. 0 = nodata detected for some time
diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp
index da2f641dd..c4e7cccf0 100644
--- a/radio/src/telemetry/frsky_d.cpp
+++ b/radio/src/telemetry/frsky_d.cpp
@@ -640,7 +640,14 @@ void processHubPacket(uint8_t id, int16_t value)
data = data * 60;
}
else if (id == VFAS_ID) {
- data *= 10;
+ if (data >= VFAS_D_HIPREC_OFFSET) {
+ // incoming value has a resolution of 0.01V and added offset of VFAS_D_HIPREC_OFFSET
+ data -= VFAS_D_HIPREC_OFFSET;
+ }
+ else {
+ // incoming value has a resolution of 0.1V
+ data *= 10;
+ }
}
setTelemetryValue(TELEM_PROTO_FRSKY_D, id, 0, data, unit, precision);