Q:

Cache and scratchpad memories

Could someone explain what is the difference between cache memory and scratchpad memory? I'm currently learning about computer architecture. 

A:

A scratchpad is just that a place to keep some stuff.  Cache, is memory you talk through normally not talk at.  Scratchpad is like a post it note, something you write something on and keep with you.  Cache is paper you send off to someone else with instructions like a memo.  
Cache can be in various places, layers (L1, L2, L3...).  both scratchpad and cache are just sram in some chip, with an address and data bus and read/write/etc control signals.  (as are many other things in a computer which may or may not be used for addressable ram).  During boot, before the ram on the far side (slower ram side, processor being the near side) is initialized (eventually dram typically if you have a cache otherwise why have a cache) it may be possible to access the cache as addressable ram.  It depends very much on the system/design though, there may be a control register that enables it to behave as a simple ram, or there may be a mode, or its normal mode may be such that so long as you dont address more than the size of the ram based on its alignment (perhaps a 32K ram between 32K boundaries) then it may not try to evict anything and generate bus cycles on the dram/slow/far side of the cache allowing you to use it as ram just like a scratchpad.  
BUT, the normal use case for a cache is as an ideally invisible pathway to ram.  You dont access the cache ram using cache addressing you use the address space of the ram beyond and the cache simply allows the processor to continue without waiting for the slow ram.  
Talking about booting again, think about the kinds of things you need to do when booting, namely bringing up the dram controller, which is most definitely a non-trivial thing.  Having some on chip memory allows you to if nothing else temporarily have some ram for a small stack and for some variables.  You can for example us a compiler on a compiled language like C which needs at a minimum some ram for stack and variables.  Depending on space you can put some program there too, likely running there much faster than from flash.  The alternative to having no ram is likely having to write the dram init in assembly using only general purpose or other registers in the processor, taking a complicated task and making it that much more difficult.  Once the main system ram is up, then you may or may not choose to not use the on chip (scratchpad) ram.  
I would and do argue that if you want to test the dram to see if it is working then you need to not use that ram to test that ram, the test program should not run in nor use the ram under test.  Having scratchpad ram on chip (or some other ram in the address space, perhaps video card ram for example) could be used for the dram test program.  Unfortunately lots of folks will use the ram under test to hold the stack and program and variables and heap from the program doing the test, leaving important parts of the ram untested other than one or a small number of patterns.

