New target: FrSky/Rotorflight Vantac RF007
User description
Adds support for FrSky/Rotorflight Vantac RF007.
This is a similar flight controller to the Nexus X, but it comes with a FrSky receiver instead. While originally designed for helicopters, its form factor is also appealing for fixed wing aircraft running INAV.
Testing
I have tested:
- all 9 servo pins
- "A" port UART
- "C" port UART
- UART1 on AUX/SBUS pins
- internal receiver binds and works using FBUS
- calibrated external voltage input using a multimeter
- verified both gyro and accelerometer work and are oriented correctly
- verified barometer works
- verified Blackbox works
- verified USB-C port 5.1k resistors exist
Choice of pin functions
Many pins can have multiple roles.
I have created three targets VANTAC_RF007, VANTAC_RF007_9SERVOS and VANTAC_RF007_NOI2C.
VANTAC_RF007 has 7 servo outputs, 2 UARTs and 1 non-shared I2C.
VANTAC_RF007_9SERVOS has 9 servo outputs, 1 UART and non-shared I2C.
VANTAC_RF007_9SERVOS has 9 servo outputs, 2 UARTs and no I2C.
I hope this covers most use cases without creating too many targets. I am happy to modify the targets if a different set of tradeoffs is preferred. The targets are inspired by https://github.com/iNavFlight/inav/pull/11047.
PR Type
New Target
Description
-
Adds support for FrSky/Rotorflight Vantac RF007 flight controller
-
Provides three target variants with different pin configurations
- VANTAC_RF007: 7 servo outputs, 2 UARTs, shared I2C
- VANTAC_RF007_9SERVOS: 9 servo outputs, 1 UART, I2C
- VANTAC_RF007_NOI2C: 9 servo outputs, 2 UARTs, no I2C
-
Includes built-in FrSky FBUS receiver on UART5
-
Supports ICM42688P gyro/accelerometer, SPL06 barometer, W25N01G flash storage
Diagram Walkthrough
flowchart LR
A["Vantac RF007<br/>Flight Controller"] --> B["STM32F722XE"]
B --> C["ICM42688P<br/>IMU"]
B --> D["SPL06<br/>Barometer"]
B --> E["W25N01G<br/>Flash Storage"]
B --> F["FrSky FBUS<br/>Receiver"]
B --> G["3 Target<br/>Variants"]
File Walkthrough
| Relevant files | |||||||
|---|---|---|---|---|---|---|---|
| Configuration changes |
| ||||||
| Miscellaneous |
| ||||||
| Documentation |
|
PR Compliance Guide 🔍
Below is a summary of compliance checks for this PR:
| Security Compliance | |||||||||||
| 🟢 | No security concerns identifiedNo security vulnerabilities detected by AI analysis. Human verification advised for critical code. | ||||||||||
| Ticket Compliance | |||||||||||
| ⚪ | 🎫 No ticket provided
Codebase Duplication Compliance | ⚪ | Codebase context is not definedFollow the guide to enable codebase context checks. Custom Compliance | ⚪ | No custom compliance providedFollow the guide to enable custom compliance check.
|
| |||||
Compliance status legend
🟢 - Fully Compliant🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label
PR Code Suggestions ✨
Explore these optional code suggestions:
| Category | Suggestion | Impact |
| Possible issue |
Assign barometer to the correct I2C busChange the barometer's I2C bus from src/main/target/VANTAC_RF007/target.h [59-62]
Suggestion importance[1-10]: 9__ Why: The suggestion correctly identifies that the barometer is configured on an internal-only I2C bus ( | High |
| High-level |
✅
| Medium |
| ||
Great work!
I will get a unit up and running with this tonight.
The second suggestion from the bot can be ignored.
The first suggestion "assign barometer to correct I2C bus" is factually incorrect. The flight controller comes with a built-in barometer, which is connected to BUS_I2C1. I have confirmed that it works. Implementing the suggestion would cause the barometer to stop working.
Been testing here and I dont seem to get all the ports?
configuratoir only shows port 3/4/5 despite using the noi2c version or base version.
I think this is by design.. but It would be good to have a target with 4 ports.
VANTAC_RF007_NOI2C but with 7 servos.
Indeed, there is no target with 3 exposed UARTs (i.e. 5 in total, including the internal UART5 for the receiver and the USB port). Adding such a target is easy, the problem is if the number of targets gets too high. Ultimately, there are 36 possible targets:
| NAME | Port A | Port C | RPM/TLM | AUX/SBUS | Servo amount | external UART amount |
|---|---|---|---|---|---|---|
| Servo | Servo | Servo | Servo | 13 | 0 | |
| Servo | Servo | Servo | UART1 | 11 | 1 | |
| Servo | Servo | Servo | I2C1 | 11 | 0 | |
| Servo | Servo | UART2 | Servo | 11 | 1 | |
| Servo | Servo | UART2 | UART1 | 9 | 1 | |
| Servo | Servo | UART2 | I2C1 | 9 | 1 | |
| Servo | UART3 | Servo | Servo | 11 | 1 | |
| Servo | UART3 | Servo | UART1 | 9 | 2 | |
| Servo | UART3 | Servo | I2C1 | 9 | 1 | |
| Servo | UART3 | UART2 | Servo | 9 | 2 | |
| Servo | UART3 | UART2 | UART1 | 7 | 3 | |
| Servo | UART3 | UART2 | I2C1 | 7 | 2 | |
| Servo | I2C2 | Servo | Servo | 11 | 0 | |
| Servo | I2C2 | Servo | UART1 | 9 | 1 | |
| Servo | I2C2 | Servo | I2C1 | 9 | 0 | |
| Servo | I2C2 | UART2 | Servo | 9 | 1 | |
| Servo | I2C2 | UART2 | UART1 | 7 | 2 | |
| Servo | I2C2 | UART2 | I2C1 | 7 | 1 | |
| UART4 | Servo | Servo | Servo | 13 | 1 | |
| UART4 | Servo | Servo | UART1 | 11 | 2 | |
| UART4 | Servo | Servo | I2C1 | 11 | 1 | |
| UART4 | Servo | UART2 | Servo | 9 | 2 | |
| UART4 | Servo | UART2 | UART1 | 7 | 3 | |
| UART4 | Servo | UART2 | I2C1 | 7 | 2 | |
| VANTAC_RF007_NOI2C | UART4 | UART3 | Servo | Servo | 9 | 2 |
| UART4 | UART3 | Servo | UART1 | 7 | 3 | |
| UART4 | UART3 | Servo | I2C1 | 7 | 2 | |
| UART4 | UART3 | UART2 | Servo | 7 | 3 | |
| UART4 | UART3 | UART2 | UART1 | 5 | 4 | |
| UART4 | UART3 | UART2 | I2C1 | 5 | 3 | |
| VANTAC_RF007_9SERVOS | UART4 | I2C2 | Servo | Servo | 9 | 1 |
| VANTAC_RF007 | UART4 | I2C2 | Servo | UART1 | 7 | 2 |
| UART4 | I2C2 | Servo | I2C1 | 7 | 1 | |
| UART4 | I2C2 | UART2 | Servo | 7 | 2 | |
| UART4 | I2C2 | UART2 | UART1 | 5 | 3 | |
| UART4 | I2C2 | UART2 | I2C1 | 5 | 2 |
How many and which ones we choose to actually implement is an open question. I have chosen 3 I thought would be good. But maybe a different choice is better.
With 3.. we have a base issue
- esc telemetry
- receiver
- gps
Zero ability for an osd.
Looking at this and pin-out.
We coud achieve:
THR AIL ELV RUDD PAN TILT ROLL
*7 channels all up
4 uarts.
This would essentially be a good combo for many
It may be worth noting targets can actually be combined, just one target can cover multiple options if a pair of pins just switches between functions. For example if a pair can be used for either a uart or I2C.
Where a new target WOULD be needed is if the same function gets shifted around to different pins.
So you could have two pins that can either be the last two servos, or be a uart, or be I2C. Defining the pins as available as a uart doesn't do anything if the user doesn't actually use it as a UART.
Very interesting, in my test this didn't work. But maybe i did something wrong. I will revisit the targets and retest this week
Very interesting, in my test this didn't work. But maybe i did something wrong. I will revisit the targets and retest this week
The resource command can be useful to see what actually got allocated at runtime, based on the current configuration.
Firmware flashed fine after using ImpulseRC Driver Fixer
VANTAC_RF007 target
- [x] Flash firmware
- [x] Calibrate accelerometer
- [x] Correct board orientation
- [x] Gyro working
- [x] Accelerometer working
- [x] Barometer working
- [ ] I2C working
- [ ] UART 1 working
- [ ] UART 2 working
- [ ] UART 3 working
- [ ] UART 4 working
- [x] UART 5 working (internal RX)
- [ ] Servos and motors correctly assigned and working
- [x] Blackbox (Flash)
[!NOTE] Hardware
- There is no arrow on the FC. I understand that this was made for helis. But if it is intended to also be used with LOS fixed wing. A small forward arrow on the FC case would be nice. I assume that the servo plug ports are the front for my testing.
- I think it would have been nicer if port A (UART 4) had a 6 pin connector to incorporate the UART and an I2C breakout. This would have been the perfect place for a GNSS module with compass. Rather than having to use the servo ports at the end to access the I2C and have some wanky cabling.
Firmware
- As a suggestion for the default motor/servo assignment. It may be better to assign servos on Timers 3 and 5 and have motors on Timers 1 and 2. This will give 5 servos and 2 motors by default.
For traditional heli use, the servo ports will always be at the rear of the heli.
It would be nice to have a definitive arrow. The default orientation can be setup however the arrow directs it. I just figured the easier it is to set up, for someone who has never used an FC before. The better.
I will raise it with frsky tomorrow
It seems sharing pins works, but has strange priorities:
- UART RX
- I2C
- UART sensor and peripheral
- Servo/Motor
This means any pins defined as I2C cannot be used for a UART sensor or peripheral like GPS, OSD, FrSky Master or external Blackbox. That is because the pins will be used as I2C instead. There doesn't seem to be a way to disable I2C from the configurator. I found this by testing with an external serial rx, FrSky Master mode + oscilloscope, and using the resource command suggested by @sensei-hacker.
On this particular hardware, the priority issue only affects port "C". Therefore, I have chosen to create a unified target anyway. It enables 4 of the rows in my table to be reached with a single target. Specifically, RPM/TLM pins can be Servo or UART2, and AUX/SBUS can be Servo or UART1. Port "C" is I2C2 by default. It can become UART3, but will currently only do so for a serial rx.
I have updated the README to explain how the pin assignment works.
Thanks to @sensei-hacker for pointing out that combining targets like this is possible
Turns out the conflict between UART3 and I2C2 happens on quite a few targets and there is a solution for it.
#define I2C_DEVICE_2_SHARES_UART3
This enables a check in fc_init.c to only initialize I2C2 if UART3 is unused.
I have verified this works with GPS sensor, SBUS output and Smartport Master.
- [x] Samples received
- [x] Flash firmware
- [x] Calibrate
- [x] Orientation matches
- [x] Gyro working
- [x] Accel working
- [x] Baro working
- [x] Blackbox
- [ ] UART1
- [ ] UART2
- [ ] UART3
- [ ] UART4
- [ ] UART5
- [ ] UART6
- [ ] Buzzer working
- [ ] Motor outputs
- [ ] DShot support on m1-4
- [ ] Servo outputs
- [ ] Voltage ADC
- [ ] Current ADC
- [ ] Analog RSSI
- [ ] Mag I2C Bus
- [ ] Analog Camera working
- [ ] Video Out working
- [ ] OSD working
- [ ] PINIO1
- [ ] PINIO2