USB开发那点事

1、USB 端点

在USB通信中,端点(Endpoint)定义了设备与主机之间数据传输的方向和类型。对于上述函数中的端点0、1、2,它们具有不同的功能:

  1. 端点0 (Endpoint 0):

    • 通常用于控制传输(Control Transfers),处理标准的USB请求,如设备的枚举过程(enumeration)、获取设备描述符等。
    • 在USB规范中,端点0是必须存在的,并且它是唯一一个没有方向性的端点,即它既可以接收也可以发送数据包。
  2. 端点1 (Endpoint 1):

    • 根据上下文,这里被配置为中断端点(Interrupt Endpoint),用于周期性地传输小量的数据,比如鼠标或键盘的状态更新。
    • 中断端点用于那些需要定期报告状态的应用场合,例如键盘按键的改变。
    • 在这个例子中,端点1被配置为只支持从设备到主机的数据传输(输入端点),并且对于IN事务返回NAK(Not Acknowledged),这可能意味着设备在接收到IN令牌后不准备发送数据。
  3. 端点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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值