There is still not much to work on for somebody not sitting in front of this board.
Run your application in the debugger, and check where it ends up when communication stops. I still think it is the hardfault handler. If so, check the SCB registers to get more information about the fault cause.
Otherwise, you can instrument your code (add log/output code to observe it without debugger).
Or use the additional trace channel of the debugger (if you spent the extra money for a professional debug pod and tool chain that supports it).