Stm32f Qspi memory mapped liest immer 0xff

Gast #5442624
Lesenswert?
• ▲
▼
Hallo

Ich habe ein Problem mit dem memory mapped Mode bei dem Stm32f7.
Der Flash loader schreibt mir die Daten in den Flash.
Auslesen kann ich diesen über St link Utility.

Das initialisieren im Programm klappt auch.
Memory mapped wird aufgerufen aus der hal lib und im Speicher Bereich 
erscheint nur 0xff an jeder Speicher Stelle.
Wenn ich nun die Lesezeiten mit und ohne DDR Mode Messe bekomme ich auch 
etwa die doppelte Zeit.

Hat jemand die Initialisierung für mich damit ich die vergleichen kann?
Oder eine Idee woran es liegen könnte?
Gast #5442849
Lesenswert?
• ▲
▼
Ohne umfassende Beschreibung ist diese Frage sinnlos ... zuviele 
Unbekannte.

Jens schrieb:
> Ich habe ein Problem mit dem memory mapped Mode bei dem Stm32f7.
> Der Flash loader schreibt mir die Daten in den Flash.

Nun denn, das ST-Link Utility kann das gar nicht, jedenfalls nicht ohne 
das passende (zum Flash-Chip und zur Pin-Konfiguration, 
selbsterstellte?) Plugin.

> Auslesen kann ich diesen über St link Utility.

Und wie soll das gehen, ohne das passende Plugin?

> Das initialisieren im Programm klappt auch.
> Memory mapped wird aufgerufen aus der hal lib und im Speicher Bereich
> erscheint nur 0xff an jeder Speicher Stelle.
> Wenn ich nun die Lesezeiten mit und ohne DDR Mode Messe bekomme ich auch
> etwa die doppelte Zeit.

Da muss man wohl oder übel die QSPI-Register, die GPIO-MODER- und 
-AFR-Register sowie RCC-Register nach der HAL-Initialisierung 
abklappern und mit RM, Datenblatt und Schalplan vergleichen.

> Hat jemand die Initialisierung für mich damit ich die vergleichen kann?

Habe ich schon für diverse Boards, gibt's auch von ST (in der 
Demo-Firmware für verschiedene Discovery-Boards) aber es macht überhaupt 
keinen Sinn, das zu kopieren. Hängt halt von Chip und der 
Pin-Konfiguration ab ...
Gast #5442968
Lesenswert?
• ▲
▼
A. B. schrieb:
> Jens schrieb:
>> Ich habe ein Problem mit dem memory mapped Mode bei dem Stm32f7.
>> Der Flash loader schreibt mir die Daten in den Flash.
>
> Nun denn, das ST-Link Utility kann das gar nicht, jedenfalls nicht ohne
> das passende (zum Flash-Chip und zur Pin-Konfiguration,
> selbsterstellte?) Plugin.

Natürlich hatte ich das passende Plugin ausgewählt.
Ich habe deswegen um es zu testen mit dem F7 Discovery Board getestet 
und dieses wieder von J-Link zu ST Link zurück geflasht.

Wenn es nicht funktioniert hätte würde ich an Adresse 0x90000000 auch 
nicht die Daten sehen, welche ich mit dem FlashLoader geschrieben habe.

A. B. schrieb:
> Da muss man wohl oder übel die QSPI-Register, die GPIO-MODER- und
> -AFR-Register sowie RCC-Register nach der HAL-Initialisierung
> abklappern und mit RM, Datenblatt und Schalplan vergleichen.

Wenn die GPIO Register und die Grundkonfiguration nicht stimmen würde 
kann ich wohl kaum die Chip ID vom QSPI auslesen?

A. B. schrieb:
> Habe ich schon für diverse Boards, gibt's auch von ST (in der
> Demo-Firmware für verschiedene Discovery-Boards) aber es macht überhaupt
> keinen Sinn, das zu kopieren. Hängt halt von Chip und der
> Pin-Konfiguration ab ...

Da könnt noch mein Fehler sein nur finde ich diesen leider nicht.

der Flash ist folgender: N25Q128A
1
#define QUAD_OUT_FAST_READ_CMD               0x6B
2
#define DUMMY_CLOCK_CYCLES_READ_QUAD         10
3

4
  HAL_QSPI_DeInit(&QSPIHandle);
5

6
  QSPIHandle.Init.ClockPrescaler     = 80;
7
  QSPIHandle.Init.FifoThreshold      = 4;
8
  QSPIHandle.Init.SampleShifting     = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
9
  QSPIHandle.Init.FlashSize          = QSPI_FLASH_SIZE;
10
  QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_8_CYCLE;
11
  QSPIHandle.Init.ClockMode          = QSPI_CLOCK_MODE_0;
12
  QSPIHandle.Init.FlashID            = QSPI_FLASH_ID_1;
13
  QSPIHandle.Init.DualFlash          = QSPI_DUALFLASH_DISABLE;
14
  if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK)
15

16

17
  sCommand.InstructionMode   = QSPI_INSTRUCTION_4_LINES;
18
  sCommand.AddressSize       = QSPI_ADDRESS_24_BITS;
19
  sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
20
  sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;
21
  sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
22
  sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
23

24
  sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
25
  sCommand.DataMode    = QSPI_DATA_4_LINES;
26

27

28
  /* Configure Volatile Configuration register (with new dummy cycles) */
29
  QSPI_DummyCyclesCfg(&QSPIHandle);
30

31
  /* Reading Sequence ------------------------------------------------ */
32
  sCommand.Instruction = QUAD_OUT_FAST_READ_CMD;
33
  sCommand.DummyCycles = DUMMY_CLOCK_CYCLES_READ_QUAD;
34
  sMemMappedCfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
35

36

37
  if (HAL_QSPI_MemoryMapped(&QSPIHandle, &sCommand, &sMemMappedCfg) != HAL_OK)    while(1);
Gast #5443152
Lesenswert?
• ▲
▼
Jens schrieb:
> Natürlich hatte ich das passende Plugin ausgewählt.
> Ich habe deswegen um es zu testen mit dem F7 Discovery Board getestet

Aha, da kommen also tröpfenweise die nötigen Infos. Es geht also 
definitiv um ein F7-Discovery Board? Und welches? Es gibt deren zwei ...

> Wenn es nicht funktioniert hätte würde ich an Adresse 0x90000000 auch
> nicht die Daten sehen, welche ich mit dem FlashLoader geschrieben habe.

> Wenn die GPIO Register und die Grundkonfiguration nicht stimmen würde
> kann ich wohl kaum die Chip ID vom QSPI auslesen?

Nochmals aha! Wieder ein Tröpfchen hinterher. Das Auslesen der ID geht 
aber nicht im Memory Mapped, sondern nur im Indirect Read mode. Und war 
das im QPI-Modus oder SPI (1-Line)?

Aber Instruktion im 4-Line-, Adresse im 1-Line- und Daten dann wieder im 
4-Line-Mode wie unten definiert macht überhaupt keinen Sinn.
Das QUAD_OUT_FAST_READ möchte Instruktion und Adresse im 1-Line, Daten 
im 4-Line Modes.

Und (interne!!!) Konfiguration des Flash Chips? Die Default-Anzahl Dummy 
Clocks (und manches mehr) ist im Flash (auch nicht-flüchtig) 
programmierbar. Falsche Anzahl sollte allerdings nur falsche Daten beim 
Auslesen ergeben, nicht lauter 0xFF.

> der Flash ist folgender: N25Q128A

Aha, also ist's das STM32F746-Disco, nicht F769, das nächste Tröpfchen 
...

>
> #define QUAD_OUT_FAST_READ_CMD               0x6B
> #define DUMMY_CLOCK_CYCLES_READ_QUAD         10

>   sCommand.InstructionMode   = QSPI_INSTRUCTION_4_LINES;
>   sCommand.AddressSize       = QSPI_ADDRESS_24_BITS;
>   sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
>   sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;
>   sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
>   sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
>
>   sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
>   sCommand.DataMode    = QSPI_DATA_4_LINES;
>
>
>   /* Configure Volatile Configuration register (with new dummy cycles)
> */
>   QSPI_DummyCyclesCfg(&QSPIHandle);
>
>   /* Reading Sequence ------------------------------------------------
> */
>   sCommand.Instruction = QUAD_OUT_FAST_READ_CMD;
>   sCommand.DummyCycles = DUMMY_CLOCK_CYCLES_READ_QUAD;
>   sMemMappedCfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.