1、USB 端点
在USB通信中,端点(Endpoint)定义了设备与主机之间数据传输的方向和类型。对于上述函数中的端点0、1、2,它们具有不同的功能:
-
端点0 (Endpoint 0):
- 通常用于控制传输(Control Transfers),处理标准的USB请求,如设备的枚举过程(enumeration)、获取设备描述符等。
- 在USB规范中,端点0是必须存在的,并且它是唯一一个没有方向性的端点,即它既可以接收也可以发送数据包。
-
端点1 (Endpoint 1):
- 根据上下文,这里被配置为中断端点(Interrupt Endpoint),用于周期性地传输小量的数据,比如鼠标或键盘的状态更新。
- 中断端点用于那些需要定期报告状态的应用场合,例如键盘按键的改变。
- 在这个例子中,端点1被配置为只支持从设备到主机的数据传输(输入端点),并且对于IN事务返回NAK(Not Acknowledged),这可能意味着设备在接收到IN令牌后不准备发送数据。
-
端点2 (Endpoint 2):
- 被配置为批量端点(Bulk Endpoint),用于传输大量数据,如文件传输等。
- 批量端点适合那些对传输时间没有严格要求的数据,如打印机的数据传输。
- 这个端点被配置为支持双向数据传输,并且对于IN事务返回NAK,对于OUT事务返回ACK(Acknowledged),表明设备准备好接收数据。
每个端点都有其特定的数据传输方向和类型,并且可以有不同的特性,如缓冲区大小、DMA地址等。在USB设备的初始化过程中,正确配置端点是非常重要的一步。
/*******************************************************************************
* Function Name : USBDeviceEndPointCfg()
* Description : USB设备模式端点配置,模拟键盘,除了端点0的控制传输,还包括端点1中断上传
端点2的批量下传
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void USBDeviceEndPointCfg()
{
UEP1_DMA = Ep1Buffer; //端点1数据传输地址
UEP4_1_MOD |= bUEP1_TX_EN; //端点1发送使能
UEP4_1_MOD &= ~bUEP1_RX_EN; //端点1接收使能
UEP4_1_MOD &= ~bUEP1_BUF_MOD; //端点1发64字节缓冲区
UEP1_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK; //端点1自动翻转同步标志位,IN事务返回NAK
UEP2_DMA = Ep2Buffer; //端点1数据传输地址
UEP2_3_MOD |= bUEP2_TX_EN; //端点1发送使能
UEP2_3_MOD |= bUEP2_RX_EN; //端点1接收使能
UEP2_3_MOD &= ~bUEP2_BUF_MOD; //端点1发64字节缓冲区
UEP2_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK; //端点2自动翻转同步标志位,IN事务返回NAK,OUT返回ACK
UEP0_DMA = Ep0Buffer; //端点0数据传输地址
UEP4_1_MOD &= ~(bUEP4_RX_EN | bUEP4_TX_EN); //端点0单64字节收发缓冲区
UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; //OUT事务返回ACK,IN事务返回NAK
}