In another thread (linked, hopefully) it was explained that the OP needed to add a condition for the bus being busy in addition to the condition the OP already had for the bus being busy.
This addition fixed OP's issue as well as mine but i am struggling to understand why and the implications it has on the code i need to have within the already existing Bus Busy loop, namely preventing a bus lock-up with the timeout.
It seems to me that while(!busy) is the "sunny day" condition and if the control used right before it is successful, this is the check that the bus is free (which i didnt think was a thing when using a burst but okay) before the next byte is sent through the larger operation loop. The while(busy) is the lockup condition and should contain within it the conditional to check for a timeout and reset the bus and send the error_stop control.
Am i understanding this correctly? Is there an importance to the order they are in within the larger loop? Does anything need to (or should) go in the while(!busy) loop or is it safe to leave empty?