Hi Simon
Try a FRDM-K64F reference binary from here [http://www.utasker.com/kinetis/FRDM-K64F.html] to check your board and card can operate.
See also https://community.nxp.com/message/1001515?commentID=1001515#comment-1001515
I have attached two other binary files for the FRDM-K64F - one clocking the SDHC from OSCERCLK and the other from IRC48M. There are build with the uTasker project (more featured utFAT) and allows you to see the SD card's files on the OpenSDA VCOM interface at 115'200 Baud (then in the utFAT menu there is a DOS like interface).
Usually the core clock is used (faster) but the OSCERCLK (50MHz on the FRDM-K64F) can be selected instead, whereby the only trick is to be sure to enable the OSCERCLK output from the MCG - the uTasker code automates this in this mode with
OSC0_CR |= (OSC_CR_ERCLKEN); // ensure that the OSCERCLK is enabled (it is assumed that there is a external clock applied or the oscillator is operating)
It can also be used from the IRC48M clock although this is a bit more delicate since the IRC48M has un-documentent errata in earlier chips (which are often found on even newer FRDM-K64F boards) - essentially the trick is to enable the USB module and clock recovery there otherwise it may not be operating. The clock speed during initialsiation should be chosen to be around 400kHz and then when operating in 4 bit SDHC mode to around 25MHz.
You can use the memory debugger interface in the I/O menu to view register settings (or use a debugger) if needed. You should then be able to correct the source that you use based on this. Or, if you would instead prefer to slash your development time with more complete code just use the uTasker project (either free open source or fully supported for professionals).
Regards
Mark