采用PDIUSBD12的USB系统固件程序设计
USB设备在正常使用以前,必须由主机配置设备。主机一般会从USB设备获取配置信息后再确定此设备有哪些功能。
作为配置操作的一部分,主机会设备设备的配置值,如果必要的话会选择合适的接口备选设备。其初始化函数为:
void D12_int()
{ XmtBuff.pNum=16;
D12_COMMAND=0xf4;//读中断寄存器
ist=D12_DATA;
ist=D12_DATA;
if(ist 0x01) //ENDP0_OUT
{XmtBuff.out=0;
XmtBuff.in=1;
D12_COMMAND=0x40; //读OUT最后状态
ist=D12_DATA;
if(ist 0x20)//收到SETUP包
{ Setup_read();
Setup_control();
}
else
{ Setup_read();
}
}
else if(ist 0x02)//ENDP0_IN
{ XmtBuff.in=1;
D12_COMMAND=0x41;//读in最后状态
ist=D12_DATA;
USB_submit();
}
else if(ist 0x04)//ENDP1_OUT
{ XmtBuff.out=2;
XmtBuff.in=3;
D12_COMMAND=0x42;//读out最后状态
ist=D12_DATA;
read_out();
}
else if(ist 0x08)//ENDP1_IN
{ XmtBuff.in=3;
D12_COMMAND=0x43;//读in最后状态
ist=D12_DATA;
XmtBuff.b[0]=5;
XmtBuff.wrLength=1;
XmtBuff.p=XmtBuff.b;
USB_submit();
}
……
在发出连接USB命令后,主机先读取设备描述符,然后发出设置USB地址SETUP包,设置USB地址后,进行主机客户驱动与设备初始化。其余端点(ENDPOINT)依此类推。
在其头文件里需定义USB规范中的各种描述符格式,包括设备描述表、配置描述表、接口描述表、端点描述表、字符串描述表以及描述表类型。这样,在发送配置[,接口(1),端点(1),接口(2),端点(2),…,类,厂商等]联合描述表时,主机USBD可以根据描述类型标识区分各种分描述表。
评论