Pues al final se ha solucionado.
Las resistencias pullup que trae la placa del zócalo de tarjeta eran de 4k7. En los datasheet de Kingston, Sandisk, etc decían que tenían que ser de entre 10k y 100k. Se las he puesto de 50K y todo perfecto. Y el coraje que dos tardes perdidas buscando el problema.
La conclusión: No dar por sentando nunca que los módulos que venden para arduino y demás son infalibles.
EDITO: La solucion anterior ha sido válida SI, para unas tarjetas pero NO para otras. Había otras que seguían sin funcionar a alta velocidad.
Por fortuna también lo he podido solucionar, manejando el modulo SPI manualmente.
Lo que he hecho ha sido escribir esta función:
char spi_transfer(char data) {
SSPBUF = data;
while(!BF);
return SSPBUF;
}
Pues bueno. Con esa funcion, ahora funcionan todas las tarjetas, con todas las velocidades e incluso volviendoles a poner las resistencias pullup iniciales también funciona.
Desconozco como operan exactamente las funciones de CCS " spi_read() y spi_write() "
Pero ahora con esa función que he puesto arriba, la misma sirve tanto para enviar como para recibir. Igual que hace la funcion spi_read(xx) si le das un valor, que lo envía a la misma vez que recibe otro.
La diferencia es que con las funciones de CCS tenia esos problemas, y con la que he puesto arriba se ha solucionado todo.
Por si a alguien le sirve, ahí lo tiene.
Saludos.