这个里提供的C51代码,改了一个arduino的spi通信控制ch376和ch340的芯片通信.
发现你们例子中的第一是可以请求成功,ch340也有反回数据的,但第二次再和ch340通信时就会反回错误0x2A.
不知道是什么原因呢,这个0x2A是什么错误码.
热门产品 :
CH397: 高集成度、低功耗USB网卡芯片
这个里提供的C51代码,改了一个arduino的spi通信控制ch376和ch340的芯片通信.
发现你们例子中的第一是可以请求成功,ch340也有反回数据的,但第二次再和ch340通信时就会反回错误0x2A.
不知道是什么原因呢,这个0x2A是什么错误码.
/* 设置重试次数-不重试,NAK状态返回 */ CH375_WR_CMD_PORT( CMD_SET_RETRY ); CH375_WR_DAT_PORT( 0x25 ); CH375_WR_DAT_PORT( 0x00 ); endp6_mode = endp7_mode=0x80; //DATA0发送器 for(;;) { /* 测试1:定时发送数据到串口,341的rx和tx短接 */ wr_usb_data(4, (unsigned char *)"abcd"); toggle_send(); s = issue_token(bulkout_num , DEF_USB_PID_OUT); if(s == USB_INT_SUCCESS) { for(i=0;i<0xfff;i++) //连续发送IN包 { CH375_WR_CMD_PORT( CMD_SET_ENDP6);//设置接收同步标志 CH375_WR_DAT_PORT( endp6_mode ); s = issue_token(bulkin_num , DEF_USB_PID_IN); if(s == USB_INT_SUCCESS)//打印输出 { len = rd_usb_data( dataBuf ); for(i=0;i!=len;i++) { printf("%02x ",(unsigned short int)dataBuf[i]); }printf("\n"); endp6_mode ^= 0x40; } } } else mDelayms(200); }
就是例子的这里改的,这里的第一次串口是有数据反回的,后边的就怎么修改或者第二次发同样的也没有数据反回了,现在不知道是没有发送出去,还是发送出去了,ch376没有返回.
自已回复一下解决办法吧,也不知道是不是对的方法
#define CMD1H_CLR_STALL 0x41 /* 主机方式: 控制传输-清除端点错误 */
使用这个命令清除了一下主机out端点错误,然后就可以再发送和接收数据了.但是不知道是那里的错误.像下边这个的函数,在一次发送完成了,调用一下就可以再发送的接收了
uint8_t Ch376msc::cleanSTALL(){ spiBeginTransfer(); sendCommand(CMD1H_CLR_STALL); //清除端点错误 write(bulkout_num); delayMicroseconds(2); spiEndTransfer(); return (spiWaitInterrupt()); }