ch376作为主机和ch340通讯的问题

用了你们https://www.wch.cn/bbs/thread-65122-1.html

这个里提供的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());
}




只有登录才能回复,可以选择微信账号登录