Problem controlling long lengths of Digitial LED strip


I need to create a chasing pattern that goes up and down a digital rgb strip ( at a certain specified speed. Adafruit has a library to make this easy to control ( so I don't have to do any PWM programming myself.

The trouble I faced initially was that I was using the digital pins on my Arduino Due to write to the strip. Since I have 25 metres of strip (800 LEDs) this took a really long time so the chasing pattern didn't go at the intended speed unless I jumped LEDs which makes it too jerky. I rectified this by writing to the strip using the SPI pins.

The problem however, with the SPI pins, is that when I connect (daisy-chain) all my LED strips together, the Arduino is unable to drive the strips (I get random, sometimes blinky patterns of LEDs turning off and on at randomly specified colours). It's able to control 10metres (320 LEDs) quite comfortably but fails beyond that. I initially thought that this was a bandwidth problem with the SPi pins but in some cases it can control 15metres as well so I surmised that cable impedance/having too many shift registers in a row was degrading signal quality. Some strips had higher impedance (adafruit's standardization of their products is not great as I have discovered for other reasons not worth going into here) and hence I could control 15metres in one case and 10 metres in another.

I thought this was a cable impedance/to many shift registers daisy chained problem leading to degradation of the clock and data signal but I find that if I go back to using the digital pins (not the SPI) to write to the strip, where the SPI fails, this now works (albeit with longer delays as described above). This makes me think that it's not an impedance problem but a data bandwidth one.

Can someone please help diagnose the correct problem (since I'm coming to two mutually exclusive conclusions based on the tests I've done) and also suggest how I can get the Arduino to work for the entire 25 metres. There is a 'brute force' method of using many Arduino's instead of one but if you can think of more elegant solutions I'd be very grateful