cancel
Showing results for 
Search instead for 
Did you mean: 

STM32 with FlexIO or PIO?

tjaekel
Lead

Dear STM team,

do you consider to add "Programmable IO" (PIO, as in RP2350) or FlexIO (as in NXP MCUs) to your chips?

It would be really cool: often I need interfaces on MCU which are not available as a peripheral devices, such as: MDIO (Master), JTAG (as a host adapter), VGA display. Having a state machine implementing such interfaces via GPIO would be a great enhancement of your chips.

I see a trend towards to have FPGA fabrics in MCU (or FPGA with MCU, Zync, PolarFire) plus having flexible I/Os, programmable I/Os, able to implement new interfaces and protocols.
For instance: your QSPI peripheral is not a full bi-directional (full-duplex) interface. I cannot use it in regular SPI mode. But I would need QSPI and SPI on the same external devices. It would be nice to have a feature like PIO, FlexIO, in order to implement when it is not supported by on-chip peripherals.

Thank you.

(I am diverting away from STM after being a long time user due to such missing features)

4 REPLIES 4
STTwo-32
ST Employee

Hello @tjaekel 

Thank you for this valuable proposition. I've sent it to our Architecture team so they review it and may implement it on one of the Future products. Thanks again for your contribution.

Best Regards.

STTwo-32

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

carlosdelfino
Associate III

I came across this post exactly because I was researching whether the STM32 has something similar to the PIO of the RP family, although I am learning I have seen that it is a very relevant resource for customizing the behavior of the GPIO.

The STM32 family does NOT have anything similar like the PIO (RPi Pico) or FlexIO (NXP).

There is not an option on STM32 MCU to program "user logic" on GPIO pins. You can "only" use the peripherals as they are (e.g. QSPI, SPI, I2C), but no way to implement your own GPIO (pin) based peripheral (e.g. MDIO), "protocol" or new interface.

I am just aware of other MCUs which would "allow" to extend HW, via programming state machines fore GPIO pins and HW protocols (a bit like "FPGA inside MCU"), such as:

  • Raspberry Pi Pico (old RP2040 and new RP2350) - called "PIO" - I am using this one meanwhile - works
  • NXP RT MCUs - called "FlexIO" - I have used also this one - works
  • Cypress (Infineon) PSoC - called ? - not really tried "custom" interfaces

My approach:
Use a STM32 MCU but augment it by an FPGA - now you have the flexibility to implement new peripherals (e.g. an MDIO master, not available on STM32 MCUs, or any other interface you need).

My favorite MCU right now is the RP2350:
I need a QSPI interface. But I want to provide a DIR signal (so that I can change direction on external level shifters). Or I want to sample the Rx response data from external chip 1.. clocks later (in order to compensate level shifter delays). STM cannot do.

I need also a MDIO Master device (which STM32 does not provide, just a Slave).

I can do all this with RP2350.

STM32 is great in terms of "standard HW features" supported, large memory, fast enough system clocks, HAL drivers, SW examples.
But not so great in terms of new requirements, new "protocols" and user extended features. If I need something really state-of-the-art, e.g. an MDIO Master interface - STM32 does not have it (just a slave and used for ETH, not as custom interface).

Anyway: meanwhile I am a "big fan" to go with FPGAs, e.g. PYNQ (ZYNC based). They give me more flexibility.

Often I need also 1V2 peripherals (external HW running with 1V2), but not any MCU can support 1V2 (just 1V8 as min.). But an FPGA can do. So, "my best friend" is meanwhile an FPGA system (with a SoftCore in it, e.g. ARM A9 or ARM A55...).

If you want to go really "future proof" embedded system design - go with FPGAs (or at least MCU plus FPGA).
Check out the PYNQ platform (and boards), the capabilities of ZYNC FPGAs...
This is challenging a lot: building a Linux system for the FPGA system ...(great for IT guys converging to embedded systems)...