将设备作为USB设备连接到STM32作为USB主机

时间:2019-03-05 12:40:22

标签: android stm32

我想将Android设备作为USB设备连接到充当主机设备的STM32板上。

我的Android应用程序代码如下:

Android清单

DECLARE name [BINARY] [INSENSITIVE] [NO SCROLL] CURSOR 
     [{WITH | WITHOUT} HOLD] 
     FOR query [FOR READ ONLY]

因此,当我尝试获取连接的USB设备详细信息时,USB设备列表始终为null:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.usb_connection">
<uses-feature android:name="android.hardware.usb.accessory" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

同样,我也尝试获取附件列表,USB附件列表也为空。

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
Map<String,UsbDevice> deviceList = manager.getDeviceList();

然后尝试使用 ADB命令连接设备。我已经在JAVA中创建了一个桌面应用程序来运行ADB命令,并且其工作正常。但是,当我尝试从我的Android应用程序运行ADB命令时,它给出了 java.io.IOException:运行exec()时出错。命令:[ADB,pull,...]工作目录:null环境:null

STM32固件用C编写。

请帮助我,我被困了很长时间。

2 个答案:

答案 0 :(得分:1)

嘿,这是我的库,用于在Stm32上激活Android附件模式(已在f4和f1系列上验证了立方Mx和HAL)和用于批量通信的USB类:

https://github.com/once2go/Stm32-Android-Accessory

答案 1 :(得分:0)

您打算在STM32方面做什么?您需要首先通过USB连接到Android设备,并(在STM32上)确定Android设备是否处于AOA模式(通过检查供应商和产品ID)。如果不是,则需要发送一些将其切换的USB请求(我已经包含了STM32 USBH库调用名称):

USBH_GetProtocol版本 USBH_SetString 0制造商名称 USBH_SetString 1型号名称 USBH_SetString 2说明 USBH_SetString 3版本 USBH_SetString 4 URI USBH_SetString 5序列号 启动配件

您可以在此处看到该过程的详细说明: https://source.android.com/devices/accessories/aoa#attempt-to-start-in-accessory-mode

完成此操作后,您将断开与USB设备的连接(它将重置连接),并且需要重新进行枚举过程。这一次,供应商和产品ID应该是AOA设备的ID(0x18D1和0x2D00 / 1)。现在,您可以连接到它并使用相当标准的USBH_CDC通信过程,但有一些警告。当您尝试查找接口时(在接口init函数中),您的子类为0xFF,协议将为0x00。

我花了一段时间才能使所有内容正确通信,因此拥有USB逻辑分析仪是确保一切正常通信的非常方便的工具。

还有其他一些资源,可让STM32正确执行操作后让Android设备进行通信。

https://source.android.com/devices/accessories/aoa2 https://developer.android.com/guide/topics/connectivity/usb/accessory.html#manifest