Masalah inisialisasi SDRAM (Freescale iMX31)


10

Saya mencoba untuk memodifikasi urutan init yang ada (init tingkat rendah SDRAM) untuk mengakomodasi perubahan dalam konfigurasi perangkat keras: SDRAM yang ada pada iMX31 saya diganti dengan ukuran yang berbeda, jika tidak sama jenis / pabrikan / tata letak / pin / timing. sesuai dengan spesifikasi.

Skenario pengaturan singkat dan perilaku kesalahan: Saya berhasil mendapatkan board booting (urutannya adalah: jalankan bootloader dari NAND, salin 'step2 bootloader' ke RAM, jalankan 'step2 bootloader' dari RAM). Tetapi saya tampaknya memiliki beberapa pengaturan yang salah, karena eksekusi dari RAM (setelah beralih ke langkah 2) gagal secara konsisten.

Saya melakukan sejumlah besar tes mendalam untuk mengidentifikasi parameter yang salah, hasil saya adalah: - byte tunggal / kata membaca / menulis bekerja ketika dieksekusi dari NAND atau JTAG - blok-bijaksana / burst menulis tampaknya berfungsi ketika dieksekusi dari NAND ( JTAG juga) Hal yang menarik: - setelah menulis dengan bijaksana, saya perlu beberapa bacaan pada alamat SDRAM untuk membaca byte / kata yang benar (!) - jika saya memodifikasi pengaturan kolom saya untuk HANYA menggunakan jumlah (+1) yang lebih tinggi dari kolom untuk "load mode" tetapi tidak untuk precharge / refresh, maka itu berfungsi, tetapi tidak konsisten (menurut teori saya ini berfungsi dengan andal untuk rentang alamat yang lebih rendah, di mana kolom yang hilang tidak masalah).

Untuk mendapatkan gambaran tentang konfigurasi saya: pengaturan dari RAM hampir identik dengan yang ada di pertanyaan ini. Ini tidak mengherankan, karena disediakan oleh Freescale, di samping timing RAM: Pada Freescale iMX31, bagaimana saya bisa menerjemahkan alamat SDRAM ke alamat CPU? Pengaturan asli saya identik (juga SDRAM 64MB seperti pada tautan), RAM baru saya 128MB. Semua papan referensi disediakan dengan 64MB atau 128MB, sehingga kedua nilai didukung oleh iMX31 dan turunannya.

Perubahan yang harus saya lakukan (perhatian: asumsi!) Hanya dalam konfigurasi COLUMN (satu lagi kolom) dari RAM. RAM berukuran dua kali lipat, tetapi specnya mengklaim timing yang sama, dll. Karena hanya memiliki satu kolom lagi (lihat tautan di atas, mode pengisian, penyegaran, dan pemuatan saya berubah dari 0x92100000 menjadi 0x92200000 untuk RAM baru - misalnya, RAM ) tidak ada yang berubah.

Pertanyaan 1: Apakah asumsi saya masuk akal, bahwa jika semua timing dan karakteristik chip fisik (mempengaruhi kekuatan drive, waktu dan konsumsi daya) serupa, bahwa perubahan jumlah kolom mungkin "lokal" (tidak mempengaruhi pengaturan lain)? Cukup menarik, saya membandingkan pengaturan saya dengan banyak lainnya yang tersedia secara online (U-Boot, Red-Boot dengan 128MB) dan di samping pengaturan khusus papan, seperti kekuatan drive, saya tidak melihat perbedaan.

Pertanyaan 2: Perilaku kesalahan saya di atas (menulis berfungsi, hanya membaca sebagian) mungkin unik untuk pengaturan RAM yang tidak valid tertentu. Apakah ada yang bisa memberi saya saran yang pengaturan untuk melihat lebih dekat? Juga dimungkinkan untuk mengatur parameter 'aman' sehingga bahkan dengan kinerja yang menurun, sistem akan memungkinkan saya untuk mempersempit pelakunya.


Apakah Anda cukup yakin masalahnya tidak terkait dengan desain perangkat keras (IC buruk, kesalahan tata letak, integritas sinyal buruk, daya tidak cukup ...)?
jbarlow

Jawaban:


1

Untuk 2, mulai dengan pengaturan dari papan demo iMX31. Kemudian modifikasi sesuai kebutuhan untuk bagian Anda (terutama kecepatan dan ukuran). Khususnya Anda mungkin memiliki jumlah status tunggu yang salah saat dibaca.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.