For one of my projects, i had the need of acquring data from a 'large' number of ADC channels. This was a good exercise at learning kernel module development, and a good way to assess Linux Industrial IO performance, as well as testing MMIO GPIO performance vs gpiod_* functions.
The idea was to find the maximum sampling speed achievable while keeping a 'usable' Raspberry Pi zero W in terms of load, as well as testing the limit of a worst case hardware interface (using Dupont 20cm wire), and no fancy IP Core, FPGA or MCU in between the AD7606 and the Raspberry PI.
Due to the large number of GPIOs required, all other interfaces were disabled (UART, EEPROM pins, I2C, SPI, etc)
Raspberry Pi Zero W was also configured as headless to limit video burden on the kernel.
Some timing performance and benchmarking were done, and shown a quite heavy overhead of the iio functions iio_push_to_buffers_with_timestamp()
I found that 8ksps was a good tradeoff. A more powerful Raspberry Pi would probably push the sampling rate further, with IRQ pinning, and general faster CPU.
Anyway, the whole article is available here :
https://www.skynext.tech/index.php/2025 ... pi-zero-w/
And the kernel module driver :
https://github.com/rodv92/ad7606_par_rpi
I hope this helps anyone that wishes to do fast prototyping and interfacing with a capable 8 channel ADC module.
Note that for audio interface levels of acquisition speed or more (like the 200ksps offered by the AD7606) a MCU providing hardware buffering and managing the hardware protocol would be mandatory, and would expose data using USB 1.1 or USB 2.0 speeds.
Feel free to comment, also if you have any tips on how to push the performance further, I will gladly implement them.
The idea was to find the maximum sampling speed achievable while keeping a 'usable' Raspberry Pi zero W in terms of load, as well as testing the limit of a worst case hardware interface (using Dupont 20cm wire), and no fancy IP Core, FPGA or MCU in between the AD7606 and the Raspberry PI.
Due to the large number of GPIOs required, all other interfaces were disabled (UART, EEPROM pins, I2C, SPI, etc)
Raspberry Pi Zero W was also configured as headless to limit video burden on the kernel.
Some timing performance and benchmarking were done, and shown a quite heavy overhead of the iio functions iio_push_to_buffers_with_timestamp()
I found that 8ksps was a good tradeoff. A more powerful Raspberry Pi would probably push the sampling rate further, with IRQ pinning, and general faster CPU.
Anyway, the whole article is available here :
https://www.skynext.tech/index.php/2025 ... pi-zero-w/
And the kernel module driver :
https://github.com/rodv92/ad7606_par_rpi
I hope this helps anyone that wishes to do fast prototyping and interfacing with a capable 8 channel ADC module.
Note that for audio interface levels of acquisition speed or more (like the 200ksps offered by the AD7606) a MCU providing hardware buffering and managing the hardware protocol would be mandatory, and would expose data using USB 1.1 or USB 2.0 speeds.
Feel free to comment, also if you have any tips on how to push the performance further, I will gladly implement them.
Statistics: Posted by rodv92 — Mon Sep 22, 2025 8:03 am