STM32F407 Discovery'e harici Ram bağlama

Başlatan Mucit23, 04 Nisan 2014, 13:59:19

Mucit23

Arkadaşlar konu çok karıştı gerçekten bu yüzden yeni bir başlık açmak istedim.

STM32F4 Discovery üzerinde 100Pinli STM32F407VGT6 mikroişlemci var. Benim amacım bu mikroişlemciye FSMC ile harici ram bağlamak

Normalde harici Ram'ler paralel adres bacakları ve data bacakları ayrı oluyor. Mesela STM32F429IDISCOVERY'de IS42S16400J  64Mb SDRAM bulunmakta 12 Bit adres hattı kullanıyor. Data hattı ise sabit olarak 16 bit.

STM32F429'daki FSMC modülünde SDRAM modu var. Daha doğrusu şöyle söyliyeyim. 144 pin ve üzeri olan mculardaki FSMC modülünde adres bacakları ayrı oluyor. Yani FSMC max 24 bit adresleme yapabiliyorsa mcu üzerinde FSMC_A0 - FSMC_A23 arası adres bacakları bulunuyor. STM32F103ZI serisinde de aynı durum geçerli STM32F429'dada aynı durum geçerli.

STM32F4 discovery de ise 100pin STM32F407VG bulunduğu için FSMC donanımında harici adres bacakları tam olarak yok. Örneğin FSMC Max 24 bit adresleme yapabiliyor. STM32F407'nin pin_map'ine baktığımda FSMC için sadece adres bacağı olarak sadece A16 ile A23 arasını gördüm. A0 ile A15 arası adres bacağı extra yok. Anladığım kadarıyla 16 bitlik sabit Data hattını hem adresleme hemde data alışverişinde kullanılıyor. Zaten FSMC ye LCD bağladığımızda Adresleme işinide yine data hattından yaptığını biliyoruz.

Şimdi bazı sormak istediklerim var.

1-) 100Pinli mculardaki FSMC modüllerinde Harici Adres bacakları bulunmuyor. Ben mcu'ya örneğin 12 bit adres hattı bulunduran bir SDRAM bağlamak istersem Adres hattını(A0-A11) nereye bağlamam gerekiyor. Data hattıyla ortakmı bağlanacak?

Yani eğer böyle bir durum varsa A0 ile A11 arası adres bacaklarını SDRAM'in D0 ile D11 arası data bacaklarıyla birleştirip FSMC'ye bağlamam gerekiyor.

2-) Diğer bir sorum ise Bu durumun olmaması halinde başka bir ram türümü bağlamak gerekiyor? Nerden çıktı derseniz MikroXplorer ile FSMC ilgili pinlere bakıyordum. FSMC 'in PSRAM Diye bir modu var. Burada Data hattı ile adres hattının ortak olduğu görülüyor. Aşağıdaki resimde daha net anlaşılıyor.

ücretsiz resim barındırma
Yani belki Data hattıyla Adres hattını ortak kullanan bir ram türü vardır? Gerçekte böyle bir ram türü varmı?

Soracak çok sorum var aslında ama kafam okadar karışıkki diğer ufak tefek soruları unuttum. aklıma geldikçe yazacağım.

Bu konuda bilgili arkadaşlar konuya biraz vakit ayırırlarsa sevinirim.




MC_Skywalker

#1
8086, 80186, 80286   ailesin de de benzer durum var. adres kod çözücü kullanarak bu ayrımı yapabilirsin.
http://cmpe.emu.edu.tr/cergun/328_PDF_CEM/07_ISAbus_0410.pdf    şurada bir örnek var yardımcı olabilir belki.

ErsinErce

1-) hayır SRAM i 100pin ve altı için direk kullanamazsın

2-) Multiplexed RAM aradığın kelime grubu

normal SRAM i istersen hızlı bir latch buffer ile Multiplexed SRAM haline dönüştürebilirsin

diot

Aşağıdaki linkteki şemada stm32f407zgt6 için nor flash sram ve nand flash için bağlantılar var inceleyebilirsin.

http://www.haoyuelectronics.com/Attachment/HY-STM32F2xxCore144/HY-STM32F2xxCore144_SCH.pdf

Mucit23

Cevaplar için teşekkürler. Multiplexed Ram konusuna yüzeyden baktım. Anladığım kadarıyla Adresleme için decoder kullanan ram çeşitlerine PSRAM diyorlar
Şurda micronun bir tane uygulama notu var.
http://www.micron.com/~/media/Documents/Products/Technical%20Note/DRAM/tn4530_psram_101.pdf
Adresleme için bir decoder kullanılacak anlaşılan ama FSMC ile bu decoder arasında nasıl bir bağlantı kurulacak bun konuyu anlayamadım.

Bana birkaç tane referans tasarım gösterebilirmisiniz?

ErsinErce

#5
Decoder lik birşey yok, çözme yapmıyorsun D0-15 deki verileri olduğu gibi A0-A15 e aktarıyorsun

D0-D15 den 2 tane 74 XX 573 gibi bir entegreye giriş yapıp entegrenin çıkışını A0-A15 e bağlıyorsun.
sonra 74 XX 573 ün LE ucunuda RM0090 dökümanında sayfa 1232 de bulunan ilk tablodaki 7. satırda bahsedilen pine bağlıyorsun  :)

bekletme vs için bu kullanacağın entegrenin gecikmelerini hesaba katmanda lazım ayrıca 70-80ns den fazla sürebilir

Mucit23

Hocam şimdi parçalar yerine oturdu, Çokda zor görünmüyor. Ufak bir kart hazırlayıp kendi ram board'ımı yapabilirim sanırım.  :)

Arduinocular sağolsun, megaya harici ram bağlamışlar.Birkaç kaynak buldum.
http://andybrown.me.uk/wk/2011/08/28/512kb-sram-expansion-for-the-arduino-mega-design/
http://avrhelp.mcselec.com/index.html?adding_xram.htm



Hazır sizi yakalamışken unuttuğum soruları sorayım.

3-) İleride external ram işini çözersem eğer LCD ile birlikte kullanmam gerekecek. Daha önceden bana "FSMC de 4 page bulunmakta bu page leri farklı modlara ayarlayabiliyorsunuz" Şeklinde bir mesaj yazmıştınız. FSMC ile aynı anda LCD aynı andada ram sürmek istersem iki adet chip select pinine ihtiyacım var.
Referance Manual'de sayfa 1232deki tabloya bakarsak;

Chip Enable(NEx) bacağından 4 adet olması gerekir. Her bir Bank'a 1 tane. Datasheette böyle ama yine pin_map'e baktığımda bu NE pininden sadece 1 tane var. FSMC_NE1 diye geçiyor. Şuanda zaten bu bacağı LCD'nin CS pinine bağlamışım. NE2, NE3 ve NE4'ü bulamadım.

4-) Şayet 3. Sorumdaki kayıp olan NE bacaklarını buldum. SRAM felanda alıp kendi ram kartımı yaptım stm32 ye bağlayacağım. 18 bit adresleme kullanan bir ram kullandığımı varsayarsak 16 adet Data hattının dışında FSMC_A16 ile FSMC_A17yi de çıkartıp LATCH'dan geçirmeden direk SRAM'in A16 ve A17 nolu bacaklarına bağlayacağım. Ben yine pin_map'e baktığımda FSMC_A16 nolu bacağın şuanda LCD'nin RS sinyali için kullanıldığını görüyorum. 

Bu pin STM32F407'de PD11'e denk geliyor. FSMC için iki ayrı modda kullanılabiliyor NAND_FLASH Modundayken Bu pin FSMC_CLE, Nor_Mux modundayken aynı pin FSMC_A16 olarak kullanılıyor.

Asıl sormak istediğim şudur. LCD sürerken FSMC'yi Nand Flash modunda kullanıyoruz. Ram içinde Nor Mux modunda kullanıyoruz. FSMC'deki bankları farklı modlarda çalıştırabiliyormuyuz. Eğer çalıştırabiliyorsak yukarıda bahsettiğim pini ram ve lcd için ortakmı kullanacağız.

İşin özüne gelirsek ben FSMC donanımına nasıl ram bağlayacağımı anladım. Ama LCD ile birlikte kullanmam gerekirse nasıl birlikte kullanacağım onu anlayamıyorum



ErsinErce

#7
STM32F407 Datasheet (Doc ID 022152) sf 60 tablo 8
hangi pinde hangi konfigürasyon mevcut rahat rahat görüp kontrol edebilirsin

cevaplar pek istediğin gibi olmayacak yalnız

donanım uyumuna bakıp aynı page içinde 2 cihaz kullanmaya çalışman gerekecek

3-) 100 pinli entegrede tek çıkış var dediğin gibi diğer page leri kullanamıyorsun.

4-) FSMC de birçok pin ortak kullanılıyor zaten AF yi değiştirmen gerekmiyorsa aynı çıkışı hem x hem y cihazına götürebilirsin.

5-) aynı page içinde 2 cihaz kullanımı derken kullanılan adres aralığını paylaştırman gerekiyor.

RAM ve LCD in ortak bir modla sürülebiliyorsa

İlk başta yapacağın gibi normal bağlantını yapıp A23 pinini NE ile AND leyerek RAM'e A23 pininin tersini NE ile ANDleyerek LCD ye giriyorsun, yada tam tersi.
bu şekilde ilk 2^22 lik alan LCD nin ikinci 2^22 alan RAM'e ait oluyor ya da tam tersi =)

hangi pini kullanırsan 2^kullanacağın pin numarası - 1 alan paylaştırılmış olur

mikroişlemci mimarisi vb ders aldıysan Bellek genişletme (doğru hatırlıyorsam) konusuna bakarsan daha net anlaşılabilir.

Mucit23

#8
Hocam şimdi diyeceksiniz hemen pes ediyorsun ama yaptığımız iş olacak iş değil. :-\ Şorun Ram ve LCD nin aynı yapıda olmaması, Farklı şekillerde çalışıyorlar. Her biri için FSMC farklı şekilde yapılandırılması gerekiyor. LCD ile aynı şekilde çalışan bir ram çeşidi bulsam çok kolay olacak. Ama öyle bir ürün yok. (Şeytan diyor bul birtane LCD driver bağla LCD ye paralel, RAM niyetine kullan anasını satayım.) Bu yüzden soğudum bu işten :-\

Belki şöyle yapabilirim. LCDyi FSMC ye bağlamak çokda önemli değil. LCD yi FSMC ile sürmem direk kullanırım. FSMC ye direk SDRAM bağlarım. Ama tabi 74HC573 latch devresi olması gerekiyor yine. Bu iş için SDRAM satın alacağım ama çok fazla çeşit var. Bunları alırken nelere dikkat etmek lazım? Bana 1Mbyte alan lazım.

Ebayda şöyle bir modül var
http://www.memorytech.com.cn/DS/H57V1262GTR(Rev1.0)-Consumer.pdf
Yada buda çok uygun,
http://www.ebay.com/itm/1PCS-IC-K6R4016V1D-TI10-K6R4016V1D-TC10-TSOP44-DIP28-SAMSUNG-NEW-/300734393956?pt=LH_DefaultDomain_0&hash=item46052aae64
Yada STM32F429 Discovery deki ram den alayım.  Kodlaması için STM32F429'a bakarım  :D
http://www.digikey.com/product-detail/en/IS42S16400J-7TL/706-1133-ND/2708623

Expkits'de bi ara vardı ama şimdi bulamadım. Kaldırmışlar herhalde.
Tamam gördüm.

Ram seçebilsem, Türkiyede olması problem değil. Expkits - Diğikey aracılığıyla getirtirim.

Ne diyorsunuz hocam uğraşmaya değermi? FSMC ye sadece RAM bağlayacağım. Tek bir çip.

Bir sorum daha olacak

6-)Ben birde sizin şu gecikme ile ilgili söylediklerinizi anlamadım

Alıntı Yapbekletme vs için bu kullanacağın entegrenin gecikmelerini hesaba katmanda lazım ayrıca 70-80ns den fazla sürebilir

Şöyle bir tahmin yapacam ama emin değilim. Bence latch enable edilip data bacaklarındaki bilgiler adres bacaklarına taşındıktan sonra bir süre bekleyip gönderilen adrese ait data bilgisi yollamak gerekiyor.
Bunu birazdaha açıklayabilirmisiniz?



ErsinErce

lcdnin timing chart ı na ve pin durumlarına bir bak 74ahc li versiyonumuzla olabilir gibi geliyor

5.5) RAM konusunda uzman sayılmam o yüzden tepki süresi, pin yapısı harici pek baktığım birşey yok belki daha farklı noktalar önemlidir araştırmak lazım.

6-)rise - fall süreleri
t0 anında fsmc sürücüsü pini 1(yada 0) yapmak istiyor
t1 anında port 1(yada 0) oluyor
t2 anında hat empedansın kapasitene göre 74ahc nin giriş pini 1(0) oluyor
t3 anında 74ahc nin çıkış pini 1(0) oluyor
t4 anında RAMin bacağı 1(0) oluyor
t5 anında RAM o adresi seçmiş oluyor
t6 anında latch aktif ediliyor.

t1-t5 arasındaki süreyi hesaplayıp (gözlemleyip) fsmc sürücüsüne belirtmen gerekiyor.
t6 yı aslında t3-t5 arasına koyup maksimum hıza çıkabilirsin