I see that termination resistors might be needed for some communication lines. What about UART, I2C and SPI, are they needed ? If yes, how do we choose their values?
Take 50 MHz clock SPI.
50 MHz has a fundamental wavelength of 6 metres but you could argue that due to the fast rising edges everything up to the 5 th harmonic is potentially capable of disrupting the shape too much if terminations are not applied. So that's a wavelength of 1.2 metres.
On the other hand, on PCBs, the speed of signals is about 60% the speed of light so that fifth harmonic has a wavelength of 0.7 metres.
A sensible rule of thumb suggests reasonably that you need to consider adding a termination if the transmission line is longer that about one-tenth of a wavelength - so if your PCB tracks are more than 7 cm long then you should consider a termination but, you'll probably get away without one for a few more centimetres and, if the edges your chip generates are not that fast maybe you can consider the 3rd harmonic as the benchmark rather than the fifth harmonic.
The same argument applies for UART transmission but it's a little different with I2C because of the pull-up resistors and the inability to drive very fast edges due to the output device being active only in the low state.
UART signals transmitted with RS232 levels are done without termination resistors due to the slow rising and falling edges. But when RS485 is used for UART signals, termination ressistors are used frequently.