文章目录
1.主机如何进行识别
usb主机/集线器在DP、DM口常态是下拉15K电阻,设备通过上拉(接1.5k的电阻)相应的口来实现,低速设备设备上拉DM、全速设备上拉DP(区别全速和高速需要进一步通信)来时实现。
2.伪代码实现
//改变状态的时候需要加入消抖的流程
void usb_hotplug_task()
{
static int state=0;
//初始化io口为下拉状态
hotplug_init();
if(state == 0){
if(检测到外部下拉电阻){
state = 从机模式;
}
if(检测到dp上的电平为1 || 检测到dm上的电平为1){
state = 主机模式;
}
}else if(state == 从机模式){
//关闭下拉模式
hotplug_uninit();
//dp设置为上拉;
DP_IO_UP = 1;
if(检测到dp电平为1)
state = 0;
}else if(state == 主机模式){
if(检测到dp上的电平为0 && 检测到dm上的电平为0){
state = 0;
}
}
}