consulta lectura SD y modulo lan enc28j60

Estoy encaminado en un proyecto que tengo que tener ambas cosas. Y me encuentro con un problema o no.

En la mayoria de los ejemplos se inicializa en media o cuarto de velocidad para leer las memoria. incluso sin divisor resistivo, usando shifter.

if (!sd.begin(chipSelect, SPI_HALF_SPEED))

Pero las librerias EtherCard no tienen para inicializar este valor y creo lo setean por defecto al maximo en cada lectura segun leo en el codigo ¿y lo vuelve al anterior?.

static void readBuf(word len, byte* data) {
    enableChip();
#if FULL_SPEED
    byte spiSave = SPCR;
    SPCR = bit(SPE) | bit(MSTR); // 8 MHz @ 16
#endif
    xferSPI(ENC28J60_READ_BUF_MEM);
    while (len--) {
        xferSPI(0x00);
        *data++ = SPDR;
    }
#if FULL_SPEED
    SPCR = spiSave;
#endif
    disableChip();
}

¿Me orienta alguien con respecto a esto?

Al sd.begin, puedes quitarle el SPI_HALF_SPEED sin problemas. Yo no,lo uso nunca.

En varios ejemplos no funciona sino esta en HALF.

Pero ya que estamos, alguna limitacion de velocidad en el uso de divisor resistivo o level shift?

Hola.
No sé exactamente qué librería estás usando (sería interesante vínculo para echar un vistazo). Yo tengo una (tal vez sea más antigua) y no he visto el método readBuf. Tiene uno llamado readBuffer, pero creo que varía bastante respecto de la tuya.
A juzgar por el fragmento de código que incluyes, diría que efectivamente modifica la velocidad SPI al máximo y vuelve a dejarla en su velocidad anterior tras realizar el comando. No me parece inconveniente, pues creo que el enc28j60 puede comunicarse perfectamente a velocidad máxima, y dejará luego la velocidad con la que estabas trabajando con la SD. También, si te fijas, ese cambio/restablecimiento de velocidad está dentro de un condicional de preprocesador, osea que por ahí tiene que haber un #define FULL_SPEED (supongo que por lógica inicialmente estará activado) y que probablemente con un define en tu código podrías establecer otra velocidad distinta para el ethercard.
Pero como te digo, creo que no debería ser inconveniente que tu tarjeta SD y la ethercard trabajen la una a HALF_SPEED y la otra a FULL_SPEED con esa librería. ¿Has experimentado algún tipo de problema?

Gracias Noter.
La libreria es la Ethercard, tambien probe con la UIPEthernet y con ejemplos simples no note nada raro. pero me preocupaba el tema de ver como se comportaria con mas codigo. Con la ultima libreria experimente cuelques aleatorios pero despues encontre otras personas que les paso lo mismo por lo que no es estable y me quedo con EtherCard

Sabes si el uso de divisor resistivo en vez de level shiffer modifica la perfomance de la tarjeta SD? no encuentro mucha informacion y no logro hacerlo andar con el cd4050.

Pues no he visto en la función readBuf (creo que está en el archivo enc28j60.cpp) la parte condicional que ponías en el primer post.
En cuanto al dilema divisor/shifter, poco te puedo decir. A buen seguro que el amigo surbyte te puede dar buena información.
Yo tengo entendido que es mejor el level shifter. Supongo que dará valores más estables y cuadrados, y supongo que también elevará los 3.3v a 5v hacia el arduino, ya que creo que con los divisores sólo se baja el voltaje que va de arduino a SD, pero los niveles que recibe arduino de la sd son los 3.3v, que dan sin demasiadas alegrías el nivel high.

no si soy yo o que pero no puedo hacer que ande con el cd4050. Estoy probando con la alternativa de los bidireccional con mosfet. Encima tengo poco espacio fisico.