STM32 ja external RAM ... onko kokemuksia?

Yritän konffata STM32F207 ja Cypressin CY62157EV30L 8-mbit SRAM:ia toimimaan yhteen. Alustana Keilin uVision4.

Onko kellään kokemuksia external sramin käytöstä STM32 kanssa ?

Toimii. Olipa pirun vaikea juttu. Informaatio oli kerta kaikkiaan kiven alla.

Kysymyksessä siis 144 pinnisen STM32 prossun liittäminen ulkoiseen SRAM-lisämuistiin Flexible Static Memory Controllerin (FSMC) kautta.

Prosessi on liian pitkä briiffattavaksi tässä mutta vaatii mm. system_stm32f2xx.c:n konffauksen, FSMC:n ajoitukset ja paljon muuta.

Jos jollakulla tulee ongelmia ja tarvetta tämän kanssa niin kerron mieluusti miten homma tapahtuu.

hhm… jos aikaa kirjotella niin lukija-artikkelithan ovat hyvä paikka tuollasille tarinoille? :wink:

Kiitos tarjouksesta, pitää harkita. FSMC on mielestäni mielenkiintoinen ominaisuus mm. siksi, että sen kautta pystyy ohjaamaan ison resoluution TFT-näyttöjä. Esimerkiksi 5" 800x480 16-bittinen TFT vaatii jatkuvan 7 Mbit/s tiedonsiirron jos halutaan 20 fps. Armi ei sitten paljon muuta ehdi tekemään jos käytetään perus-GPIO:ta (aka bitbänging). FSMC:llä näytönohjaimen muistiavaruus ja rekisterit mäpätään suoraan mikrokontrollerin muistiavaruuteen ja bitit kulkee ihan eri tahtia. Sama idea koskee myös muita ulkoisia RAM ja ROM-piirejä. Armeista löytyy vinhasti tehoa, kun vaan oppii käyttämään.

FSMC:tä tutkiessani kolusin läpi kaikki Keilin ja ST:n foorumit ja siellä on guruilla pikkaisen sellainen asenne, että kun joku jotain kysyy niin aina viitataan johonkin 300-sivuiseen ARM-manuaaliin. Niistä kyllä tieto löytyy, mutta se vaatii tarkkaa lukemista.

Yritän vielä saada tuon ulkoisen 128Mb flash-muistin toimimaan samaan pakettiin niin voisin ehkä kirjoittaa artikkelin RAM/ROM lisämuistin käytöstä Cortex-M3:sen kanssa. Mutta sen aika on tuonnempana.

Artikkeli tästä aiheesta olisi kyllä hieno juttu!

Olen itsekin pähkäillyt RuuviTrackerin FSMC-pinnien kanssa, koska olisi jees mahdollistaa sen käyttö laajennuslevyllä DCMI:n ja ethernetin lisäksi. Käyttöönhän tulee 100-pinninen STM32F4-prossu, joten ihan kaikkia väylien pinnejä ei saada ulos. Pitäisi vain tietää, ettei nyt jätä vahingossa jotain tarvittavista pinneistä pois laajennuspiikkirimoilta.

Kuten varmaan tiedätkin, tästä app notesta löytyy tietoa aiheesta:

st.com/internet/com/TECHNICA … 200423.pdf

Äkkiseltään suurimmat erot 144- ja 100-pinnisen toteutuksen välillä ovat että:

  • 100 pinnisessä käytössä on vain Bank 1 ja 2
  • 100 pinnisessä ei ole address-pinnejä erikseen, vaan osoitteet ja data kirjoitetaan multiplexaamalla samat pinnit D0:D15 (muistaakseni) tai käyttämällä vain 8-bittistä väylää, jolloin toista 8 bittiä voi käyttää osoitteeseen.

Mutta tietämättä mitä olet suunnitellut en osaa kommentoida tarkemmin. En ole perehtynyt RuuviTrackeriin.

FSMC:n käytön vaikein puoli on minusta sen konfigurointi. Eri yhdistelmiä on mahdollista tehdä niin monta erilaista ja debuggaus on vaikeaa. Normaalisti tsekkaan logiikka-analysaattorilla että kaikki toimii niinkuin pitää, mutta kun FSMC hörpöttää täyttä vauhtia niin ei omassa USB-analysaattorissa riitä nopeus eikä pinnit signaalin dekoodaukseen. Niinpä homma menee yrityksen ja erehdyksen kautta.

Toinen hankala juttu (johon en ole vielä löytänyt vastausta) on se, että jotta ulkopuolista flashiä voi käyttää niin, että ohjelmakoodi tai muu data laitetaan valmiiksi muistiin, FSMC pitäisi initialisoida ennen kuin startup-koodi lähtee liikkeelle. Keilissä se tehdään ennen flashäystä ajettavien .ini tiedostojen avulla mutta mistään ei löydy kunnollista ohjetta siihen miten sellainen ini tiedosto laaditaan. Tällä hetkellä tutkin Keilin olemassaolevia esimerkkejä ja yritän muokata niitä toimimaan.

Datalehti sanoo näin:

Keep up the good work jonathanjones!

Jos mahdollista niin kirjoittele edes jonkunnäköistä opusta tai muistilistaa aiheesta, on ihan mielenkiintoinen juttu!