根据您的描述以及提供的代码片段,您在CY68013固件中将EP8配置为512字节的输出端点(OUT Endpoint),但实际通信中需要1024字节才能触发FIFO满/空状态。结合Slave FIFO模式的工作机制,以下是可能的原因及解决方案:
EP6E7CFG寄存器配置问题(最可能原因)
CY68013的EP8端点实际大小受 EP6E7CFG 和 EP8CFG 寄存器共同控制:
EP6E7CFG的bit7 (EP8ISO) 决定EP8大小优先级:EP6E7CFG[7]=1 (默认值?),则强制EP8为1024字节(忽略EP8CFG的配置)。EP6E7CFG[7]=0,则EP8大小由EP8CFG[7]决定(0=512字节,1=1024字节)。EP6E7CFG,可能导致EP8被强制设为1024字节。EP8配置寄存器(EP8CFG)值错误
EP8CFG = 0xA0; // 二进制: 1010 0000
// bit7=1: 1024字节 (若EP6E7CFG[7]=0则此设置无效)
// bit6=0: OUT端点
// bit5:4=00: 单缓冲 (零缓冲)
// bit1:0=00: BULK传输但若EP6E7CFG[7]=1,此配置中的bit7会被忽略。
固件未正确初始化EP8
您的代码片段中缺失对端点的显式配置。需确认EP8CFG和EP6E7CFG的初始化逻辑是否被执行。
在TD_Init()中添加以下配置,确保EP8大小为512字节:
void TD_Init() {
// ... 现有代码
IFCONFIG = 0x43; // 外部时钟,Slave FIFO模式
// 关键配置:强制EP8使用512字节
EP6E7CFG &= ~0x80; // 清除EP6E7CFG[7]=0 (取消EP8的1024字节强制)
EP8CFG = 0x20; // EP8: 512字节, OUT, 单缓冲, BULK
// 0x20 = 0010 0000b (bit7=0, 512字节)
// 可选:明确设置FIFO大小
FIFORESET = 0x80; // 激活NAK所有FIFO
FIFORESET = 0x08; // 复位EP8 FIFO
FIFORESET = 0x00; // 结束复位
}添加调试代码,检查寄存器的实际值:
void main() {
TD_Init();
while(1) {
printf("EP8CFG: %02Xn", EP8CFG); // 应为0x20
printf("EP6E7CFG: %02Xn", EP6E7CFG); // 应为0x00 (bit7=0)
}
}确认上位机:
wMaxPacketSize=512)。| 寄存器 | 地址 | 关键位 | 推荐值 | 作用 |
|---|---|---|---|---|
EP6E7CFG | 0xE68B | bit7 (EP8ISO) | 0 | 禁用EP8 1024强制 |
EP8CFG | 0xE68E | bit7 (SIZE) | 0 | EP8=512字节 |
bit6 (DIR) | 0 | OUT端点 | ||
bit5-4 (MODE) | 00 | 单缓冲 | ||
FIFORESET | 0xE68C | 0x80→0x08→0x00 | - | 复位EP8 FIFO |
FIFORESET寄存器)。EP8作为OUT端点需通过EP8CFG的DIR=0明确设置。IFCONFIG中的IFCLKSRC是否匹配硬件设计)。请更新固件后重新测试。若问题仍存,建议使用Cypress SuiteUSB工具监控FIFO状态和寄存器值以进一步诊断。
举报
更多回帖