USB论坛
直播中

杨勇

8年用户 1271经验值
私信 关注
[问答]

如何在fx2lp中设置等时输出端点?

在 fx2lp 中设置等时输出端点

回帖(1)

最强海贼王

2025-5-30 17:46:13

在Cypress FX2LP(CY7C68013A)中配置等时(Isochronous)输出端点需要结合描述符配置和固件编程。以下是分步指南:


1. 端点描述符配置


在设备描述符中为等时端点分配端点号和参数:


// 端点描述符示例(USB 2.0高速模式)
const USB_EP_DESCRIPTOR ep6out_iso_desc = {
  sizeof(USB_EP_DESCRIPTOR),  // 描述符长度
  USB_DESCRIPTOR_ENDPOINT,     // 类型:端点
  0x06 | 0x80,                // 端点地址:EP6 OUT (0x86)
  0x01,                       // 属性:Isochronous传输,无同步
  0x0400,                     // 最大包大小:1024字节(高速模式)
  0x01                        // 间隔:每1个微帧
};

2. 固件初始化步骤


在固件的TD_Init()函数中进行硬件配置:


void TD_Init(void) {
    // 配置EP6为等时OUT端点
    EP6OUTCFG = 0xE0;  // 0b11100000:
                       // - 启用端点
                       // - 方向OUT
                       // - 类型: Isochronous
                       // - 缓冲区大小: 1024字节(4x256)

    // 设置ISO数据包参数
    ISO0PKTSIZE = 0x0400;  // 每个微帧传输1024字节
    ISO0PKT = 0x0003;      // 每个微帧4个数据包(1024/256=4)

    // 配置FIFO
    FIFORESET = 0x80;       // 激活FIFO复位
    SYNCDELAY;              // 等待同步
    OUTISOENDPKTS = 0x04;   // EP6 OUT双缓冲,每个缓冲4包
    FIFORESET = 0x00;       // 结束复位

    // 启用端点中断
    USBIE |= (1<<6);       // 启用EP6 OUT中断
    ENABLE_EP6_OUT();      // 激活端点
}

3. 中断服务例程处理


处理数据到达事件:


void ISR_Ep6Out(void) interrupt 0 {
    if(EP6OUTCS & 0x02) {  // 检查有效数据
        // 获取数据长度
        WORD pktLen = EP6OUTBCH << 8 | EP6OUTBCL;

        // 处理接收到的数据(示例:DMA传输)
        ISOOUTPKT = 0x0001;  // 使用DMA通道1
        SYNCDELAY;
        ISOOUTSINGLE = 0x01; // 单次传输模式

        // 清除中断标志
        EP6OUTCS &= ~0x02;
    }
}

4. 关键配置说明



  • 双缓冲配置:通过OUTISOENDPKTS设置双缓冲,提高吞吐量

  • 包大小对齐:确保wMaxPacketSize符合USB规范(高速模式最大1024字节)

  • 时钟校准:使用IFCLKSRC寄存器配置内部时钟为48MHz

  • 同步延迟:在关键寄存器操作后插入SYNCDELAY宏保证时序


5. 常见问题排查




  1. 端点不响应



    • 检查EPxCFG寄存器是否启用

    • 验证描述符中的端点方向(OUT需设置最高位)




  2. 数据丢失



    • 增加双缓冲数量(修改OUTISOENDPKTS

    • 确认主机端发送速率不超过设备处理能力




  3. CRC错误



    • 降低传输速率(修改ISO0PKTSIZE

    • 检查物理层信号完整性




6. 参考资源



  1. 《EZ-USB FX2LP Technical Reference Manual》

  2. Cypress AN61345《Designing USB Audio with FX2LP》

  3. 官方示例代码中的isocsrc工程


建议结合USB协议分析仪(如Wireshark+USBpcap)实时监控传输过程,验证配置效果。对于高速等时传输,建议使用DMA方式处理数据以降低CPU负载。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分