本文记录为了解决AOA协议连接异常问题,学习USB协议及驱动工作原理过程中整理的笔记。
方法: 阅读Universal Serial Bus Specification Revision 2.0,理解USB设备的识别及通信过程,理解高速通信握手过程,分析USB总线上的数据包。
工具: 示波器,usbmon
参考文档: Universal Serial Bus Specification Revision 2.0,Linux USB驱动源码
主机:USB HOST
设备:USB DEVICE
HUB:介于主机与设备之间的通信设备,位于主机端
文章目录
波形一览
截一个AOA连接正常的波形,先把波形图分为了几部分后面根据每个部分单独分析。
阶段A:发现设备
A:该部分为HUB发现USB设备接入,D+数据线上设备端的3.3V上拉电阻拉高,此时HOST端的HUB检测到设备接入。稳定100ms后HOST发出reset信号。reset部分放在B阶段讨论。
阶段B:枚举设备
首先将B处波形放大图贴出来:
B1:此处就是前面提到的HOST触发的reset信号,Specification中要求该信号不小于2.5us,设备端检测到信号后需要做出答复。
B2:此处的信号有device触发,为chirp K信号,device向D+上驱动电流,呈现出800mv的电压信号。Specification中要求持续时间1ms<t<7ms。
B3:此处为3对chirp K/J信号,由HOST触发,device检测到3对chirp KJ信号后需要切换至高速通信模式(断开上拉电阻,连接D+/D-上的高速终端电阻)
B4:此处为device做出高速模式切换后的信号,由于device的动作,D+ D-上的阻值由于并联减半,信号幅值降到400mv。经过若干个chirp KJ信号,高速通信握手完成,可以以高速模式进行通信