2019-02-24 07:18 AM
Hello guys!
I'm working on a custom board with STM32H750VB and a Winbond QuadSPI flash. The ideia is boot the code from QSPI as H750 program memory is a little low. I'm also working with STM32H743VI on a twin custom board, so I can create and debug the code on this board before porting it to H750 and the external flash (as I can't debug on it). I'm using both TrueStudio and CubeMX as starting point, and the boards are running at 400 MHz using internal clock (no crystal).
The problem is, the code is working fine for H743 and not for H750. I've created a simple "blink led", loaded to QSPI from a USB stick (so internal flash acts like a bootloader) and the program runs ok. The same code for H750 jumps to application and fails, nothing happens. Another issue, on H743 I can run the QSPI at 100 MHz (setting prescaler) but on H750 I can't go over 45 MHz!
I've checked the burned code on Winbond and it's fine, so I don't know what is happening. The only difference between the STM32 is revision: "X" for H743 and "Y" for H750. There's an errata for QuadSPI, about writing routines and dummy clocks. Applying the working around for Memory Mapped routine, didn't work.
Do you have any clue about this case?
Thanks a lot!
2019-06-02 08:58 AM
Hello again
Well, my journey with external flash in H750 has another bad chapter... Even with QSPI at 60 MHz, a simple app (using SPI, USART, I2C, GPIOs) works fine. But after adding new peripherals like SDMMC and Ethernet, things become odd. Most of the time the SD Card isn't initialized correctly and parts of the code where I must use HAL_Delay and DWT_Delay (microseconds) lose precision. Exactly the same code on internal flash woks flawless. In theory, running the code on external flash makes the total score goes down, but I've read on AN that it should be improved by M7 cache system.
Am I missing something?
2019-06-02 11:34 AM
Well the cache is of finite size, typically people model the behaviour and create a tighter working set, and balancing the critical stuff into the fastest/closest tiers of the memory subsystem.
Move code into RAM. Check how much FLASH is actually on-die.
The H745/H750 DISCO has double wide QSPI pair of MT25QL512ABB8ESF-0SIT, might experiment if I find time, unfortunately no one is interested in paying for support.
2019-06-08 01:14 PM
Hello Clive, thanks!
I understand your point and I totally agree with you. You help the community a lot, but I still miss the ST team here, especially as H7 is somewhat "new". I just saw on Cube FW 1.4.0 the new H750 DK demos and for external memory using MT25Q, they set the QSPI clock to 50 MHz. So based on that, my first problem "was solved": it is not guaranteed that H7 can work at full speed.
About your tip to move the code to RAM, I don't have much space... RAM_D1 is used for TFT LCD (STemWin buffer) and RAM_D2 for lwIP. DTCMRAM for heap and stack (USB also in use)...