diff --git a/src/main/target/FF_FORTINIF4/FF_FORTINIF4_REV03.mk b/src/main/target/FF_FORTINIF4/FF_FORTINIF4_REV03.mk new file mode 100644 index 0000000000..d5013585a3 --- /dev/null +++ b/src/main/target/FF_FORTINIF4/FF_FORTINIF4_REV03.mk @@ -0,0 +1 @@ +# FortiniF4 Rev3 (modified pinout) diff --git a/src/main/target/FF_FORTINIF4/config.c b/src/main/target/FF_FORTINIF4/config.c index 55a61b16e5..775619ba46 100644 --- a/src/main/target/FF_FORTINIF4/config.c +++ b/src/main/target/FF_FORTINIF4/config.c @@ -34,7 +34,7 @@ void targetConfiguration(void) { - if (hardwareRevision == FORTINIF4_REV_2) { + if (hardwareRevision >= FORTINIF4_REV_2) { featureSet(FEATURE_OSD); } diff --git a/src/main/target/FF_FORTINIF4/hardware_revision.c b/src/main/target/FF_FORTINIF4/hardware_revision.c index c75f5e1bc1..b5eaddda49 100644 --- a/src/main/target/FF_FORTINIF4/hardware_revision.c +++ b/src/main/target/FF_FORTINIF4/hardware_revision.c @@ -33,21 +33,33 @@ uint8_t hardwareRevision = FORTINIF4_UNKNOWN; -static IO_t HWDetectPin = IO_NONE; +static IO_t HWDetectPinA = IO_NONE; +static IO_t HWDetectPinB = IO_NONE; void detectHardwareRevision(void) { - HWDetectPin = IOGetByTag(IO_TAG(HW_PIN)); - IOInit(HWDetectPin, OWNER_SYSTEM, 0); - IOConfigGPIO(HWDetectPin, IOCFG_IPU); + HWDetectPinA = IOGetByTag(IO_TAG(HW_PIN_A)); + IOInit(HWDetectPinA, OWNER_SYSTEM, 0); + IOConfigGPIO(HWDetectPinA, IOCFG_IPU); + HWDetectPinB = IOGetByTag(IO_TAG(HW_PIN_B)); + IOInit(HWDetectPinB, OWNER_SYSTEM, 0); + IOConfigGPIO(HWDetectPinB, IOCFG_IPU); delayMicroseconds(10); // allow configuration to settle // Check hardware revision - if (IORead(HWDetectPin)) { - hardwareRevision = FORTINIF4_REV_1; + if (IORead(HWDetectPinB)) { + if (IORead(HWDetectPinA)) { + hardwareRevision = FORTINIF4_REV_1; + } else { + hardwareRevision = FORTINIF4_REV_2; + } } else { - hardwareRevision = FORTINIF4_REV_2; + if (IORead(HWDetectPinA)) { + hardwareRevision = FORTINIF4_REV_4; + } else { + hardwareRevision = FORTINIF4_REV_3; + } } } diff --git a/src/main/target/FF_FORTINIF4/hardware_revision.h b/src/main/target/FF_FORTINIF4/hardware_revision.h index 4fd0603b8b..09336e47c6 100644 --- a/src/main/target/FF_FORTINIF4/hardware_revision.h +++ b/src/main/target/FF_FORTINIF4/hardware_revision.h @@ -23,7 +23,9 @@ typedef enum ftf4HardwareRevision_t { FORTINIF4_UNKNOWN = 0, FORTINIF4_REV_1, // SPI Flash - FORTINIF4_REV_2 // OSD + FORTINIF4_REV_2, // OSD + FORTINIF4_REV_3, // OSD Rev3 + FORTINIF4_REV_4 // actually not used } ftf4HardwareRevision_e; extern uint8_t hardwareRevision; diff --git a/src/main/target/FF_FORTINIF4/target.c b/src/main/target/FF_FORTINIF4/target.c index 524872b0f8..14ff7cb079 100644 --- a/src/main/target/FF_FORTINIF4/target.c +++ b/src/main/target/FF_FORTINIF4/target.c @@ -30,8 +30,17 @@ const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR, 0, 0 ), // S1_OUT - DMA1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, 0, 0 ), // S2_OUT - DMA1_ST2 +#if defined(FF_FORTINIF4_REV03) + DEF_TIM(TIM2, CH4, PB11, TIM_USE_MOTOR, 0, 1 ), // S3_OUT - DMA1_ST6 + DEF_TIM(TIM2, CH3, PB10, TIM_USE_MOTOR, 0, 0 ), // S4_OUT - DMA1_ST1 +#else DEF_TIM(TIM2, CH4, PA3, TIM_USE_MOTOR, 0, 1 ), // S3_OUT - DMA1_ST6 DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, 0, 0 ), // S4_OUT - DMA1_ST1 +#endif DEF_TIM(TIM4, CH4, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN +#if defined(FF_FORTINIF4_REV03) + DEF_TIM(TIM4, CH1, PB6, TIM_USE_LED, 0, 0 ), // LED - DMA1_ST0 +#else DEF_TIM(TIM4, CH2, PB7, TIM_USE_LED, 0, 0 ), // LED - DMA1_ST3 +#endif }; diff --git a/src/main/target/FF_FORTINIF4/target.h b/src/main/target/FF_FORTINIF4/target.h index 4ef63e468a..545eb5ac70 100644 --- a/src/main/target/FF_FORTINIF4/target.h +++ b/src/main/target/FF_FORTINIF4/target.h @@ -19,19 +19,33 @@ */ #pragma once +#if defined(FF_FORTINIF4_REV03) +#define TARGET_BOARD_IDENTIFIER "FOR3" +#define USBD_PRODUCT_STRING "FortiniF4_Rev03" +#else #define TARGET_BOARD_IDENTIFIER "FORT" #define USBD_PRODUCT_STRING "FortiniF4" +#endif #define USE_TARGET_CONFIG #define USE_HARDWARE_REVISION_DETECTION -#define HW_PIN PC14 +#define HW_PIN_A PC14 +#define HW_PIN_B PC8 /*--------------LED----------------*/ #define LED0_PIN PB5 +#if defined(FF_FORTINIF4_REV03) +#define LED1_PIN PB4 +#else #define LED1_PIN PB6 +#endif /*---------------------------------*/ /*------------BEEPER---------------*/ #define USE_BEEPER +#if defined(FF_FORTINIF4_REV03) +#define BEEPER_PIN PB3 +#else #define BEEPER_PIN PB4 +#endif #define BEEPER_INVERTED /*---------------------------------*/ @@ -47,40 +61,42 @@ #define USE_MPU_DATA_READY_SIGNAL #define ENSURE_MPU_DATA_READY_IS_LOW -#define MPU6000_CS_PIN PA8 -#define MPU6000_SPI_INSTANCE SPI1 - -#define MPU6500_CS_PIN PA8 -#define MPU6500_SPI_INSTANCE SPI1 - -#define ICM20689_CS_PIN PA8 -#define ICM20689_SPI_INSTANCE SPI1 - #define USE_GYRO -#define USE_GYRO_SPI_ICM20689 -#define GYRO_ICM20689_ALIGN CW180_DEG +#define USE_ACC + +#if !defined(FF_FORTINIF4_REV03) +#define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_SPI_INSTANCE SPI1 #define USE_GYRO_SPI_MPU6000 #define GYRO_MPU6000_ALIGN CW180_DEG + #define USE_ACC_SPI_MPU6000 #define ACC_MPU6000_ALIGN CW180_DEG +#define ICM20689_CS_PIN SPI1_NSS_PIN +#define ICM20689_SPI_INSTANCE SPI1 + +#define USE_GYRO_SPI_ICM20689 +#define GYRO_ICM20689_ALIGN CW180_DEG + +#define USE_ACC_SPI_ICM20689 +#define ACC_ICM20689_ALIGN CW180_DEG +#endif + +#define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_SPI_INSTANCE SPI1 + #define USE_GYRO_MPU6500 #define USE_GYRO_SPI_MPU6500 #define GYRO_MPU6500_ALIGN CW180_DEG -#define USE_ACC -#define USE_ACC_SPI_ICM20689 -#define ACC_ICM20689_ALIGN CW180_DEG - -#define USE_ACC_SPI_MPU6000 -#define ACC_MPU6000_ALIGN CW180_DEG - #define USE_ACC_MPU6500 #define USE_ACC_SPI_MPU6500 #define ACC_MPU6500_ALIGN CW180_DEG /*---------------------------------*/ +#if !defined(FF_FORTINIF4_REV03) /*------------FLASH----------------*/ #define FLASH_CS_PIN PB3 #define FLASH_SPI_INSTANCE SPI3 @@ -88,60 +104,102 @@ #define USE_FLASHFS #define USE_FLASH_M25P16 /*---------------------------------*/ +#endif /*-------------OSD-----------------*/ #define USE_MAX7456 +#if defined(FF_FORTINIF4_REV03) +#define MAX7456_SPI_INSTANCE SPI2 +#define MAX7456_SPI_CS_PIN SPI2_NSS_PIN +#else #define MAX7456_SPI_INSTANCE SPI3 -#define MAX7456_SPI_CS_PIN PB3 +#define MAX7456_SPI_CS_PIN SPI3_NSS_PIN +#endif #define MAX7456_SPI_CLK (SPI_CLOCK_STANDARD) // 10MHz #define MAX7456_RESTORE_CLK (SPI_CLOCK_FAST) /*---------------------------------*/ /*-----------USB-UARTs-------------*/ #define USE_VCP -//#define USB_DETECT_PIN PA8 +//#define USB_DETECT_PIN NONE //#define USE_USB_DETECT #define USE_UART1 #define UART1_RX_PIN PA10 #define UART1_TX_PIN PA9 -#define USE_UART3 -#define UART3_RX_PIN PB11 -#define UART3_TX_PIN PB10 -#define INVERTER_PIN_UART3 PC15 - #define USE_UART4 #define UART4_TX_PIN PA0 #define UART4_RX_PIN PA1 #define USE_UART5 #define UART5_RX_PIN PD2 -#define UART5_TX_PIN NONE +#define UART5_TX_PIN PC12 #define USE_UART6 #define UART6_RX_PIN PC7 #define UART6_TX_PIN PC6 +#if defined(FF_FORTINIF4_REV03) +#define USE_UART2 +#define UART2_RX_PIN PA3 +#define UART2_TX_PIN PA2 + +#define USE_UART3 +#define UART3_RX_PIN PC11 +#define UART3_TX_PIN PC10 +#define INVERTER_PIN_UART3 PC15 + +#define SERIAL_PORT_COUNT 7 +#else +#define USE_UART3 +#define UART3_RX_PIN PB11 +#define UART3_TX_PIN PB10 +#define INVERTER_PIN_UART3 PC15 + #define SERIAL_PORT_COUNT 6 +#endif /*---------------------------------*/ /*-------------SPIs----------------*/ #define USE_SPI #define USE_SPI_DEVICE_1 +#if defined(FF_FORTINIF4_REV03) +#define SPI1_NSS_PIN PA4 +#else #define SPI1_NSS_PIN PA8 +#endif #define SPI1_SCK_PIN PA5 #define SPI1_MISO_PIN PA6 #define SPI1_MOSI_PIN PA7 +#if defined(FF_FORTINIF4_REV03) +#define USE_SPI_DEVICE_2 +#define SPI2_NSS_PIN PB12 +#define SPI2_SCK_PIN PB13 +#define SPI2_MISO_PIN PB14 +#define SPI2_MOSI_PIN PB15 +#else #define USE_SPI_DEVICE_3 #define SPI3_NSS_PIN PB3 #define SPI3_SCK_PIN PC10 #define SPI3_MISO_PIN PC11 #define SPI3_MOSI_PIN PC12 +#endif /*---------------------------------*/ +#if defined(FF_FORTINIF4_REV03) +/*-------------I2C-----------------*/ +#define USE_I2C +#define USE_I2C_PULLUP +#define USE_I2C_DEVICE_3 +#define I2C_DEVICE (I2CDEV_3) +#define I2C1_SCL PA8 +#define I2C1_SDA PC9 +/*---------------------------------*/ +#endif + /*-------------ADCs----------------*/ #define USE_ADC #define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_ADC