As someone who has never had an opportunity to play with it, I’m fascinated by what people are doing with PIO. In many cases it seems to be a ‘good enough’ FPGA on absurdly cheap hardware.
Honestly what they're describing can be done on any MCU without PIO - set up clock division/PLL to provide ADC clock, use that same clock for timer source, set up a timer channel to trigger the pulse, set up a timer channel to trigger ADC DMA capture start, start the timer.
Congrats, now you have capture synchronized to pulse start "providing the sub-microsecond timing needed for ultrasound acquisition".
I think you miss understood the challenge. They are using a 60Msps ADC with a parallel port interface. The challenge is capturing the 600Mbit/s of data and having enough CPU and memory bandwidth to do anything useful with it.
If your microcontroller has a parallel port interface, you would use the clock setup you described. This works, I've done it before, but there was very little CPU left to do anything useful with the data.
It's neat that they used the PIO, its demonstrating how that peripheral fills a niche where you things that might have been impossible without an FPGA, suddenly become doable on a microcontroller.
Well, parallel port adc capture has nothing to do with PIO either - on STM32 you would just set up DMA on a GPIO port, then capture 16bit data. The real question is what RP2040 is going to do with 120MB/s of data.. and the answer is, it can't process it or send it over (12Mbps aka 1.5MB/s) USB. So, would only work in low duty cycle pulse mode, no streaming.
Hi, author here. I must say I'm not 100% confident in everything the STM32s do - and the rp2040/rp2350 is an easy one. One of my pieces of work is : continuous acquisition, acquisitions, processing, and writing on a fast storage, which allows for continuous 10MB/s+. All of this can be managed through the 2 cores, and the PIOs.
In short, PIOs are really a game changer, I have dumped a FPGA from the previous iteration to go rp2040.
BUT... solutions like some of PIC32 and their integrated 40Msps ADC are really nice and worth exploring (if I had the time). The positive thing about the pico is that it's so common and tools are so common that it's really a pleasure developping on this device =)
and one has a complete hardware solution?
That said, it's a cool project, even if it doesn't have a practical use.
Quote:
> The hardware is designed for pedagogical and prototyping purposes. Common applications include:
> - Pulse-echo / A-mode imaging — the core use case (details)
> - Non-destructive testing — crack detection, material characterization (details)
> - Ultrasound tomography — transmission and reflection modes (details)
> - Array imaging — synthetic aperture beamforming with the MUX PMOD extension
> - Transducer characterization — test and evaluate piezoelectric probes (compatible probes)
> - Signal processing research — a flexible platform for new methods
Congrats, now you have capture synchronized to pulse start "providing the sub-microsecond timing needed for ultrasound acquisition".
If your microcontroller has a parallel port interface, you would use the clock setup you described. This works, I've done it before, but there was very little CPU left to do anything useful with the data.
It's neat that they used the PIO, its demonstrating how that peripheral fills a niche where you things that might have been impossible without an FPGA, suddenly become doable on a microcontroller.
I can assure you these use cases are hard to achieve with a standard STM32 as someone whos almost finished with their PhD in mid-air ultrasonics.
In short, PIOs are really a game changer, I have dumped a FPGA from the previous iteration to go rp2040.
BUT... solutions like some of PIC32 and their integrated 40Msps ADC are really nice and worth exploring (if I had the time). The positive thing about the pico is that it's so common and tools are so common that it's really a pleasure developping on this device =)