Forum: Mikrocontroller und Digitale Elektronik STM32F4 FSMC / FMC mit SDRam und beispielsweise Flash


von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Hallihallo!

Gibt es die Möglichkeit an den FMC bzw. den FSMC zwei verschiedene 
Geräte anzuschließen, in meinem speziellen Fall wäre das über FMC einmal 
einen SDRam und zusätzlich einen AD7606 ADC-Wandler.
Falls ja, wie funktioniert das? Habe versucht da schon ein wenig zu 
googlen, aber wurde nicht wirklich schlau dadurch, etwas vom 
"multiplexen" habe ich gelesen. Werden die Anschlüsse einfach doppelt 
belegt und der Controller kümmert sich nach der Initialisierung um alles 
weitere? Wie schaut es da mit dem Tempo aus, zugegriffen kann ja immer 
nur auf ein Device, kommt da noch zusätzliche Zeit ins Spiel für den 
Wechsel von einem Device auf das andere?

Danke euch!
Grüße Reggie

von Falk B. (falk)


Lesenswert?

@ Reginald Leonczuk (Firma: HS Ulm) (reggie)

>Gibt es die Möglichkeit an den FMC bzw. den FSMC zwei verschiedene
>Geräte anzuschließen, in meinem speziellen Fall wäre das über FMC einmal
>einen SDRam und zusätzlich einen AD7606 ADC-Wandler.

Wahrscheinlich schon.

>Falls ja, wie funktioniert das?

Den SDRAM schließt man ganz normal gemäß Datenblatt an. Den AD-Wandler 
schließt man ebenfalls an den gleichen Datenbus an.

>Habe versucht da schon ein wenig zu
>googlen, aber wurde nicht wirklich schlau dadurch, etwas vom
>"multiplexen" habe ich gelesen.

Ja, das wird gemultiplext. Genauer, Zeitmultiplex.

https://www.mikrocontroller.net/articles/Multiplexen#TDMA

>Werden die Anschlüsse einfach doppelt
>belegt und der Controller kümmert sich nach der Initialisierung um alles
>weitere?

Ja. Die einzigen Signale, welche nicht doppelt belegt werden, sind die 
CS (chip select) Signale.
Diese wählen beim Buszugriff den jeweiligen Chip aus. Alle anderen geben 
dann Ruhe.

>Wie schaut es da mit dem Tempo aus, zugegriffen kann ja immer
>nur auf ein Device, kommt da noch zusätzliche Zeit ins Spiel für den
>Wechsel von einem Device auf das andere?

Das kommt auf den Controller im uC an, meistens sind das nur sehr wenige 
Takte.

von Reginald Leonczuk (Gast)


Lesenswert?

Sauber, danke, das hilft mir weiter!

von e-d (Gast)


Angehängte Dateien:

Lesenswert?

hier mal als Anhaltspunkt ZBV:
-aus readme:
/**
  @page DMA_FLASH_RAM DMA_FLASH_RAM

  @verbatim
  ******************** (C) COPYRIGHT 2011 STMicroelectronics 
*******************
  * @file    DMA_FLASH_RAM/readme.txt
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    19-September-2011
  * @brief   Description of the DMA FLASH to RAM example.
  ************************************************************************ 
******
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING 
CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM 
TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR 
ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS 
ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS 
OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR 
PRODUCTS.
  ************************************************************************ 
******
   @endverbatim

@par Example Description

This example provides a description of how to use a DMA channel to 
transfer
a word data buffer from FLASH memory to embedded SRAM memory.

DMA2 Stream0 channel0 is configured to transfer the contents of a 
32-word data
buffer stored in Flash memory to the reception buffer declared in RAM.

The start of transfer is triggered by software. DMA2 Stream0 channel0 
memory-to-memory
transfer is enabled. Source and destination addresses incrementing is 
also enabled.
The transfer is started by setting the Channel enable bit for DMA2 
Stream0 channel0.
At the end of the transfer a Transfer Complete interrupt is generated 
since it
is enabled. The Transfer Complete Interrupt pending bit is then cleared.
When the DMA transfer is completed the DMA Stream is disabled by 
hardware.
The main application can check on the Stream Enable status to detect the 
end of
transfer or can also check on the number of remaining transfers which 
should be
equal to 0 at the end of the transfer.
A comparison between the source and destination buffers is done to check 
that all
data have been correctly transferred.

STM32 Eval board's LEDs can be used to monitor the transfer status:
 - LED4 is ON when the program starts.
 - LED3 is ON when the configuration phase is done and the transfer is 
started.
 - LED5 is ON when the transfer is complete (into the Transfer Complete 
interrupt
   routine)
 - LED6 is ON when the comparison result between source buffer and 
destination
   buffer is passed.

It is possible to select a different Stream and/or channel for the DMA 
transfer
example by modifying defines values in the file main.h.
Note that only DMA2 Streams are able to perform Memory-to-Memory 
transfers.

There are different options to check on the DMA end of transfer:
 1. Use DMA Transfer Complete interrupt.
 2. Use DMA enable state (the DMA stream is disabled by hardware when 
transfer
    is complete).
 3. Use DMA Stream transfer counter value (the counter value is 
decremented when
    transfer is ongoing and is equal to 0 at the transfer end).
 4. Use DMA Transfer Complete flag (polling mode).

In this example methods 1, 2 and 3 are provided (you can select between 
method 2
and 3 by uncommenting relative code in waiting loop in the main.c file).


@par Directory contents

  - DMA_FLASH_RAM/system_stm32f40x.c   STM32F4xx system clock 
configuration file
  - DMA_FLASH_RAM/stm32f4xx_conf.h     Library Configuration file
  - DMA_FLASH_RAM/stm32f4xx_it.c       Interrupt handlers
  - DMA_FLASH_RAM/stm32f4xx_it.h       Interrupt handlers header file
  - DMA_FLASH_RAM/main.c               Main program
  - DMA_FLASH_RAM/main.h               Main program header file


@par Hardware and Software environment

  - This example runs on STM32F4xx Devices Revision A.

  - This example has been tested with STM32F4-Discovery (MB997) RevA and 
can be
    easily tailored to any other development board.


@par How to use it ?

In order to make the program work, you must do the following :

 + EWARM
    - Open the DMA_FLASH_RAM.eww workspace
    - Rebuild all files: Project->Rebuild all
    - Load project image: Project->Debug
    - Run program: Debug->Go(F5)

 + MDK-ARM
    - Open the DMA_FLASH_RAM.uvproj project
    - Rebuild all files: Project->Rebuild all target files
    - Load project image: Debug->Start/Stop Debug Session
    - Run program: Debug->Run (F5)

 + TASKING
    - Open TASKING toolchain.
    - Click on File->Import, select General->'Existing Projects into 
Workspace'
      and then click "Next".
    - Browse to  TASKING workspace directory and select the project 
"DMA_FLASH_RAM"
    - Rebuild all project files: Select the project in the "Project 
explorer"
      window then click on Project->build project menu.
    - Run program: Select the project in the "Project explorer" window 
then click
      Run->Debug (F11)

 + TrueSTUDIO
    - Open the TrueSTUDIO toolchain.
    - Click on File->Switch Workspace->Other and browse to TrueSTUDIO 
workspace
      directory.
    - Click on File->Import, select General->'Existing Projects into 
Workspace'
      and then click "Next".
    - Browse to the TrueSTUDIO workspace directory and select the 
project "DMA_FLASH_RAM"
    - Rebuild all project files: Select the project in the "Project 
explorer"
      window then click on Project->build project menu.
    - Run program: Select the project in the "Project explorer" window 
then click
      Run->Debug (F11)

 * <h3><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h3>
 */

von dasrotemopped (Gast)


Lesenswert?

FMC = flexible memory controller - kann SD-RAM
FSMC = flexible STATIC Memory Controller - kein SD-RAM
einen FMC haben nur die großen uCs von ST, F4/F7 High Performance Linie.

der AD-Wandler kann vielleicht an das i80 Interface vom F(S)MC 
angeschlossen werden. Optional ist vielleicht das serielle Interface 
vorzuziehen. Kommt auf die gewünschte Samplerate an.

Gruß,

dasrotemopped.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Also ich arbeite schon mit den Parallelen Ports mit FMC (F429) sowie 
FSMC (F407), auch mit DMA. Allerdings jeweils immer nur ein Device das 
da dran hängt. Meine Frage richtete sich an die Möglichkeit zwei Devices 
an einem MemoryController anzubinden und abwechselnd anzusprechen 
(selbstverständlich ohne abwechselndes De/Init).
Der AD-Wandler läuft im übrigen eher langsam, maximal einige Dutzend 
kHz, allerdings mit zwei Kanälen.

Im Internet habe ich bisher leider nichts zu dem Thema gefunden.

von holger (Gast)


Lesenswert?

>Im Internet habe ich bisher leider nichts zu dem Thema gefunden.

Dein ADC entspricht in etwa dem Anschluss eines LCD am F(S)MC.
Schau dir das mal an. Da findest du genug. Zieh dir mal
die Schaltpläne von den grossen EVAL Boards von ST.
Da sind oft SRAM, FLASH und LCD gemeinsam am F(S)MC
angeschlossen.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

holger schrieb:
> Dein ADC entspricht in etwa dem Anschluss eines LCD am F(S)MC.
> Schau dir das mal an. Da findest du genug. Zieh dir mal
> die Schaltpläne von den grossen EVAL Boards von ST.
> Da sind oft SRAM, FLASH und LCD gemeinsam am F(S)MC
> angeschlossen.
Ui, Geheimtipp! Danke hierfür!

von W.S. (Gast)


Lesenswert?

Reginald L. schrieb:
> Meine Frage richtete sich an die Möglichkeit zwei Devices
> an einem MemoryController anzubinden und abwechselnd anzusprechen
> (selbstverständlich ohne abwechselndes De/Init).

Schau nach in der Doku, was für welche und wieviele Chip-select-signale 
die Businterfaces bieten. Von ST vorgesehen ist jedenfalls durchaus, daß 
man sowohl SDRAM als auch anderes wie z.B. statischen RAM oder externen 
Flashrom oder sonstwas an den Bus anschließen kann.
ABER: Die signale für den SDRAM sind doch eher schnell, so im Rahmen von 
einigen Nanosekunden und da sollte man sich vorher gut überlegen, mit 
wieviel Längen an Leiterzug und mit wieviel sonstigen IC-Pins man diese 
Signale belasten darf, ohne daß deren Funktion beeinträchtigt wird. Ich 
wäre da bei vorhandenem SDRAM mit allen weiteren Verwendungen des 
herausgeführten Busses sehr vorsichtig.

Ach ja, die ersten Musterserien der F7xx im 208er Gehäuse hatten/haben 
da noch nen Bug drin: man kann bei denen nichts mischen, sondern nur 
exclusiv entweder SDRAM oder was Statisches dranhängen.

W.S.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

W.S. schrieb:
> Ach ja, die ersten Musterserien der F7xx im 208er Gehäuse hatten/haben
> da noch nen Bug drin: man kann bei denen nichts mischen, sondern nur
> exclusiv entweder SDRAM oder was Statisches dranhängen.
Das ist schon mal klasse, dass du das erwähnst, ich schaue nämlich schon 
seit ein paar Tagen nach der 7er Serie.

von *.* (Gast)


Lesenswert?

> Ich wäre da bei vorhandenem SDRAM mit allen weiteren Verwendungen des
herausgeführten Busses sehr vorsichtig.

Wenn wir 74LV245 o.ä. nah dranhängen sollte das doch gegessen sein?

von W.S. (Gast)


Lesenswert?

*.* schrieb:
> Wenn wir 74LV245

Guck mal in die Spec's der gängigen SDRAM's. Hier geht es eher um 
Dämpfungs-Widerstände (so 22..33 Ohm) in den Adress- und 
Steuerleitungen, damit Reflexionen kein Fehlverhalten auslösen.

So langsam wird die Sache zu kritisch für normale Bastler. Mit den 
50..70 MHz vor paar Jahren war das noch recht leicht, mit den jetzigen 
rund 120 MHz Systemtakt geht's grad noch so (die 180 MHz bei den 'F4xx' 
brauchen so viele Waitstates, daß es ein bissel witzlos wird) und mit 
den nächsten Chips und mehr als 200 MHz sehe ich ein dezentes Warnschild 
am Wegesrand. Wenn man nicht über nen engen Kontakt zum Hersteller und 
über Meßtechnik und viel Zeit+Geld verfügt, wird das Designen der 
engeren Peripherie (SDRAM usw.) leicht zum Fiasko.

W.S.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.