CH554(新版)开发板的例程中有host例程,和Android设备之间是启动AOA模式进行通信。为了和Android设备之间建立ADB连接,想着改一下例程,不启动AOA模式,直接用USB通信,根据ADB协议发送数据包,期望与设备建立ADB连接。但过程中遇到了一些问题,希望得到各位的帮助。
首先说一下,我对ADB连接的理解如下(不对的地方还请各位指正):
1. 连接USB,主机发送CNXN连接请求到手机,即host->Android(ADB_CNXN);
2. 手机发送AUTH认证消息(20字节随机数字)给主机,即 Android -> host (ADB_AUTH_TOKEN);
3. PC使用私钥对这个消息(20字节随机数字)签名然后发送给手机,即host -> Android (ADB_AUTH_SIGNATURE );
4. 手机使用公钥验证签名,如果成功,开始下一步通讯,否则再发送AUTH认证(20字节随机数字)给主机,即 Android -> host (ADB_AUTH_TOKEN);
5. PC将公钥发送给手机,即host -> Android (ADB_AUTH_RSAPUBLICKEY );
6. 手机弹出认证框,用户选择是否加入信任列表
实际烧录程序进开发板后,与手机的通信过程如下:
1.CH554发送CNXN连接请求
可以看到,CH554发送CNXN连接请求,手机端正常回复了ADB_AUTH_TOKEN。
2.发送公钥ADB_AUTH_RSAPUBLICKEY
由于手机上不可能存在公钥,所以即使CH554将随机TOKEN的内容签名,手机也无法利用对应的公钥验证,所以我跳过了ADB_AUTH_SIGNATURE,即私钥签名这一步骤,直接发送了公钥给手机,期望在手机上出现弹窗(公钥的数据内容很长,我直接放最后一部分):
公钥内容全部发送完毕后,手机上期待的弹窗并未出现,且通过USB分析仪可以看到,在多次IN包请求无响应后,程序重置回了最初获取设备描述符的阶段,然后循环。
另外,我也尝试了直接使用例程中提供的AOA模式启动(因为了解到AOA协议中,也有为ADB通信准备的接口,但是测试下来结果更坏,在发送完公钥之后,板子和手机之间的USB连接也断了)
为什么没有弹出对话框呢?是不是我哪里理解得不对,敬请各位提供一些帮助。
|