Also, sp + 8 could mean a few different things depending on the shape of the function.
Typically a function generated by a compiler looks like this:
* Retrieve extra arguments
* Save registers (push)
* Update frame pointer if needed
* Actual function
* Series of basic blocks (often with minimal register cross-use in Thumb compilers)
* Restore registers
* pop or bx to end func
If a function doesn't need to save registers (called a "leaf" function), it won't have any push or pop, but likely still will have a bx except in fairly rare cases of tail recursion (I'm not sure if any Thumb compilers did it those days.)
If you're seeing ldr r2,[sp,8h] at the start, it may be reading an argument into r2 from the caller.
More likely, if you're seeing that mid function, it's probably a temporary variable that the function earlier wrote to the stack (this is called "spilling") because it ran out of registers to keep track of all the things on its mind. GBA Thumb compilers were terrible and often spill registers entirely unnecessarily.