CRSF not working on Kakute h7 v1.3 uart6?

I just finished setting up two kakute h7 rovers which use elrs rx’s for rc control. The ardupilot kakute h7 hardware pages say rcin should be on uart6, but that has not worked for me with rover 4.5.4 or 4.5.5. Instead I had to use uart3 for rcin to get my rovers working with elrs.

The holybro website also suggests uart6 for rcin, and uart6 is the default for betaflight. I have two arducopters running a kakute h7 with rcin on uart6 with no problems. Is rover doing something different for the kakute h7 uart6 that might cause rcin to not work?

Incidentally, I’m also having some issues getting tramp irc to work on uart6 as well. It’s almost as if rover completely hosed uart6 or something.

Any hints on why this is happening, or what I could try to get rcin working on uart6?

my parameters are attached:
roboTankVTX.param (31.0 KB)

https://ardupilot.org/plane/docs/common-holybro-kakuteh7mini-v13.html#rc-input

SERIAL6_OPTIONS,0
SERIAL6_PROTOCOL,23

If it’s not the mini, then additionally: BRD_ALT_CONFIG,1

I have tried all of the above yet serial 6 would never get data from elrs. The parameter file I posted is fully working on uart3. I tried those exact settings on uart6 of course. Also note brd_alt_config 1 is actually for one wire duplex rx’s, not full 2 wire duplex like elrs/crsf.

BRD_ALT_CONFIG,1 for the Kakute H7 sets SERIAL6 to full duplex and is required for CRSF/ELRS. This is not the same as the Mini variant.

The BRD_ALT_CONFIG parameter is a per-board parameter. In some cases it may do the opposite, but you need to use “1” for the Kakute H7 and ELRS.

hwdef confirms:

# RC input defaults to timer capture
PC7 TIM3_CH2 TIM3 RCININT PULLDOWN

# alternative config using USART for protocols
# like FPort
PC7 USART6_RX USART6 NODMA ALT(1)
PC6 USART6_TX USART6 NODMA

Hmm, I see the nodma there… maybe that was the issue? I swore in my research I read somewhere that elrs requires a port with dma enabled. To be sure, when I was trying to get uart6 working, I did try brd_alt_config 1 and 0… neither worked.

Incidentally, regardless if I used 0 or 1, the port options bitmask stayed the same “0” (dma disable check boxes clear).

A DMA enabled port is recommended, but it’s not really required on an H7. I run ELRS often without DMA on H7 autopilots. That’s not causal.

I’m using SERIAL6 successfully on a Kakute H7 Mini, which has a similar layout and architecture but does not offer the same alt config (pin 7 is not offered as an option for RC-in - it’s always USART6_RX on the Mini).

SERIAL6_OPTIONS should be 0. The documentation is clear and correct.

Check your wiring. Also check that no other SERIALx_PROTOCOL is set to 23. If you left SERIAL3 configured for ELRS, it could conflict.

OK thanks again for the feedback Yuri. I also have a kakute h7 mini that works fine with elrs on uart6 with arducopter. That and the fact that elrs works with uart6 on the full size h7 in betaflight, are the reasons I was surprised to see this issue. I definitely was using SERIAL6_OPTIONS = 0 for this (that’s what I meant when I said “port options bitmask”). I am also sure I never had protocol 23 on more than one port at a time during my experiments.

I will have to experiment more on this for debugging purposes. 99% certain it wasn’t wiring; I recall swapping tx/rx anyways before giving up, just to be sure it wasn’t that. In fact, in the process I managed to brick a kakute board doing something unrelated, and when the new one came I tried UART6 first thing, and got the same exact result. Switched that exact config back to uart3 and it worked fine. There’s still that 1% chance though, and honestly I had a lot of other building stuff going on in my brain when I was dealing with this. I did not feel like settling in to achieve a proper solution and just wanted to get the vehicle moving, even if it meant using an alternative uart port. I’ll wait until I am less “hot” over this project and go over this problem more methodically with a notepad and a well rounded test matrix in hand.

I’m nearly certain that @andyp1per uses ELRS or CRSF, and he did the ports of ArduPilot on these boards. I’d be shocked if we have an actual bug, but tagging him here in case I’ve missed something or we do have an issue.

All the information provided here is correct:

  • You need to set BRD_ALT_CONFIG to 1
  • You need to set SERIAL6_PROTOCOL to 23
  • You need to make sure no other UART has this setting
  • On an H7 lack of DMA is no problem.

You could try flashing the bdshot variant for this board which makes USART6 full-duplex by default just to eliminate that as a possibility. I have flown the Kakute H7 Nand, but not the sdcard version.