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?
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 ...
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); |
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;
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.