2026-02-22 5:37 PM - edited 2026-02-22 8:09 PM
Hi,
The input to the MCU is basically 1-bit (0/1 values), but it would be better if it could process multiple bits.
The input is at 150MHz, and 10,000 data items are received at once. The MCU must store them in uint8_t data[10000]. When a 1-bit value is received, data[10000] contains 0/1 values. For the next data item, the 0/1 values must be accumulated and added for calculation.
This is what I’ve come up with:
1) GPIO: 150MHz input is not possible.
2) ICP + DMA: It seems possible, but it doesn't seem to work. ICP cannot reliably capture 150MHz, and DMA doesn't seem to be able to store data in SRAM.
3) DCMI or DCMIPP: 8-16bit data can be processed, and accumulation is possible using DMA. However, the maximum speed is 80MHz or 120MHz.
Is there a model among the stm32 models that can do this on its own mcu?
2026-02-22 6:12 PM - edited 2026-02-22 6:18 PM
What does the signal coming in look like? If it's just data, no clock, I don't think any STM32 can do this, at least not if you need the reads to be synchronized to something. If an occasional bit slip or skip is allowed:
At 150 MHz you would need to sample using something like SPI, not through the GPIO registers.
On the STM32H723, SPI max is 125 MHz, OCTOSPI is max 140 MHz, so no luck there.
On the STM32N6x5, max XSPI clock is 185 MHz, so that's a possibility. Max SPI click is only 115 MHz.
It's possible a memory interface could also work.
> MCU must store them in uint8_t data[10000]
As a 0 or 1 per sample? Not possible. But you can post-process the data.
2026-02-22 8:30 PM
thanks TDK.
Since the PCB hasn't been designed yet, anything is possible, but the clock can be pulled from the MCO pin of the MCU or can be supplied externally.
After 10,000 data (0/1) are received, the next data item is actually received consecutively.
Using XSPI + DMA, is it possible to split the DMA address into two area, so that one side receives the data while the other side accumulates the data?
2026-02-23 12:38 AM - edited 2026-02-23 12:40 AM
Hi,
sampling an input at 150MHz ...? I think, impossible on any cpu without dedicated hardware , lets say: a SPI input, that can run at 150MHz .
No STM , afaik.
But what comes to my mind : the RP2350 , dual M33 cores at 150MHz ;
AND the programmable PIO state machines, can sustain 360 Mb/s during the active scanline period .
With one of the PIO it should be no problem to make a 150Mbit SPI .
2026-02-23 6:01 AM
DMA has the half-complete and full-complete interrupt that lets you do this. Or you can use double-buffer mode to store into separate regions.
2026-02-24 3:17 AM
I have one more question.
It seems physically possible to receive data using DMA over xSPI.
But the question is, is it possible to receive data over xSPI in a free-running manner?
2026-02-24 3:24 AM - edited 2026-02-24 3:24 AM
> No STM , afaik.
I would say, not with a general-pupose MCU like the Cortex M is one.
I think this use case asks for specialized hardware. Either a DSP, or an application processor (like a Cortex A) with peripheral hardware suited for the purpose.
2026-02-24 5:27 AM
Isn't DMA free-running?
You can't read and process 150 MHz data continuously. Not enough CPU for that.
2026-02-24 5:56 AM
> You can't read and process 150 MHz data continuously. Not enough CPU for that.
I would second that, converting it into a SPI stream does not change the problem. xSPI might get it into the core, but you still cannot process it in a useful manner for any output stream fast enough.
I suppose one could de-serialize the data with external hardware to 8-bit or 16-bit, and read it in by the core in parallel manner, as byte / word.
The roughly 2MByte/s might be manageable by a H7 or less - but requires specialized hardware.
2026-02-24 4:29 PM - edited 2026-02-24 4:29 PM