This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM4372: McASP performance to interface to ADC3643

Genius 17165 points
Part Number: AM4372
Other Parts Discussed in Thread: ADC3643, , AM3352, ADC3642, TIDA-01555, ADC3660, AM5728

Hi all

My customer is looking for a cost effective Sitara processor that can interface to the ADC3643 and they have this question:

Is the McASP of the AM4372 or the AM3352 suitable to handle the below mentioned use case / data rates ?

Any other processor you would recommend ?

Best regards

Ueli

------------------------------

To begin with I am interested in using a single ADC364x running sampling at between 16 Msps and 64 Msps (ADC3642 or ADC3643) performing a complex demodulation and decimation by 32 to give a 20-bit+20-bit IQ sample, i.e. no loss of data, maximum dynamic range. In total I calculate that to be 4 channels/wires (assuming 1-wire serialisation) at between 10 Mbps and 40 Mbps. Most/all Sitara chips have at least 4 channels of McASP Rx so this looks possible.

 As a stretch goal I would like to use two ADC3643 running at 64 Msps performing a complex demodulation and decimating by 32 to give at 20 bit+20bit IQ sample. In total I calculate that to be 8 channels/wires (assuming 1-wire serialisation) at 40 Mbps. I have not looked extensively at the McASP peripheral in the Sitara chips but it looks like all Sitara chips have at least 2x 4-channel McASP so this looks possible as well.

 Please can you confirm the above are possible with members of the AM335x and AM437x families.

  • Hi Ueli,

    Sorry about the delay.

    In the ADC364x datasheet Table 6.10 Timing Requirements, I only see timings for Fout = 65 MSPS under "INTERFACE TIMING - PARALLEL DDR CMOS" - this mode uses 7 data pins per channel to transmit 14-bits in a single DCLK cycle.

    It appears the fastest INTERFACE TIMING - SERIAL CMOS
    Data valid, 2-wire serial CMOS: Fout = 30 MSPS (2 data pins per channel to transmit 14-bits in 3.5 DCLK cycles)
    Data valid, 1-wire serial CMOS: Fout = 15 MSPS, DA/B6 = 240 MBPS (1 data pins per channel to transmit 14-bits in 7 DCLK cycles)

    All of these mods transmit data on both rising and falling edges of DCLK. This is not a feature that McASP supports.

    See Figure 7-3. Timing diagram: 1-wire serial CMOS and Figure 7-4. Timing diagram: 1/2-wire serial CMOS both show that data is transmitted on both rising and falling edges of the clock.

    On the ADC3643 EVM, the data gets routed to an Altera Stratix IV FPGA that supports 1.5-GSPS LVDS I/O rates: up to 48 high-speed transceivers at up to 8.5 Gbps, or up to 24 transceivers at up to 11.3 Gbps. These transceivers are optimized for 100G applications and 1,067 Mbps (533 MHz) DDR3 memory interfaces.

    I can ask the PRU expert if the PRU can latch data on both rising and falling edges of the clock, but I suspect the maximum data rate will be slower than the DCLK needed to reach 65MSPS DDR (65MHz) or 30MSPS 2-wire (105MHz?? Calculated as 30MSPS * 3.5 DCLKs per sample)

    Regards,
    Mark

  • It is definitely possible to use PRU to bitbang custom protocols to communicate with ADCs. See an example of using the PRU to interface with 6 different ADCs over SPI here: https://www.ti.com/tool/TIDA-01555, https://git.ti.com/cgit/apps/tida01555 . The main question around the PRU is, 1) is the PRU physically capable of doing this usecase, and 2) is the customer interested in the development work to write that PRU code? (probably in assembly)

    Let's do some back of the napkin math for one specific example. I am not looking through all the documents mentioned above, so some of my assumptions may be off. But this should be enough to get the customer thinking about their use case.

    ASSUMPTIONS:

    10MHz data clock = 100 ns
    Data sent on both rising and falling edges of data clock, and high and low portions of the period are symmetric
    4 data lines must be read every rising & falling edge (i.e., every 50 ns).
    PRU is generating the data clock, so no latency for PRU polling for a transition on an external clock signal before it starts sampling the data lines
    AM335x PRU core clock is 200MHz, AM437x PRU core clock can go up to 225MHz. I'll use 200MHz

    MATH:

    At 200MHz, each PRU clock cycle takes 5ns. It takes 1 clock cycle to read in 1 PRU GPI signal, so 4 clock cycles to read 4 PRU GPI signals. Plus one clock cycle to update the data clock PRU GPO signal, takes 25 ns to read in and read out signals. That leaves 5 PRU clock cycles per high or low portion of the data clock to do other things, like pass data to the other PRU core to combine and pass to a host core. Take a look at the TIDA-01555 design guide for more factors to think about in a PRU design like this: https://www.ti.com/lit/pdf/tidudn4 

  • Hi Mark, hi Nick

    Thank you for the detailed feedback, this is helpful.

    Best regards

    Ueli

  • One correction or clarification after checking with the PADC team. The ADC3643 does also support a one wire TDM mode in addition to the somewhat unique parallel DDR mode. For 32 decimated output the rate is probably low enough to handle on AM4372. We don't have direct examples of this in the SDK, but we have demoed on AM572x on Beagbone AI and ADC3660 booster pack connected to the McASP of the AM5728.

    Response from the PADC team:

    1-wire serial CMOS is basically a 1-channel TDM/I2S mode for McASP. So using one serializer connected to one of the serial pins. Note that one value is outputted during the whole frame sync, not two channels/values as the typical I2S. The ADC3643 also supports a half-bus DDR parallel interface where the data is interleaved through the external pins

      Pekka