ODrive V3.6 UART A rise time is too long


I am using a ODrive V3.6 24V with firmware v0.5.5, bought from the official ODrive store. I want to control the ODrive with an Arduino over UART A (GPIO 1 and GPIO 2) but I am having trouble with reliable communication over higher baud rates. The setup works well at 9600, 38400 and even 74880 bauds, but if I go higher to 115200, I notice that the packets are not received well by the Arduino. For my application, I need the serial communincation to be as quick as possible, so higher baud rates are needed.

Upon further inspection, it seems to me that the ODrive is unable to drive its TX line very well. Is the GPIO configured as Open Drain?

This is the Arduino driving its TX line, rise time is about 36 ns:

But for the ODrive, the rise time on its TX line is about 1480 ns or 1.480 us:

The whole packet from the ODrive to the Arduino appears sluggish:

I looked through the ODrive Firmware but I am having a hard time tracking down the configuration for UART GPIO 1 and GPIO 2, could it be that they are not set as push-pull? If they are set as push-pull, is there anything I could do to help with the rise time? Adding a pullup resistor does not work as it raises the signal low level too.

Thank you for any help!

Looks like it’s push-pull with a pulldown / pullup depending on which GPIO it is

I see; thank you for your response!

I cannot resolve why the rise/fall times are bad when ODrive drives its Tx pin, but for now, I have managed to get my system working by using a better Arduino with a hardware serial block. The previous tests used SoftwareSerial on a pro mini, which did not work. The waveforms from ODrive remain the same, but my microcontroller is able to decode it correctly at 115200 baud.