STM32F7 External Memory Layout

Başlatan yldzelektronik, 21 Nisan 2020, 14:47:38

yldzelektronik

Merhaba,

STM32F7 kullanarak üzerinde paralel flash ve sdram bulunduran bir devre hazırlıyorum. Bazı sorularım olacak.

Flash ve SDRAM data ve adres hatları ortak olacak. Hatları nasıl çizmem gerekiyor?



Örneğin yukarıdaki yerleşim planına göre, MCU dan flasha sonra rame mi yoksa mcudan ortaya bir yol oradan her ikisine şeklinde mi olmalı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

SpeedyX

Hocam chip detaylarını vermemişsin ama, genelde RAM yakın, Flash daha uzak olabilir. RAM haberleşmesi çok hızlı olacağı için, onu en yakına koymaya çalış, sonra flasha oradan götürebilirsin. Eğer ikisini de eşit uzaklığa koyabiliyorsan o da olur ama sanıyorum onu yapamayacaksın.
Bir de RAM yol uzunluklarının eşit olmasında fayda var.

yldzelektronik

Hocam selam. Araya başka işler girince konu biraz kaynadı.

SDRAM olarak MT48LC16M16A2F4-6A:GTR Flash olarak MT28EW128ABA1HPC-0SIT kullandım.

Anladığım kadarıyla ram erişimi daha kritik. Peki sdram olması mı bunun sebebi? Çünkü sdram sürekli yenilenme gerektiriyor. Doğru mu değerlendiriyorum?

Ama şunu da eklemek istiyorum. Planım işlemciyi sürekli flash üzerinden çalıştırmak. Yani dahili hafızadaki programı değil harici hafızadaki programı çalıştırmayı düşünüyorum.

Bu şartlar altında da geçerli mi ramin daha çok kullanılması ihtimali?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

SpeedyX

Tüm fikir, erişim hızı yüksek olanın daha yakın olması mantığına dayanıyor.
Flash hem daha yavaştır hem de içinde program olduğu için çoğunlukla sıralı okunur ve bu sayede cache işlemine çok uygundur. O yüzden onu çok hızlı yapmaya nispeten gerek yoktur.
RAM ise bildiğin gibi her adrese her an erişileceği için hızlı olmalı.

SDRAM kendi içinde kapasitör şarjı yöntemiyle kayıtlı bitleri tutar. Zamanla kapasitördeki sızıntı akımlarından dolayı veri kaybolacağı için yenileme gerektirir, bu da aslında RAM ihtiyacı olmadığı zamanlarda da veri yolunun kullanılması gibi bir dezavantaj ortaya çıkarır, dolayısıyla sürekli erişim söz konusudur.

SDRAM için hassas yol uzunluğu eşitlemesine aslında gerek yoktur, Flash için de gerekli değil. Sadece yol uzunluklarının çok farklı olmamasında fayda var.
133 MHz gibi bir veri yolu için yol genişliklerinin minimum olması gerekir (PCB üreticisinin desteklediği minimum).

Sana faydalı olabilecek 3 link ekliyorum.
- http://pcbartists.com/design/embedded/stm32-sdram-pcb-layout/
- https://archive.eetindia.co.in/www.eetindia.co.in/STATIC/PDF/201002/EEIOL_2010FEB15_STOR_INTD_AN_01.pdf?SOURCES=DOWNLOAD
- https://www.cypress.com/file/323161/download

yldzelektronik

Hocam açıklama ve kaynaklar için teşekkürler. Oldukça faydalı dokümanlar.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Selamlar

Bu proje için 6 kat pcb tercih ediyorum. Stack up ise Top Layer, 3v3, Inner 1 (High Speed), Inner 2 (High Speed), GND, Bottom Layer şeklinde.

MCU, ram ve flash için vdd hatlarının çekilmesi gerekiyor. Bu arkadaşların beslemelerini decoupling üzerinden vermek gerekiyor. Alan çok fazla olmadığı için de top layer dan götüremiyorum. Bu şartlar altında 3v sinyali için via attığım an 3v3 plane e temas edecek. Bu durumda besleme decoupling üzerinden değil alttaki plane üzerinden alınmış olacak. Bu sorunu çözmek için her ic altına keepout plane mi koymak gerekiyor? O zaman da plane bütünlüğü bozulmayacak mı?

Ben mi bir şey kaçırıyorum yoksa bir terslik bu işte mi var? Aşağıdaki resimde görülüyor.


Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

WrtM

Merhaba, alt kattaki 3V3 plane kapasite gibi davranacak zaten. Hatta anlık ilk akım çekilimi bu plane üzerinden daha sonra ise decoupling kapasiteler üzerinden olacak. Via atmanızın hiç bir mahsuru bulunmuyor. Kapasitelerin olduğu top layerda güç dağılımı yapabilmek pratikte pek mümkün değil.

ibocakir

Alıntı yapılan: yldzelektronik - 30 Nisan 2020, 10:42:53Bu proje için 6 kat pcb tercih ediyorum. Stack up ise Top Layer, 3v3, Inner 1 (High Speed), Inner 2 (High Speed), GND, Bottom Layer şeklinde.

Hocam bu Stackup'a göre empedanslarınızı nasıl belirlediniz? 50Ohm Single Ended veya 100Ohm Differantial pair için yol kalınlıklarınızı nasıl belirlediniz? Hangi lamine malzeme kullanıyorsunuz?

Besleme hattı içinse,
Aslında en doğru olanı RAM'i Top'a koyup, decouplingleri Bottom'a koymak. Böylece loop en kısa şekilde tamamlanmış olurdu. Fakat Double Sided PCB yapmak istemiyor olabilirsiniz, normal. Bu nedenle RAM'in BGA'inin her padine en az bir via gelecek şekilde via atmanız gerekir ki bunu yapmışsınız. Sonra ise RAM'in sağında ve solundaki decouplinglerinde yanlarına her birinin pad'ine en az 1 via gelecek şekilde via atmalısınız. Ardından Power Plane'i split etmeniz gerekecek. Böylelikle çektiğiniz altın sarısı yollar(Sanırsam L3) çekilmeyecek, RAM ve kapasiteler power plane'den bağlanmış olacaktır. BGA'in altı power plane'de komple 3V3 hattı olursa L3'ten çektiğiniz yollara göre empedansı çok çok daha düşük olacaktır, nispeten ground loop da düşük olur. Akım ihtiyacı konusunda da sıkıntı kalmaz.

Diğer yandan L3 ve L4'ten High Speed sinyal yürütmek de EMI açısından biraz sakıncalı olabilir. Yolları birbirine dik yürütmeniz gerekecektir. Bahsettiğim son konuyla alakalı bilgileri aşağıdaki makalede bulabilirisiniz.
Alıntı YapTo minimize crosstalk not only between two signals on one layer but also between adjacent layers, route them with 90° to each other
http://www.ti.com/lit/an/scaa082a/scaa082a.pdf?ts=1588240945032

yldzelektronik

Hocam merhaba, sırayla yanıtlamaya çalışayım.

Empedans konusunu altium ile hallettim. Yol kalınlık ları için oluşturduğu profili kullanıyorum. Üretimi JLCPCB den yaptıracağım. Bu yüzden onların sayfasındaki verileri kullandım. Ancak orada prepreg veya core için herhangi bir veri yok. Kalınlık dışında. Bu yüzden altium un ürettiği profilden %100 emin değilim. Ama JLCPCB Empedans için bir hesaplayıcı sayfası oluşturmuş. Orada çıkan sonuçlara yakın değerler üretiyor altium. Ama bireber aynı değil. Yaklaşık 100 micronluk farklar var. Katsayı farkı gibi geldi bana.

Çift yüzlü dizgi evet istemiyorum. Bu yüzden her şey top layer da olmalı.

Yalnız power plane split etmek ne demek tam anlamadım.

Ama genel görüş anladığım kadarıyla decoupling cap 3v3 plane bağlı olsun da varsın Ram, flash, mcu vs direkt power plane den beslensin.

Doğru mu?

Ayrıca @ibocakir son söylediğiniz biraz işleri zora sokuyor. Sanırım başta stackup yanlış yapıldı.

Mevcut durum şöyle

TL, 3V3, IL1, IL2, GND, BL

Ama sanırım şöyle olmalıydı

TL, IL1, GND, IL2,3V3,BL (GND ve 3V3 yer değiştirebilir)

Yanılıyır muyum?

Diğer türlü hem mevcut stack up koruyup hem de senin söylediklerini gerçekleştirmek pek mümkün olmayacak. Zira daha lcd vs gibi yollar var. Gerçi en yüksek frekanslı olan yollar Ramin ve hepsini tek layer a koydum. 2 veya 3 pin hariç.

Diğer sinyaller dcmi, ethernet, SD card, uart, lcd, gpio vs gibi sinyaller.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ibocakir

Hocam Ethernet, SDRAM gibi High Speed yollar için empedans hesabı kesin yapmak lazım diyebilirim. Yapmasan çalışmaz mı bilmiyorum ama çok zor da bir şey değil aslında. Saturn PCB Design ToolKit ile hesaplayabilirsiniz. Eğer core/prepreg seçmediyseniz stardart 4.2 FR4 diye yapıyor sanırım onlar.

https://saturnpcb.com/pcb_toolkit/

-----------------

https://www.google.com/search?q=altium+power+plane+split&rlz=1C1CHBD_trTR777TR777&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjBzPyuoZDpAhVElFwKHU4OAs0Q_AUoAXoECAoQAw&biw=1536&bih=754#imgrc=XsM1asficYDcyM

Şu linkte bir görsel var. Power plane split, elindeki plane'i bölüyorsun adından anlaşılacağı üzere. Örneğin elinizde +3V3 var, bununla muhtemelen SD Card da besliyorsunuzdur, Ethernet de, SDRAM de... Her hatta ayrı ferrite bead koyarak birbirleri arasındaki gürültüyü süzebilirsiniz.

Mesela:  +3V3 ---- Ferrite Bead ---- +3V3_SDRAM
                  |------- Ferrite Bead ---- +3V3_ETH
                  |------- Ferrite Bead ---- +3V3_SDIO

Ardından elinizdeki +3V3_SDRAM'i RAM'in altına komple power split yapmalısınız. Söylemek istediğim aslında buydu. Aynı şekilde Ethernet PHY'ın da altına +3V3_ETH gibi.

-----------------

Şu stackup da sıklıkla kullanılıyor, genelde de SIG ile POWER arasındaki prepreg kalın tutuluyor.
TOP - GND - SIG - POWER - GND - BOTTOM
Bu stackup'a göre 1 signal layer azalmış gibi görünse de toplamda 3 adet impedance controlled Layer mevcut diyebiliriz. Fakat arka arkaya 2 signal layer(yani komşu layer/adjacent layer) kullanınca impedance kontrolünü kaybediyorsunuz. Böylelikle SDRAM'in hattını L3'ten ya da L4'ten yürütmeniz bir anlam ifade etmiyor.

yldzelektronik

Alıntı yapılan: ibocakir - 30 Nisan 2020, 16:50:09Hocam Ethernet, SDRAM gibi High Speed yollar için empedans hesabı kesin yapmak lazım diyebilirim. Yapmasan çalışmaz mı bilmiyorum ama çok zor da bir şey değil aslında.
...

Çalışıyor hocam, denedim.  :) Hatta bu stackup ile sinyaller birbirini dik kestiği halde  :-[

Komşu katmanlar konusuna bir çözüm bulmaya çalışıyorum. Kart çok küçük (50x65mm) olduğu için elimden fazla bir şey gelmiyor.

Bir de hocam bir sorum daha var. Ethernet phy olarak LAN8742 kullanıyorum. Ancak başka bir kart üzerinde koydum. Bu durum sorun oluşturur mu? Aynı karta mı koymak gerekir?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ibocakir

Alıntı yapılan: yldzelektronik - 01 Mayıs 2020, 14:45:16Çalışıyor hocam, denedim.  :) Hatta bu stackup ile sinyaller birbirini dik kestiği halde  :-[

Hocam sanırım paralel gittiği halde diyecektiniz :)

PHY'ı başka karta koydunuz ama hangi sinyalleri yürütüyorsunuz? Tahminimce RMII.

Önemli olan 2 husus kullanılan konnektörler ve kablo uzunluğu. Ya da kablo yok da Board to Board Connectörle falan mı geçiyorsunuz? İmkan varsa PHY'ı bu karta alıp Raw ethernet datalarını(MDI) diğer karta taşıyıp RJ45 vs bir konnektöre çıkmanız daha mantıklı olacaktır.

Bu arada ben yaptım çalışıyor dokunmaya gerek yok yaklaşımı yerine daha doğrusu nasıl olur diye çalışmak daha güzel olacaktır zannımca  ;)

yldzelektronik

#12
Alıntı yapılan: ibocakir - 01 Mayıs 2020, 17:44:40Hocam sanırım paralel gittiği halde diyecektiniz :)

PHY'ı başka karta koydunuz ama hangi sinyalleri yürütüyorsunuz? Tahminimce RMII.

Önemli olan 2 husus kullanılan konnektörler ve kablo uzunluğu. Ya da kablo yok da Board to Board Connectörle falan mı geçiyorsunuz? İmkan varsa PHY'ı bu karta alıp Raw ethernet datalarını(MDI) diğer karta taşıyıp RJ45 vs bir konnektöre çıkmanız daha mantıklı olacaktır.

Bu arada ben yaptım çalışıyor dokunmaya gerek yok yaklaşımı yerine daha doğrusu nasıl olur diye çalışmak daha güzel olacaktır zannımca  ;)

Evet birbirine paralel ve komşu katmanlar. Geometriyi unuttum sanırım :)

Ama yaptım oldu kafasında değilim. Zira bu konuyu bu yüzden açtım. Bir işi yapmak değil, doğru işi doğru şekilde yapmanın peşindeyim...

Diğer taraftan RMII kullanıyorum. Ayrıca diğer karta b2b konnektör ile alıyorum. Pazarlık yapıyor gibi görünmek istemiyorum ama kart çok küçük ve tonla malzeme yığıldı. Hakikaten totomu çevirecek alan kalmadı :D

İnşallah bu şekilde çalışır demekten başka çarem yok şuan :)
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ibocakir

Hocam o zaman empedans hesabına daha da dikkat etmeniz gerekiyor. Match olmadığı sürece yolda kayıplar, yansımalar daha fazla olacaktır  :-[

SpeedyX

Mesajlarda sürekli bir empedans uygunlaştırma konusu geçiyor... Tüm chipler belli, frekanslar belli..
Empedans uygunlaştırmanın bu kartta neden gerekli olduğunu ispat yöntemiyle yada herhangi bir matematiksel yaklaşımla açıklayabilir misiniz? @ibocakir
Öğrenmek amacıyla yazıyorum.