Closed ot0tot closed 5 months ago
The DMA assignment for Motor 3 conflicts with the gyro on SPI4. This PR changes the DMA request for Motor 3 so that it does not conflict, and enables bitbanged DShot which is preferred for F745 MCUs.
Before PR:
# status MCU F745 Clock=216MHz, Vref=3.31V, Core temp=45degC Stack size: 2048, Stack address: 0x20010000 Configuration: CONFIGURED, size: 3696, max available: 32768 Devices detected: SPI:1, I2C:1 Gyros detected: gyro 1 locked GYRO=MPU6000, ACC=MPU6000, BARO=DPS310 OSD: MAX7456 (30 x 13) BUILD KEY: d88c88713ceeed37a0ca6dd06f8a4fdc (4.4.3) System Uptime: 20 seconds, Current Time: 2024-04-15T12:31:42.186+00:00 CPU:35%, cycle time: 125, GYRO rate: 8000, RX rate: 15, System rate: 9 Voltage: 1 * 0.01V (0S battery - NOT PRESENT) I2C Errors: 0 FLASH: JEDEC ID=0x00ef4018 16M Arming disable flags: RXLOSS CLI MSP # dma show Currently active DMA: -------------------- DMA1 Stream 0: LED_STRIP DMA1 Stream 1: FREE DMA1 Stream 2: MOTOR 2 DMA1 Stream 3: SPI_MISO 2 DMA1 Stream 4: SPI_MOSI 2 DMA1 Stream 5: FREE DMA1 Stream 6: FREE DMA1 Stream 7: MOTOR 1 DMA2 Stream 0: SPI_MISO 1 DMA2 Stream 1: SPI_MOSI 4 DMA2 Stream 2: MOTOR 4 DMA2 Stream 3: MOTOR 3 DMA2 Stream 4: ADC DMA2 Stream 5: SPI_MOSI 1 DMA2 Stream 6: FREE DMA2 Stream 7: FREE # timer show Currently active Timers: ----------------------- TIM1: CH1 : MOTOR 3 CH2 : MOTOR 4 TIM2: FREE TIM3: CH3 : MOTOR 1 CH4 : MOTOR 2 TIM4: CH1 : LED_STRIP TIM5: FREE TIM6: FREE TIM7: FREE TIM8: FREE TIM9: FREE TIM10: FREE TIM11: FREE TIM12: FREE TIM13: FREE TIM14: FREE
After PR:
# # status MCU F745 Clock=216MHz, Vref=3.31V, Core temp=40degC Stack size: 2048, Stack address: 0x20010000 Configuration: CONFIGURED, size: 3696, max available: 32768 Devices detected: SPI:1, I2C:1 Gyros detected: gyro 1 locked dma GYRO=MPU6000, ACC=MPU6000, BARO=DPS310 OSD: MAX7456 (30 x 13) BUILD KEY: d88c88713ceeed37a0ca6dd06f8a4fdc (4.4.3) System Uptime: 8 seconds, Current Time: 2024-04-15T13:04:17.049+00:00 CPU:30%, cycle time: 125, GYRO rate: 8000, RX rate: 15, System rate: 9 Voltage: 1 * 0.01V (0S battery - NOT PRESENT) I2C Errors: 0 FLASH: JEDEC ID=0x00ef4018 16M Arming disable flags: RXLOSS ANGLE CLI MSP # timer show Currently active Timers: ----------------------- TIM1: FREE TIM2: FREE TIM3: FREE TIM4: CH1 : LED_STRIP TIM5: FREE TIM6: FREE TIM7: FREE TIM8: CH2 : DSHOT_BITBANG 2 CH4 : DSHOT_BITBANG 5 TIM9: FREE TIM10: FREE TIM11: FREE TIM12: FREE TIM13: FREE TIM14: FREE # dma show Currently active DMA: -------------------- DMA1 Stream 0: LED_STRIP DMA1 Stream 1: FREE DMA1 Stream 2: FREE DMA1 Stream 3: SPI_MISO 2 DMA1 Stream 4: SPI_MOSI 2 DMA1 Stream 5: FREE DMA1 Stream 6: FREE DMA1 Stream 7: FREE DMA2 Stream 0: SPI_MISO 4 DMA2 Stream 1: SPI_MOSI 4 DMA2 Stream 2: SPI_MISO 1 DMA2 Stream 3: DSHOT_BITBANG 2 DMA2 Stream 4: ADC DMA2 Stream 5: SPI_MOSI 1 DMA2 Stream 6: FREE DMA2 Stream 7: DSHOT_BITBANG 5
Or after PR with DShot bitbang disabled:
# # get dshot_bitbang ###WARNING: NO CUSTOM DEFAULTS FOUND### dshot_bitbang = OFF Allowed values: OFF, ON, AUTO Default value: AUTO dshot_bitbang_timer = AUTO Allowed values: AUTO, TIM1, TIM8 # status MCU F745 Clock=216MHz, Vref=3.31V, Core temp=45degC Stack size: 2048, Stack address: 0x20010000 Configuration: CONFIGURED, size: 3696, max available: 32768 Devices detected: SPI:1, I2C:1 Gyros detected: gyro 1 locked dma GYRO=MPU6000, ACC=MPU6000, BARO=DPS310 OSD: MAX7456 (30 x 13) BUILD KEY: d88c88713ceeed37a0ca6dd06f8a4fdc (4.4.3) System Uptime: 17 seconds, Current Time: 2024-04-15T15:05:21.403+00:00 CPU:29%, cycle time: 125, GYRO rate: 8000, RX rate: 15, System rate: 9 Voltage: 1 * 0.01V (0S battery - NOT PRESENT) I2C Errors: 0 FLASH: JEDEC ID=0x00ef4018 16M Arming disable flags: RXLOSS CLI MSP # dma show Currently active DMA: -------------------- DMA1 Stream 0: LED_STRIP DMA1 Stream 1: FREE DMA1 Stream 2: MOTOR 2 DMA1 Stream 3: SPI_MISO 2 DMA1 Stream 4: SPI_MOSI 2 DMA1 Stream 5: FREE DMA1 Stream 6: FREE DMA1 Stream 7: MOTOR 1 DMA2 Stream 0: SPI_MISO 1 DMA2 Stream 1: SPI_MOSI 4 DMA2 Stream 2: MOTOR 4 DMA2 Stream 3: SPI_MISO 4 DMA2 Stream 4: ADC DMA2 Stream 5: SPI_MOSI 1 DMA2 Stream 6: MOTOR 3 DMA2 Stream 7: FREE # timer show Currently active Timers: ----------------------- TIM1: CH1 : MOTOR 3 CH2 : MOTOR 4 TIM2: FREE TIM3: CH3 : MOTOR 1 CH4 : MOTOR 2 TIM4: CH1 : LED_STRIP TIM5: FREE TIM6: FREE TIM7: FREE TIM8: FREE TIM9: FREE TIM10: FREE TIM11: FREE TIM12: FREE TIM13: FREE TIM14: FREE
Thanks to @mmosca for testing.
needs sync to unified-target?
Looks like @haslinghuis took care of it. 👍 https://github.com/betaflight/unified-targets/pull/1301
The DMA assignment for Motor 3 conflicts with the gyro on SPI4. This PR changes the DMA request for Motor 3 so that it does not conflict, and enables bitbanged DShot which is preferred for F745 MCUs.
Before PR:
After PR:
Or after PR with DShot bitbang disabled:
Thanks to @mmosca for testing.