I've been experimenting with GPIO EXTI as well and found it rather noisy. I've had a button hooked to one of the gpio pins and it would falsely trigger input sometimes - occurring more at higher speeds.
I think shorter cables or twisted pairs might help?
Here is a little more info on my step/dir adventure. I have been using the gnd from the J2 connector and it does act quite a bit better but still getting extra steps. I have put the controller (a leafboy 77 also known as AKZ250 USB card for Mach3 and am using Mach3 to control that). as close as I can get. Actually the M1 pins (gpio 3 and 4) act a little better than the M0 pins 1 and 2. I have routed my encoder wires and motor wires as well as I can. I am not sure what to try next but I'll be sure to let you know.
In response to srk. Shorter cables are always a good idea but I don't think that will help in this case. As far as twisted pair, that won't help either because it is not a differential signal. My encoder cables are shielded but the shield is floating. I have huge motors so I am going to try and get them as far away from the board as I can.
Do you have access to an oscilloscope? If so, can you please make a measurement of the step pin(s) with the J2 GND as reference?
There is an electrical issue on ODrive that we uncovered, with significant help from @Bart's testing.
For now it means you shouldn't use J3's GND, but instead J2's GND when using step/dir.
Please see this topic: