TDA4VM: A72 MCU2_0 SYNC

Part Number: TDA4VM

Tool/software:

Hi TI,

SDK8.6

#1

How do I measure the latency between MCU2_0 capturing camera data and A72 receiving it? What factors influence this latency? What are the factors that affect this delay? Is there any relevant documentation or thread?

#2

Camera data is transferred between A72 and MCU2_0 via IPC. To ensure cache data consistency, what protection mechanism is used on TDA4? What can be done to ensure data consistency between the two cores?

This is more important, I look forward to your reply.

  • Hello,

    To transfer captured images from core to core , it need to use tiovx framework using direct IPC is not possible.

    Please refer tiovx documentation below

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tiovx/docs/user_guide/index.html

    If you need more details , let me know.

    Regards

    Tarun Mukesh

  • Your reply is of no help to me.

    We're already using app_multi_cam to capture camera data, and it's working fine.

    We'd like to know:

    #1

    How is the camera capture data from MCU2_0 transmitted to the A72? How is the data transmitted to the A72? Could you provide more details?

    #2

    How do I get the timestamp when the MCU2_0 receives the camera data?

    #3

    How do I get the timestamp when the A72 receives the camera data?

    Please reply to #123 for us , anxious and looking forward to an expert's reply.

  • Hi Barry,

    How is the camera capture data from MCU2_0 transmitted to the A72? How is the data transmitted to the A72? Could you provide more details?

    mcu2_0 running capture_node will update the frame to the ddr_shared_memory which is shared across all the cores and triggers the next node connected to it. In case of multi_cam example you can get the captured frame's to A72 by using the vxGraphParameterDequeueDoneRef() api where it will return a openvx reference from which you can able to get image data. There is no transfer of data happens, everything is in shared memory, only ipc messages (around 512 bytes) are transferred from remote cores.

    How do I get the timestamp when the MCU2_0 receives the camera data?

    capture timestamps are updated in the object_array which is dequeued from the capture_node. You can get those values in your application using
    vxQueryReference(vx_reference ref, vx_enum attribute, void *ptr, vx_size size) api with TIVX_REFERENCE_TIMESTAMP as attribute.

    How do I get the timestamp when the A72 receives the camera data?

    after this api vxGraphParameterDequeueDoneRef() you can get time from you application using C api's as this dequeue api gives the control of image buffer to A72.

    Regards,
    Gokul

  • Hi Gokul,

    Thank you for your reply.

    #1

    What is the IPC transmission content? Could you please take a screenshot and share the code section for IPC data transmission?

    #2

    We need to obtain the timestamp of received data in the app_multi_cam app. How do I obtain this?

    looking forward to an expert's reply.

  • Hi Barry,

    What is the IPC transmission content? Could you please take a screenshot and share the code section for IPC data transmission?

    This will be your ipc payload again this is kept in the shared memory ipc_vring_mem, ipc hardware is used to notify the other core and then virtio framework will take care of getting the data from the shared memory. 
    Typically the payload size is 512 bytes, but the actual message that will be there is the obj_desc_id which is of 4bytes. All this things are handled by tiovx framework and is not straight forward.

    We need to obtain the timestamp of received data in the app_multi_cam app. How do I obtain this?

    can you refer to this thread

    Regards,
    Gokul

  • Thanks for your reply.

    #1

    What does the full C API designation refer to?

    #2

    How does TIVX_REFERENCE_TIMESTAMP on the A72 obtain a TIMESTAMP value? How is the TIMESTAMP passed to the A72? How is it implemented?

    Looking forward to your reply.thanks

  • Hi Barry,

    1. You can use appLogGetTimeInUsec(); api to get current time in your a72 application.

    2. vxQueryReference() api get the timestamp data from the obj_desc which is stored in shared memory, this time will be updated by the capture node running in mcu2_0 when it receives frame from csirx. Timestamp data is present in shared memory and a72 reads from it.

    Regards,
    Gokul

  • Hi Gokul,

    Thanks for your confirmation.

    #1

    Is the appLogGetTimeInUsec() API a global GTC timer? Can R5F access appLogGetTimeInUsec?

    Is this the only way to directly obtain timestamps on A72?

    #2

    Is the timestamp of the capture frame in fvid2 different from the timestamp obtained from appLogGetTimeInUsec?

    Looking forward to your reply.

  • Hi Barry,

    1. yes it used global GTC timer. r5f also uses the same timer.
    you can try api's from time.h file but we use appLogGetTimeInUsec() to process time related calculations.

    2. fvid2 timestamp also uses appLogGetTimeInUsec api to get the timestamp which is again uses global GTC timer.

    Regards,
    Gokul

  • Hi Gokul,

    Thanks for your reply.

    #1

    Do the timestamps for all heterogeneous cores in TDA4 come from the GTC timer?

    #2

    What clock does the GTC timer in TDA4 use? Where is it initialized?

    For a better understanding, could you please send me the GTC documentation?

    Looking forward to your reply.

  • Hi Barry,

    Do the timestamps for all heterogeneous cores in TDA4 come from the GTC timer?

    Yes, appLogGetTimeInUsec() uses gtc timer on all the cores.

    What clock does the GTC timer in TDA4 use? Where is it initialized?

    Can you please raise another thread for this and the corresponding experts will get back to you.

    Regards,
    Gokul