Sto cercando di modificare una sequenza di init esistente (init di basso livello di SDRAM) per adattarsi a un cambiamento nella configurazione hardware: una SDRAM esistente sul mio iMX31 è stata sostituita con una dimensione diversa, altrimenti lo stesso tipo / produttore / layout / pin / temporizzazioni. secondo le specifiche.
Breve scenario di configurazione e comportamento dell'errore: sono riuscito ad avviare la scheda (la sequenza è la seguente: eseguire bootloader dalla NAND, copiare "step2 bootloader" nella RAM, eseguire "step2 bootloader" dalla RAM). Ma mi sembra che alcune impostazioni siano sbagliate, poiché l'esecuzione dalla RAM (dopo il salto al passaggio 2) fallisce costantemente.
Ho fatto una grande quantità di test approfonditi per identificare parametri errati, i miei risultati sono questi: - lettura / scrittura a byte singolo / parola eseguita quando eseguita da NAND o JTAG - le scritture a blocchi / burst sembrano funzionare quando eseguite da NAND ( Anche JTAG) La cosa interessante: - dopo le scritture a blocchi, ho bisogno di più letture su qualsiasi indirizzo SDRAM per leggere un byte / parola corretti (!) - se modifico le mie impostazioni di colonna per usare SOLO la quantità più alta (+1) di colonne per "modalità di caricamento" ma non per precarica / aggiornamento, quindi funziona, ma in modo incoerente (secondo la mia teoria funziona in modo affidabile per l'intervallo di indirizzi inferiore, dove la colonna mancante non ha importanza).
Per avere un'idea della mia configurazione: le impostazioni dalla RAM sono quasi identiche a quelle in questa domanda. Ciò non sorprende, dal momento che sono forniti da Freescale, oltre ai tempi della RAM: su Freescale iMX31, come posso tradurre l'indirizzo SDRAM in indirizzo CPU? La mia impostazione originale è identica (anche 64 MB di SDRAM come nel collegamento), la mia nuova RAM è di 128 MB. Tutte le schede di riferimento sono fornite con 64 MB o 128 MB, quindi entrambi i valori sono supportati da iMX31 e derivati.
La modifica che devo fare (attenzione: ipotesi!) È solo nella configurazione COLUMN (è un'altra colonna) della RAM. La RAM ha dimensioni doppie, ma per il resto la specifica richiede esattamente gli stessi tempi ecc. Dato che ha solo un'altra colonna (vedi link sopra, i miei registri delle mie modalità di precarica, aggiornamento e caricamento cambiano da 0x92100000 a 0x92200000 per la nuova RAM, ad esempio ) nient'altro è cambiato.
Domanda 1: La mia ipotesi ha senso, se tutti i tempi e le caratteristiche fisiche del chip (che influenzano la forza dell'unità, i tempi e i consumi energetici) sono simili, che una modifica del conteggio delle colonne potrebbe essere "locale" (senza influire su altre impostazioni)? Abbastanza interessante, ho confrontato le mie impostazioni con molte altre disponibili online (U-Boot, Red-Boot con 128 MB) e accanto alle impostazioni specifiche della scheda, come la forza dell'unità, non vedo differenze.
Domanda 2: Il mio comportamento di errore sopra (scrive lavoro, legge solo parziale) è probabilmente unico per una certa impostazione non valida della RAM. Qualcuno è in grado di darmi un consiglio su quale impostazione dare un'occhiata più da vicino? Inoltre, potrebbe essere possibile impostare parametri "sicuri" in modo che, anche con prestazioni ridotte, il sistema mi consenta di restringere il colpevole.