Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ jobs:
device: AM64X
- os: debian
device: AM62LX
- os: edgeai
device: AM62AX

steps:
- name: Checkout
Expand Down
42 changes: 42 additions & 0 deletions configs/AM62AX/AM62AX_edgeai_config.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# General family replacement variables and configuration values for Linux build

# This file is processed by Python scripts to define both replacement
# variable and configuration values for a device family build.
# For replacement variables, all variables should be listed on a single
# line, and all the variables should be listed on consecutive lines
# (i.e. no additional blank lines between the replacement variables).
# Similarly, all the configuration values should be listed on individual,
# consecutive lines (with no blank linues between the configuration values).
#
# Note that neither replacement variables nor configuration values may contain
# a colon (i.e. ":") in their name. However, values may contain colons.

Replacement Variables
---------------------
'__PART_FAMILY_NAME__' : 'AM62Ax'
'__PART_FAMILY_DEVICE_NAMES__' : 'AM62Ax'
'__PRODUCT_LINE_NAME__' : 'Sitara MPU'
'__SDK_BUILD_MACHINE__' : 'am62a-sk'
'__SDK_FULL_NAME__' : 'Processor SDK Linux Edge AI AM62Ax'
'__SDK_SHORT_NAME__' : 'PSDK EdgeAI'
'__SDK_INSTALL_FILE__' : 'ti-processor-sdk-linux-am62axx-evm-<version>-Linux-x86-Install.bin'
'__SDK_INSTALL_DIR__' : 'ti-processor-sdk-linux-am62axx-evm-<version>'
'__SDK_DOWNLOAD_URL__' : '`Processor SDK AM62A Download Page <https://www.ti.com/tool/PROCESSOR-SDK-AM62A>`__'
'__LINUX_UBUNTU_VERSION_LONG__' : '22.04 (64-bit)'
'__LINUX_UBUNTU_VERSION_SHORT__' : '22.04'
'__OPTEE_PLATFORM_FLAVOR__' : 'am62axx'
'__RTOS_UBUNTU_VERSION_LONG__' : '22.04 (64-bit)'
'__WINDOWS_SUPPORTED_LONG__' : '10 (64-bit)'
'__FEATURINGMATRIX__' : \
'__SYSFW_CORE_NAME__' : 'TIFS'

Configuration Values
--------------------
'CONFIG_part_family' : 'AM62AX_family'
'CONFIG_part_variant' : 'AM62AX'
'CONFIG_sdk' : 'PLSDK'
'CONFIG_icss_support' : 'yes'
'CONFIG_rt_linux_support' : 'yes'
'CONFIG_gpu_ip' : 'Rogue_AXE'
'CONFIG_crypto' : 'sa2ul'

23 changes: 23 additions & 0 deletions configs/AM62AX/AM62AX_edgeai_tags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Device Family name
fam_name = 'AM62AX'

# Project name and HTML title
sdk_product = 'null' #todo: remove after the new structure is used for all device families

project = u'Processor SDK Linux Edge AI for AM62Ax'
html_title = 'Processor SDK AM62Ax Documentation'

# The master toctree document.
master_doc = 'devices/AM62AX/edgeai/index'

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.

# AM62A RTOS docs are not in this project, rather referenced externally,
# so exclude 'rtos' folder along with others.
exclude_patterns = ['android', 'example_code', 'files', 'rtos', 'devices/AM335X', 'devices/AM437X', 'devices/AM64X', 'devices/AM65X', 'devices/TDA4VM', 'devices/J7200', 'devices/AM67A', 'devices/AM68A', 'devices/AM69A', 'devices/DRA821A']

# OS for the build. Sphinx uses source/{sdk_os} when looking for doc inputs
sdk_os = 'edgeai'


25 changes: 25 additions & 0 deletions configs/AM62AX/AM62AX_edgeai_toc.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
devices/AM62AX/edgeai/datasheet_optiflow
devices/AM62AX/edgeai/datasheet_tiovx_apps
devices/AM62AX/edgeai/connectivity
devices/AM62AX/edgeai/pi_hdr_programming
devices/AM62AX/edgeai/faq
devices/AM62AX/edgeai/getting_started
devices/AM62AX/edgeai/index
devices/AM62AX/edgeai/test_report
devices/AM62AX/edgeai/release_notes
devices/AM62AX/edgeai/release_notes_08_06
devices/AM62AX/edgeai/release_notes_09_00
devices/AM62AX/edgeai/release_notes_09_00_01
devices/AM62AX/edgeai/release_notes_09_01
devices/AM62AX/edgeai/release_notes_09_02
devices/AM62AX/edgeai/release_notes_10_00
devices/AM62AX/edgeai/release_notes_10_01

edgeai/sdk_overview
edgeai/configuration_file
edgeai/edgeai_dataflows
edgeai/inference_models
edgeai/sample_apps
edgeai/measure_perf
edgeai/docker_environment
edgeai/sdk_components
8 changes: 8 additions & 0 deletions source/devices/AM62AX/edgeai/connectivity.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
============================
Connectivity and Peripherals
============================

.. toctree::
:maxdepth: 2

pi_hdr_programming
50 changes: 50 additions & 0 deletions source/devices/AM62AX/edgeai/datasheet_optiflow.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
====================
Datasheet (Optiflow)
====================

The performance measurements includes the following,

#. **FPS** : Effective framerate at which the application runs
#. **Total time** : Average time taken to process each frame, which includes
pre-processing, inference and post-processing time
#. **Inference time** : Average time taken to infer each frame
#. **CPU loading** : Loading on different CPU cores present
#. **DDR BW** : DDR read and write BW used
#. **HWA Loading** : Loading on different Hardware accelerators present

Following are the latest performance numbers of the OpTIFlow demos:

Source : **Video**
==============================

| Resolution : **1280x768**
| Encoding : **h264**
|

.. figure:: ../../../images/edgeai/datasheet_optiflow_pipeline1.png
:scale: 75
:align: center

GStreamer based data-flow pipeline with video file input source and display output

.. csv-table::
:file: ../../../edgeai/datasheet/AM62AX/optiflow/optiflow_video_am62a.csv
:header-rows: 1

Source : **CSI Camera with VISS (imx219)**
======================================================

| Capture Framerate : **30 fps**
| Resolution : **1920x1080**
| format : **SRGGB8**
|

.. figure:: ../../../images/edgeai/datasheet_optiflow_pipeline2.png
:scale: 75
:align: center

GStreamer based data-flow pipeline with IMX219 sensor, ISP and display

.. csv-table::
:file: ../../../edgeai/datasheet/AM62AX/optiflow/optiflow_camera_am62a.csv
:header-rows: 1
38 changes: 38 additions & 0 deletions source/devices/AM62AX/edgeai/datasheet_tiovx_apps.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
======================
Datasheet (TIOVX Apps)
======================

The performance measurements includes the following,

#. **FPS** : Effective framerate at which the application runs
#. **Total time** : Average time taken to process each frame, which includes
pre-processing, inference and post-processing time
#. **Inference time** : Average time taken to infer each frame
#. **CPU loading** : Loading on different CPU cores present
#. **DDR BW** : DDR read and write BW used
#. **HWA Loading** : Loading on different Hardware accelerators present

Following are the latest performance numbers of the edgeai-tiovx-apps:

Source : **Video**
==============================

| Resolution : **1280x768**
| Encoding : **h264**
|

.. csv-table::
:file: ../../../edgeai/datasheet/AM62AX/tiovx-apps/tiovx_apps_video_am62a.csv
:header-rows: 1

Source : **CSI Camera with VISS (imx219)**
======================================================

| Capture Framerate : **30 fps**
| Resolution : **1920x1080**
| format : **SRGGB8**
|

.. csv-table::
:file: ../../../edgeai/datasheet/AM62AX/tiovx-apps/tiovx_apps_camera_am62a.csv
:header-rows: 1
53 changes: 53 additions & 0 deletions source/devices/AM62AX/edgeai/faq.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
.. _pub_edgeai_FAQs:

====
FAQs
====

.. _pub_edgeai_multiple_usb_cams:

Getting Error when trying to capture from multiple USB cameras simultaneously
=============================================================================

This is a common issue faced in the industry with many USB cameras.
You may get errors like ``Failed to allocate required memory.`` when tying to
capture simultaneously from more than one usb cameras.

The root cause for this issue is that most of the USB cameras requests for more
BW than actually required. If the use case is to capture only from 2 USB cameras
, it can be done by connecting one of them to USB type-C port since it is
internally connected to a separate instance of USB controller. But if the use
case is to capture from more than 2 cameras, you need to modify the UVC driver
to override the BW allocation.

The root cause and work around is explained in detail in this
blog `Multiple UVC cameras on linux <https://www.thegoodpenguin.co.uk/blog/multiple-uvc-cameras-on-linux>`_

To apply the work around to our SDK, use below steps

#. Download and install `Processor SDK Linux <https://software-dl.ti.com/processor-sdk-linux/esd/AM62AX/10_01_00/exports/docs/devices/AM62AX/linux/Overview/Download_and_Install_the_SDK.html>`__
#. Get the patch to add `bandwidth_cap` parameter to `uvcvideo` kernel module `uvcvideo patch <https://www.spinics.net/lists/linux-media/msg175596.html>`_
#. Apply the patch to kernel source in Processor SDK Linux Install path. Please refer to `PSDK building kernel <https://software-dl.ti.com/processor-sdk-linux/esd/AM62AX/10_01_00/exports/docs/linux/Foundational_Components_Kernel_Users_Guide.html#overview>`_
#. Compile only `uvcvideo` module using below command

.. code-block:: bash

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- am62ax_evm_a53_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- ./drivers/media/usb/uvc/uvcvideo.ko
#. Copy `./drivers/media/usb/uvc/uvcvideo.ko` to sk
#. Remove `uvcvideo` module and install modified version using below commands

.. code-block:: bash

rmmmod uvcvideo
insmod uvcvideo.ko
#. Set the desired BW cap as shown below

.. code-block:: bash

echo 1200 > /sys/module/uvcvideo/parameters/bandwidth_cap

.. note::

The unit of BW here is Bytes/125us, you can estimate the approximate BW
requirement by multiplying fps with size/frame
Loading
Loading