0
\$\begingroup\$

I'm considering to design an audio processor based on the STM32H7. I want to experiment with MCU-based DSP instead of using a dedicated DSP. I chose this high-end ARM MCU to have ample headroom for audio DSP calculations.

I also want to program a delay. Assuming I'm using 24-bit samples at 48kHz, a three seconds buffer for a three second delay on a mono channel is already going to take up 432kB memory. Just for fun I looked for the maximum external memory configuration, which is SDRAM with 13-bit row address, 11-bit column address and 4 internal banks, giving 256MB memory (32-bit word length). Two of these can be addressed, giving a total of 512MB.

I checked online to find memory ICs that matched that spec, but did not find any with the correct row/column address lengths and also all of those matching the memory configuration were DDR modules and the STM32H743 does not support DDR.

My questions are:

  • Can I use a DDR chip on a non-DDR controller?
  • Is it crazy to attempt to add 512MB of external SDRAM to a STM32H7? Or why are memory modules that match these criteria so hard to find?
  • Would perhaps Quad-SPI Flash fit better? I'm afraid it's too slow for an audio delay application.
\$\endgroup\$
  • \$\begingroup\$ Looking at the costs - if you need so much RAM why not use a full-featured MPU? It may actually end up being cheaper... \$\endgroup\$ – Jan Dorniak Sep 22 '18 at 23:41
  • \$\begingroup\$ Even a high-end Arduino comes with a piggy-back 256MB Dram IC in a BGA package. They offer so much because they do not expect expansion of Dram, as is would be untenable. A bona-fide CPU with a Dram controller built in is more like what you need. They can control several GB of DRAM as part of the same memory map. The drivers are supposed to keep house-keeping chores abstracted from the programmer and user, such as columns and bank sizes. \$\endgroup\$ – Sparky256 Sep 23 '18 at 0:28
  • \$\begingroup\$ If you actually need that much memory, you have chosen the wrong compute platform. The irony is that cheap external-memory SoC modules don't really cost any more than high end-internal flash MCUs; they are more complicated, yes, but not more expensive. \$\endgroup\$ – Chris Stratton Sep 23 '18 at 4:03
  • \$\begingroup\$ Thank you for the input. I considered an MPU at first but it is a significant step up in complexity (from a board design point of view) from a LQPF M7. In the end I massively exaggerated the amount of required RAM, in the end, for 10 seconds stereo delay, i just need around 3MB of RAM, so adding 32MB of external RAM should totally sufice. \$\endgroup\$ – Xaser Sep 23 '18 at 9:07
3
\$\begingroup\$

Can I use a DDR chip on a non-DDR controller?

No.

Is it crazy to attempt to add 512MB of external SDRAM to a STM32H7?

It's just barely possible, but probably not worth the trouble. The largest SDRAM parts available are 512 MBit (not MByte). They can be configured as 64M x 8. Four of these in parallel can operate as a 64M x 32 = 256 MB memory; two banks of this gives you 512 MB.

Would perhaps Quad-SPI Flash fit better?

No. Flash isn't appropriate for applications which require memory to be continuously written to.

\$\endgroup\$
1
\$\begingroup\$

If I interpret your question more broadly as 'How do I connect a large external memory to the STM32H7', a solution is to examine the design of the ST Microelectronics STM32H743 evaluation board with 32M bytes of DRAM, for which ST Microelectronics provides complete design information: schematics, PCB layout, BOM, and software:

https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-eval-boards/stm32h743i-eval.html

If you want to test your design ideas using such an evaluation board, you might consider the ST Microelectronics STM32F746 Discovery Kit, because while the processor is only half the clock rate of the STM32H7, the Discovery Kit is inexpensive and widely available. This board has 8M bytes of DRAM (again, ST Microelectronics provides full design documentation):

https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html

If I interpret your question even more broadly, as looking for an embedded solution with a fast processor and large DRAM, I agree with the comment by Jan Dorniak, and suggest looking at a small embedded single-board computer (SBC). These modules are easy to integrate into a product. That has been my solution for similar problems. The power consumption is higher than the STM32H7, but the NXP i.MX6 SBC I use in one design provides an astonishing amount of processing power for 2-3 Watt power consumption (for comparison, STCube32MX estimates 300mW consumption for the STM32H7 processor core at 400MHz, I do not have figures for the entire board).

A complication when using high-performance processors for such processing is input-to-output synchronization. If your solution for the STM32H7 is to use DMA for SPI I/O, and keep the input and output channels synchronized, be aware that (at least on the STM32F7, with which I have some experience), the Cortex-M7 processor data cache must be dealt with, because the DMA controller bypasses the processor cache. The most elegant solution is to use the processor MPU to make a small section of the memory non-cacheable, and use that for DMA I/O buffers.

\$\endgroup\$
  • \$\begingroup\$ Thank you. I accepted duskwuff's answer because it was more to the point, but your input was still valuable, especially the paragraph on synchronisation. For the application that I'm thinking of, a single board computer would not be profitable. \$\endgroup\$ – Xaser Sep 23 '18 at 9:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.