主题中讨论的其他器件:TDA4VM
我目前正在 J721电路板和 Windows PC 之间开发 USB 连接、但我会遇到一些困难。
这是原理图。
J721的 SW 3.4处于打开状态、以在 USB0中启用双角色模式。
我使用以下预编译映像并使用 SD 卡进行引导: https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-bA0wfI4X2g/08.04.00.06/ti-processor-sdk-rtos-j721e-evm-08_04_00_06-prebuilt.tar.gz
我使用以下脚本打开了 adb 界面。
modprobe g_ffs udc_dev=6000000.usb mkdir -p /config/usb_gadget/g1 cd /config/usb_gadget/g1 echo 0x1d6b > idVender echo 0x0105 > idProduct echo 0x0000 > bcdDevice echo 0xEF > bDeviceClass echo 0x02 > bDeviceSubClass echo 0x01 > bDeviceProtocol mkdir -p strings/0x409 serialnumber=0 echo "${serialnumber}" > strings/0x409/serialnumber echo "Texas Instruments" > strings/0x409/manufacturer echo "J721 Board" > strings/0x409/product cfg=configs/c.1 mkdir -p "${cfg}" func=functions/ffs.adb mkdir -p {$func} ln -sf "${func}" "${cfg}" echo 500 > ${cfg}/MaxPower mkdir -p /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb echo "${udc_dev}" > UDC
如果我们在 J721中调用 adb_open ()和 adb_read ()、我可以在 Windows 主机 PC 的设备管理器中找到此器件
在 USB 设备查看器中、我可以看到这个结果
===>Device Descriptor<=== bLength: 0x12 bDescriptorType: 0x01 bcdUSB: 0x0210 bDeviceClass: 0x00 -> This is an Interface Class Defined Device bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x40 = (64) Bytes idVendor: 0x1D6B = The Linux Foundation idProduct: 0x0105 bcdDevice: 0x0510 iManufacturer: 0x01 English (United States) "Linux 5.10.120-g95b90aa828 with usb-ss-gadget" (Sometimes) *!*ERROR: No String Descriptor for index 1! iProduct: 0x02 English (United States) "USB Function Filesystem" (Sometimes) *!*ERROR: No String Descriptor for index 2! iSerialNumber: 0x00 bNumConfigurations: 0x01
有时、iManufacturer 字符串和 iProduct 字符串会显示错误。
我们开发了 Windows 端 GUI 程序、支持传感器配置更改。
此程序使用 libusb 库通过 USB 与电路板进行通信: https://github.com/libusb/libusb
预编译的内核模块 g_fss.ko 包括 IAD、CDC、RNDIS 配置。 libusb 库不支持这种情况。 因此、我编译了新的 g_fs.ko 模块、其中排除了这些配置
- 我使用了 ti-processor-sdk-linux-j7-evm- 08_04_00_11 -Linux-x86-Install.bin 和 Linux-5.10.120+gitAUTOINC+95b90aa828-g95b90aa828 代码。
- 在内核源代码的.config 中、 CONFIG_USB_FUNCHTIONFS_ETH 和 CONFIG_USB_FUNCHTIONFS_RNDIS 为 未设置 。
在这种情况下、libusb 可以打开该器件。 但当 libusb 尝试读取或写入时,它显示错误: libusb_error_pipe(-9)
https://vovkos.github.io/doxyrest/samples/libusb/enum_libusb_error.html
但是、其他制造商的电路板能够使用我们的方法通过 USB 进行通信。
我找到 TDA4VM 不支持 ADB 的链接: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/990602/tda4vm-add-adb-function-in-ti-linux-sdk
不过、 ADB 接口可在 Windows PC 中找到 。 因此、我想知道是否应该在 SDK 中另外安装 ADB 功能。 与链接问题不同、 我不会将 ADB 用作调试方法。
您能告诉我在这个过程中有什么错吗?
或者、是否有通信 Windows 主机 PC 的良好解决方案?
感谢您的阅读。