Multiple USB Cameras AI-64

I’m new to teh AI-64 and I want to run multiple USB cameras following the instructions here:

https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-jacinto7/07_03_00_05/exports/docs/linux/Overview/Download_and_Install_the_SDK.html

Unfortunately the first step (Download Processor SDK Linux J721e) leads to a dead 404 page:

https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-jacinto7/latest/index_FDS.html

Does anybody know where I can download the Processor SDK?

Have you looked at the newer sdk, the one you have is 7.X this one is 8.x

https://software-dl.ti.com/jacinto7/esd/robotics-sdk/09_01_00/TDA4VM/docs/index.html

https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-sk-tda4vm/09_01_00/exports/edgeai-docs/common/sdk_overview.html

Thanks @foxsquirrel!

Not knowing any better I was following the instructions in “Getting Started” for AI-64 and I guess the tutorial still points to the old location.

The USB camera saga continues - I’m still trying to get multiple USB cameras (four to be exact) to work on the AI-64. I have uninstalled the old SDK and installed SDK 9_0_2_0 the latest at the time I write this. I then successfully applied the uvcvideo patch and build the uvcvideo kernel module as described here with no errors: FAQs — Processor SDK Linux for Edge AI Documentation

When I attempt to load the new module I get the following error output:

$ sudo modprobe -v -v uvcvideo
modprobe: INFO: …/libkmod/libkmod.c:365 kmod_set_log_fn() custom logging function 0xaaaab54ec550 registered
insmod /lib/modules/5.10.168-ti-arm64-r113/kernel/drivers/media/usb/uvc/uvcvideo.ko.xz
modprobe: INFO: …/libkmod/libkmod-module.c:892 kmod_module_insert_module() Failed to insert module ‘/lib/modules/5.10.168-ti-arm64-r113/kernel/drivers/media/usb/uvc/uvcvideo.ko.xz’: Exec format error
modprobe: ERROR: could not insert ‘uvcvideo’: Exec format error
modprobe: INFO: …/libkmod/libkmod.c:332 kmod_unref() context 0xaaaaee543450 released

Fortunately I saved the old module! :slight_smile: Any suggestions how to resolve that issue?

More generally, I’m wondering if anybody has been able to run more than two USB cameras on the AI64? It’s critical to our use case, but if it isn’t possible… :frowning:

The devicetrees are for the sony IMX219 camera.
Bad news is they only have 2 trees set up.

BBAI64-CSI0-imx219.dts
BBAI64-CSI1-imx219.dts

I don’t have the imx219 camera so I cannot test any of it.

They are connected to i2c, so maybe that is how they get 4. 2 on usb and 2 on i2c ???

Thanks for the info! I don’t have that camera either, I have some of the logitec cameras that they recommend in the getting started tutorial. Using a single camera per port works fine. More than one doesn’t work and sometimes crashes.

One last thought, the devicetree and some other small details in the Ti sdk might be for the Ti EVM and not compatible with the AI-64. Are they referencing the EVM or AI64 in the docs?

Thanks, I will double check.

I have 2 x imx219 and both works fine. I checked with this script bbai64/python/imx219-stereo-camera-mjpeg-stream.py at master · Hypnotriod/bbai64 · GitHub

In the file docstring there overlays loading and in project README there extra files for camera DCC used in GST pipe.

1 Like

Thanks Vlad, After looking at it, I think this code works for imx219 cameras only. Unfortunately our use case calls for 4 USB cameras.

Is anybody actually running more than one USB camera? If so, what are the steps involved to get it to work?

BTW I’ve tried running one camera from the USB-A port and another from the USB-C port, but it didn’t work. I’ve tried using external power to the camera on the C-port since it’s not a host, but that didn’t work either.

I’ve tried what’s stated on the multiple cameras FAQ link on the “Edge-AI Getting Started” page with no success. Is it simply not possible to run more than one USB camera simultaneously using this board? I’d love to run 4 but even 2 would be a success! :slight_smile:

One SoC builder claims their new SoC can handle 12 cameras!!! I have been on the list waiting for approval to get the dev kit. The dev kit does not mention having facilities on the board to connect 12 cameras so it is a wait and see at this point.

I recently tried to get 2 USB cameras working on an AM335x based system, I could not get it to work either for simultaneous streaming. It only had a single USB socket so I had to use a hub. Tried a couple of hubs with no luck.

I then tried to do the same on my laptop. I did manage to get 2 cameras working at the same time, but I think they were using 2 different USB root controllers, but not 100% sure as it was sometime ago. I couldn’t get 2 cameras to work when connected to the same hub.

I don’t know if the issue is with the hardware USB hub chips or the USB root controllers, or if it is due to the USB software stack under Linux. Maybe a bit of both.

Fortunately for me on my hardware I did not need simultaneous access to the cameras I have installed. So I just stream from 1 camera at a time and that works fine.

Looked at the industrial BBB (red board) and it claims to have a 3D gpu. Maybe it works on that model due to the gpu. As far as I can determine the BBB (black board) does not have a GPU. Not finding much about the GPU

bbb-red

This was on AM3352. No 3D hardware at all. I just needed to capture the data to be forwarded on. The unit is headless. Using V4L2 would not stream multiple cameras at the same time, even is dropping the camera resolution down to a minimum.

I have not personally used this, just read the first couple of paragraphs of the docs. It seems like this issue might be software related.

Have you called a second open() and gotten an error message? It mentions older drivers still allow multiple opens() so maybe this might be related in some way.

https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/open.html#multiple-opens

Thanks for the info! Some observations:

To Benedict’s point, I can get multiple cameras streaming simultaneously on laptops and desktops with multiple root controllers. (Is there a BeagleBone cape with two or three extra USB-controllers?)

The AI64 board has two TI root controllers, one for the A ports and one for the C port but I cannot get two cameras to work despite that. I first thought it was a power issue, so I applied external power to the C port, but no luck. I’m wondering if this is both a hardware and a driver issue?

There seems to be another issue with the C port as well. It’s sensitive to the order in which you apply power to the board, and sometimes the AI64 won’t even boot when you use external power to the C port and the barrel jack simultaneously. I looked at the schematic, and I suspect the power MUX chip might be the culprit when this happens. I thought of running the board and the cameras with power from the USB-C port alone, but the current demands would be way to high for that to work.

BTW, there are some Quirks for the uvcvideo driver that supposedly make it possible to use multiple USB cameras. As it turns out they only work for uncompressed video streams, so most modern cameras won’t benefit from those Quirks…