Goal: High sample rate of one ADC line via a kernel module and a corresponding user space app
Now I know the PRU would be great for this- and I plan on also writing a pru version to bench mark the diff but I’m currently trying to get it done with a kernel module and its turned into one of those annoying obsessions that should work and damn it-- I am going to make it work
but I’ve been fight it for awhile with no results.
Current version: Linux beaglebone 3.8.13-bone70
1: pulled there git repo
2: applied the patch to get rid of the trigger stuff found here
3: compiled:
gcc --static generic_buffer.c -o generic_buffer
4: Issues happen now because sysfs seem to be so different, I’m not sure contionous mode can be turned on?
./generic_buffer -n tiadc -l 256 -c 1
iio device number being used is 0
Problem reading scan element information
diag /sys/bus/iio/devices/iio:device0
5: This error leads down the rabbit hole to this semi unhelpful blog post: https://e2e.ti.com/support/arm/sitara_arm/f/791/t/365886 yielding an errata about Continuous capture mode is not supported in the 3.12 kernel; great we are still rocking a 3.8.13 kernel thus should be fine?
It shouldn't matter, but if you are willing to upgrade the kernel (ubuntu 14.04, Linux kernel 4.1.4-ti-r9),
you could follow the updated version instead:
I will also experiment with the pru but don’t like giving up on a solution just because I haven’t got it working. I’d still like to know how to get it from a kernel module
Have you used libpruio much? I was going to access the htimers to get high precision accuracy between the ADC output. Is there a nice way to do that? or does the 5uS pru assembly give me the ability to determinately know the time between each sampled value
To answer a question asked: the generic_buffer.c works fine with 4.1.5-ti-r10. The only thing I found is that the scale is not implemented (it’s 1.0) so where you should be getting a value in Volts, you still get the 12 bit value from ADC (0 - 4095). Otherwise it pretty much works out of the box.