查看: 3180  |  回复: 1
基于USB单片机CH559的Android USB通讯设计实例
WCHCN
37
主题
241
回复
发表于2017-06-14 15:24:07 | 显示全部楼层
1# 电梯直达

CH559内置USB全速HOST/DEVICE,可用于各种USB主机和设备应用。AOA协议是Google公司推出的用于实现Android设备与外围设备之间的USB通讯的协议,该协议拓展了Android设备USB接口的功能,本文档主要介绍了CH559通过AOA协议与Android设备配件模式进行通讯,并实现和APP数据交互。
一、总体概述
(1)、AOA 协议
       AOA协议用于Android配件模式下通过USB与主机进行通信。基于AOA协议实现Android USB通信方式称为配件模式。此模式下,与Android终端通讯的另一端设备称为Android配件,两者都必须支持AOA协议。在USB通讯过程中,Android终端充当USB从机,Android配件充当USB主机并为总线供电。Android配件需要具有主机控制器并支持AOA协议。CH559内置USB主机控制器并支持AOA协议。通讯逻辑框图如下:
  
(2)、AOA协议通讯流程
  
具体如下:
       A.等待安卓设备连接;
       B.确定手机支持附属模式(配件模式 );
当安卓设备接入USB主机时,一定处于以下3种模式之一:
       *a.支持附属模式,并且已经在处于这种模式中;
       *b.支持附属模式,但是还没有进入该模式;
       *c.不支持附属模式;
      当连接初始化时,处理器需要检测安卓设备的VID(供应商ID)和PID(产品ID)。如果设备已经在附属模式(case a),VID需要匹配谷歌ID 0x18D1,PID应是0x2D00或者0x2D01。如果满足以上条件,处理器就可以和安卓设备建立数据通路,使用协议通过批量端点进行通讯。在配件模式,没有必要启动设备。
NOTE:
0x2D00用于支持配件模式的安卓设备;
0x2D01用于支持配件模式和ADB (Android Debug Bridge)协议,额外开放了2个端点的二次端口用于安卓调试,如果你可以在PC上进行模拟处理器,就可以用这2个端点进行调试。通常,不要使用这个接口除非(In general, do not use this interface unless your accessory is implementing a passthrough to ADB on the device.)。
       C.如果VID和PID不符合安卓设备的配件模式,处理器就不能辨别这个安卓设备是否支持配件模式(目前不在该状态)或者(不支持该模式)。这是因为设备并不会在一开始就报告VID和PID,因此,处理器应该尝试让设备进入配件模式,以判定设备是否支持该模式。
主机尝试启动Android配件模式:
●发送一个0x33控制请求(Get Protocol),来得出设备是否支持( the Android accessory protocol),返回一个非零的数字,这个数字代表了该设备支持的协议版本号;这是一个端点0的控制请求,主要有以下特性:
requestType:    USB_DIR_IN | USB_TYPE_VENDOR(0xC0)
request:        0x33
value:          0
index:          0
data:       protocol version number (16 bits little endian sent from the device to the            accessory)
 
●如果设备返回合理的协议版本,处理器将向设备发送一个标识字符串,这个字符串信息将为设备找一个合适的应用(APP),如果不存在合适的应用(APP),将会提供一个URL。这些是端点0的控制请求(对于每个不同的字符串ID),有以下特性:
requestType:    USB_DIR_OUT | USB_TYPE_VENDOR(0x40)
request:        0x34
value:          0
index:          string ID
data            zero terminated UTF8 string sent from accessory to device
 
*以下字符串ID是被支持的,每个字符串ID最大长度不超过256B,并且一定以 `\0`结尾
 
manufacturer name:   0
model name:          1
description:         2
version:             3
URI:                4
serial number:      5
 
●当发送标识字符串时,需要设备启用配件模式,这是一个端点0的控制请求,主要有以下特性:
requestType:    USB_DIR_OUT | USB_TYPE_VENDOR(0x40)
request:        0x35
value:          0
index:          0
data:           none
 
       在发送完最后一个控制请求后,连接的USB设备应该在配件模式下向总线重新报告自己的信息,处理器可以重新枚举该设备(进行一次复位操作);如果设备成功切换至配件模式 ,VID和PID会不同,并且符合谷歌的VID和PID,而不是制造商ID,处理器可以和安卓设备建立通讯。
       如果以上任何一个步骤出错,设备都无法支持配件模式,处理器需要等待下一个设备连接。
建立通讯连接
       C.如果处于accessory mode的安卓设备被插上,处理器查询设备的接口和端点描述符去获取和设备通信的批量端点。一个PID是0x2D00的安卓设备拥有一个包含2个批量端点的接口,用于数据上下传。一个PID是0x2D01的安卓设备拥有2个接口,2个批量端点分别用于2个接口的数据上下传,第一个接口是标准通信(standard communication),第二个接口主要用于ADB  communication。为了能够和接口通讯,需要找到一个批量上下传端点,使用SET_CONFIGURATION (0x09) 请求设置配置为1,然后就可以和端点通讯了。
 
二、硬件设计
       CH559是一款兼容MCS51的增强型E8051内核单片机,79%的指令是单字节单周期指令,内置63K Code Flash,6K+256B Ram。CH559 内嵌USB控制器和双USB收发器,支持 USB-Host 主机模式和 USB-Device 设备模式,支持 USB 2.0 全速 12Mbps 或者低速 1.5Mbps,USB 主机模式下可以通过双端口 Root-HUB 同时管理两个 USB 设备。支持最大 64 字节数据包,内置 FIFO,支持 DMA。
三、软件设计
       (1)、USB主机功能开启
               InitUSB_Host( );
      (2)、等待USB设备连接
        if ( UIF_DETECT )            // 如果有USB主机检测中断则处理
        {
            UIF_DETECT = 0;          // 清中断标志
            AccessoryModeOpenSuc = 0;//清除模式设置标志位
            s = AnalyzeRootHub( );   // 分析ROOT-HUB状态
            if ( s == ERR_USB_CONNECT )
            {
                FoundNewDev = 1;
            }
        }
      (3)、设置Android配件模式
s = InitRootDevice( );  // 初始化USB设备,Accessory mode预设置
s = InitRootDevice( );  // 设置Android配件模式
获取批量传输端点
      (4)获取AOA协议版本、关联URL、启动配件模式
AOAModeInit();          // AOA初始化函数
      (5)、批量数据通讯
四、可拓展功能
       CH559的IO、SPI、串口、并口等接口资源可以连接需要扩展的功能模块:
         A.连接其他传感器进行数据采集上传;
         B.通过串口连接其他串口模块进行数据的转发、透传或者加密;
         C.其他硬件采集模块数据与Android手持终端的数据交互等;
五、应用场合
       汽车电子、手机周边、游戏产品等。
六、源码

       CH559_AOA.rar 

 Android Open Accessory Protocol 2_0 Android Open Source.zip 

 沁恒USB单片机选型表.pdf 

①低功耗、高性价比蓝牙M0单片机CH577 ②超高性价比USB单片机CH552 ③免编程,串口扩展以太网芯片CH9120 ④免编程,串口转蓝牙芯片CH9141
WCHCN
37
主题
241
回复
发表于2017-07-04 11:14:13   |  显示全部楼层
2#
①低功耗、高性价比蓝牙M0单片机CH577 ②超高性价比USB单片机CH552 ③免编程,串口扩展以太网芯片CH9120 ④免编程,串口转蓝牙芯片CH9141

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部