I would like to continuously stream data from an ADC with 12 to 16 bit to a Raspberry 4 at around 10 MSPS. Since the Raspberry is not realtime, I'm assuming I need some sort of FIFO buffer as intermediate to take the samples from the AD converter and keep them for the Raspberry to fetch them. The Raspberry would do a feature extraction from my signal, so it wouldn't actually have to store the values, just do some computations on them.

I m thinking about using an ADC evaluation board from TI or Analog Devices, because I don't really want to mess around with the additional circuitry needed for the converter.

This post goes into some detail about how it's quite difficult to transfer that many samples over SPI. One solution was to make the Raspberry more realtime, but I think they ignored things like FIFOs.

Using Pi to read 1 MHz Analog Ultrasound signals

Another idea would be to read the bits in parallel from the FIFO via GPIOs. Would this be a valid solution? How about a FTDI converter that takes the samples from the FIFO and sends them out over USB?

The main point of this project is to use the Raspberrys computational power to reduce my signals from the continuous stream into manageable chunks. But I'm facing a lot of difficulties feeding the stream to the Raspberry since I'm not very experienced in the field of ADCs and FIFOs. I would appreciate if you could point me in some directions about which of these solutions could be valid or what else I could try.

  • just c couple of quick points: (1) 12-16 bits at one million million sample per second is not realistic, you may like to google 8-24 bit ADC datasheets to get a rough idea of more practical limits. (2) Rpi is multi-tasking, and as such, not appropriate for real time digital signal processing. You might like to try MCU first, say Arduino, then upgraded to STM32 etc. (3) If you are streaming signals, GPIO and FIFO won't help. (3) Many ADCs are SPI which can be very fast. Again read the datasheet's for max ODS, ... Happy googling, Cheeres.. – tlfong01 Feb 8 at 1:50
  • @tlfong01 It may not be possible with a Rpi, but 20 MB/s (10MSPS at 16 bits) can be done with average-class hardware, even without a real time OS. I'm developping a system that streams 600+ MB/s to a set of standard SSD disks, basically using off-the-shelf hardware and an ordinary Windows. – PMF Feb 8 at 10:26
  • @Abufari. Ah, I fully agree with you. As I said, MCU such STM32 is good. But the evil Wintel PC with Win10 is like Rpi, multitasking OS, NOT good for your high speed digital signal processing. If you have decided which ADC and MCU to I am glad to give further comments. I heard of Windows IoT Core on Rpi3/4. But I think it is not mature at all. – tlfong01 Feb 8 at 10:51
  • Ah, if you stream ADC direct to SSD, with PC/Rpi as the middleman. then it is OK. – tlfong01 Feb 8 at 10:53
  • So but this is the point I don't really understand. As you say we talk about 20 MB/s which is something, but definitely not crazy fast. What is exactly the limitation there on the RPI? I mean I would be OK using something like Arduino but I doubt they are fast enough. I never used a STM32 but I might look into it if you say they could be an option. I just feared with 200-400 MHz they might not keep up with the computations. – Abufari Feb 8 at 11:30

This is not going to happen.

There is simply no way to get the data into the Pi at the rates you are hoping for.

If you were talking about 1 million samples per second it would be more realistic, but probably not practical.

I'd be aiming for 100 thousand samples per second and hope to improve on that.

I'm not even sure that 100 thousand is practical without knowing details of the "feature extraction" and "computation", and knowing how the data is to be clocked in to the Pi.

| improve this answer | |
  • Seems I have to switch to something else. – Abufari Feb 14 at 8:06
  • @Abufari Or get working details from the folks who claim to be able to process high read rates for lengthy periods. – joan Feb 14 at 9:17

Your Answer

