ARDUINO MEGA (2560 standalone) SPI TIMEOUT

Ciao a tutti, ho un piccolo problema su un progetto che sto realizzando, la scheda è realizzata con un Atmega 2560 standalone e sul bus SPI ho connesse una SD card gestita con la libreria Sdfat e due ADC mpc3208 gestite con la libreria standard MPC3208.h.
Il porblema riscontrato è che il codice in maniera casuale , a volte dopo pochi minuti, a volte dopo ore, si rallenta durante la lettura degli ADC come se non ricevesse risposta dai moduli MPC3208 e aspettasse un timeout , questo "lag" dura circa 2000 ms e una volta che si presenta permane fino al reset della scheda.
La mia domanda è se nella libreria SPI o nella libreria MPC3208.h c'è una qualche funzione che gestisce un timeout e se nel caso questo tempo si possa ridurre.
Il passaggio critico del codice, dove saltuarimente avviene il lag è questo:

ADC1_ch(0) = adc1.analogRead(0);

normalmente questa lettura impiega circa 5 ms , e funziona perfettamente su tutti gli 8 canali dei due ADC , ma diciamo "random"... si rallenta fino a 2000 ms circa.
La libreria è abbastanza semplice e la parte di lettura del dato è in pratica

uint16_t MCP3208::analogRead(uint8_t pin) {
    uint8_t addr = 0b01100000 | ((pin & 0b111) << 2);
    digitalWrite(_cs, LOW);
    (void) spiTransfer(addr);
    uint8_t b1 = spiTransfer(0);
    uint8_t b2 = spiTransfer(0);
    digitalWrite(_cs, HIGH);

    return (b1 << 4) | (b2 >> 4);
}

uint8_t MCP3208::spiTransfer(uint8_t i) {
    uint8_t d;
#ifdef __PIC32MX__
    d = _spi->transfer(i);
#else
    d = SPI.transfer(i);
#endif
    return d;
}

Esiste un timeout sulla funzione SPI.transfer che , nel caso l'ADC non risponda, o il dati sia per qualche ragione corrotto che possa rallentare il loop ? Suggerimenti per evitare questa condizione ?

Grazie !

Potrebbe essere un problema di memoria.
Quanto spazio occupa lo sketch? Quanto spazio occupano le variabili? Se le variabili occupano troppa memoria (SRAM) il microcontrollore potrebbe bloccarsi.

TimoFran:
Potrebbe essere un problema di memoria.
Quanto spazio occupa lo sketch? Quanto spazio occupano le variabili? Se le variabili occupano troppa memoria (SRAM) il microcontrollore potrebbe bloccarsi.

Lo sketch usa 44326 byte (17%) dello spazio disponibile per i programmi. Il massimo è 253952 byte.
Le variabili globali usano 5119 byte (62%) di memoria dinamica, lasciando altri 3073 byte liberi per le variabili locali. Il massimo è 8192 byte.
Ho provato con la funzione freememory() e il valore durante il funzionamento rimane costante a circa 2800 byte