obrienwhoi
New member
we currently have a data logger capable of logging 4 channels of 24 bit acoustic data at 20khz using the SPI bus for comms with ADC chip and then writing to some kind of media
we are looking to redo this system so that we can support 8 channels of 24 bit data at up to 40khz.
another possible issue is comms to the ADC chip which is the TI ADS127L18
https://www.ti.com/product/ADS127L18
this chips uses something called Frame Sync which is something i have never used but seems like SPI with 8 data lines. i haven't dug too deep into this yet.
side question would be does anyone have any experience with this protocol? if i was willing to contract out for a library for this chip that could be used on the teensy 4.1 is there any interest here? don't want to clog up the thread with this question tho. maybe email me offline???
there is also a 4 channel version of this part and we may also look at using two 4ch parts to get the 8 channels so that if we only needed 4 channels on a specific project we could save a little power and only run one 4ch chip.
so the idea is to use a Chip Scale Atomic Clock (CSAC) that is sync'd to GPS PPS before it is deployed to the seafloor. the 10Mhz output from the CSAC drives a 32 bit timer/counter that is used for a whole second counter as well as a millisecond counter. all interrupt driven. this counter variable and a whole second variable are used to timestamp the incoming data in blocks of data. this data is then written to say a bunch of multi-terabyte USB drives or SD media.
with the portenta to test some of the throughput issues i was able to use the m7 to generate roughly 1 megabyte per second of dummy data. i then used the 8MB of RAM as ping pong buffer. as soon as buffer A was full i would starting writing to buffer B and at the same time ask the m4 core to dump buffer A to uSD card on the portenta breakout uSD slot which was using SDMMC bus speeds. so it took about 4 seconds (purposely throttled to simulate real world input) to fill the buffer and a little under 2 seconds to dump the buff to 1TB uSD card. it will be preferable to use a larger USB thumb drive or similar in the end as we will be needing on the order of about 16TB of storage. so i created a program that did all of the above and it worked fine. then i wrote another program that took in GPS strings & GPS PPS and CSAC 10Mhz. i was able to use an ETR pin on a 32bit timer/counter to create a milliseconds counter and have it update a whole seconds counter using interrupts when it rolled over and i could access the milliseconds variable to get the fraction of a second. i was able to sync the the system to the GPS PPS. this was working very good. then the problems began. i now needed to combine both these programs together and found that i was having all kinds of conflicts with timers running the SDMMC bus and the millisecond counter stuff as well and it was all related to how the built in MBED library uses all of these bits and pieces for the Arduino functionality and the sdmmc functionality and so on and what ETR pins are brought out and available on 32 bit timers, etc. there were 16bit timers available but i really wanted to do this on a 32 bit timer for i think obvious reasons.
i never got to the Frame Sync part for comms to the ADC part but was hoping that the m7 was going to be able to handle that aspect.
so anyway having a rough idea of what we are trying to accomplish, do you think the Teensy 4.1 might be a good fit. will i run into the same sorts of MBED library type issues with Teensy stuff? i am also curious if you think that a dual core is required for this project or if you think there is enough CPU cycles available to do it all on your one m7 core?
Thanks,
Jeff
we are looking to redo this system so that we can support 8 channels of 24 bit data at up to 40khz.
another possible issue is comms to the ADC chip which is the TI ADS127L18
https://www.ti.com/product/ADS127L18
this chips uses something called Frame Sync which is something i have never used but seems like SPI with 8 data lines. i haven't dug too deep into this yet.
side question would be does anyone have any experience with this protocol? if i was willing to contract out for a library for this chip that could be used on the teensy 4.1 is there any interest here? don't want to clog up the thread with this question tho. maybe email me offline???
there is also a 4 channel version of this part and we may also look at using two 4ch parts to get the 8 channels so that if we only needed 4 channels on a specific project we could save a little power and only run one 4ch chip.
so the idea is to use a Chip Scale Atomic Clock (CSAC) that is sync'd to GPS PPS before it is deployed to the seafloor. the 10Mhz output from the CSAC drives a 32 bit timer/counter that is used for a whole second counter as well as a millisecond counter. all interrupt driven. this counter variable and a whole second variable are used to timestamp the incoming data in blocks of data. this data is then written to say a bunch of multi-terabyte USB drives or SD media.
with the portenta to test some of the throughput issues i was able to use the m7 to generate roughly 1 megabyte per second of dummy data. i then used the 8MB of RAM as ping pong buffer. as soon as buffer A was full i would starting writing to buffer B and at the same time ask the m4 core to dump buffer A to uSD card on the portenta breakout uSD slot which was using SDMMC bus speeds. so it took about 4 seconds (purposely throttled to simulate real world input) to fill the buffer and a little under 2 seconds to dump the buff to 1TB uSD card. it will be preferable to use a larger USB thumb drive or similar in the end as we will be needing on the order of about 16TB of storage. so i created a program that did all of the above and it worked fine. then i wrote another program that took in GPS strings & GPS PPS and CSAC 10Mhz. i was able to use an ETR pin on a 32bit timer/counter to create a milliseconds counter and have it update a whole seconds counter using interrupts when it rolled over and i could access the milliseconds variable to get the fraction of a second. i was able to sync the the system to the GPS PPS. this was working very good. then the problems began. i now needed to combine both these programs together and found that i was having all kinds of conflicts with timers running the SDMMC bus and the millisecond counter stuff as well and it was all related to how the built in MBED library uses all of these bits and pieces for the Arduino functionality and the sdmmc functionality and so on and what ETR pins are brought out and available on 32 bit timers, etc. there were 16bit timers available but i really wanted to do this on a 32 bit timer for i think obvious reasons.
i never got to the Frame Sync part for comms to the ADC part but was hoping that the m7 was going to be able to handle that aspect.
so anyway having a rough idea of what we are trying to accomplish, do you think the Teensy 4.1 might be a good fit. will i run into the same sorts of MBED library type issues with Teensy stuff? i am also curious if you think that a dual core is required for this project or if you think there is enough CPU cycles available to do it all on your one m7 core?
Thanks,
Jeff