用了你們http://www.findthetime.net/bbs/thread-65122-1.html
這個里提供的C51代碼,改了一個arduino的spi通信控制ch376和ch340的芯片通信.
發(fā)現(xiàn)你們例子中的第一是可以請求成功,ch340也有反回數(shù)據(jù)的,但第二次再和ch340通信時就會反回錯誤0x2A.
不知道是什么原因呢,這個0x2A是什么錯誤碼.
用了你們http://www.findthetime.net/bbs/thread-65122-1.html
這個里提供的C51代碼,改了一個arduino的spi通信控制ch376和ch340的芯片通信.
發(fā)現(xiàn)你們例子中的第一是可以請求成功,ch340也有反回數(shù)據(jù)的,但第二次再和ch340通信時就會反回錯誤0x2A.
不知道是什么原因呢,這個0x2A是什么錯誤碼.
/*?設(shè)置重試次數(shù)-不重試,NAK狀態(tài)返回?*/ ????????CH375_WR_CMD_PORT(?CMD_SET_RETRY?); ????????CH375_WR_DAT_PORT(?0x25?); ????????CH375_WR_DAT_PORT(?0x00?); ??????? ????????endp6_mode?=?endp7_mode=0x80;???//DATA0發(fā)送器?? ????????for(;;) ????????{ ????????????/*?測試1:定時發(fā)送數(shù)據(jù)到串口,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++)????????//連續(xù)發(fā)送IN包 ????????????????{ ????????????????????CH375_WR_CMD_PORT(?CMD_SET_ENDP6);//設(shè)置接收同步標(biāo)志 ????????????????????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); ??????????? ????????}
就是例子的這里改的,這里的第一次串口是有數(shù)據(jù)反回的,后邊的就怎么修改或者第二次發(fā)同樣的也沒有數(shù)據(jù)反回了,現(xiàn)在不知道是沒有發(fā)送出去,還是發(fā)送出去了,ch376沒有返回.
自已回復(fù)一下解決辦法吧,也不知道是不是對的方法
#define CMD1H_CLR_STALL ? ? 0x41 ? ? ? ? ? ?/* 主機方式: 控制傳輸-清除端點錯誤 */
使用這個命令清除了一下主機out端點錯誤,然后就可以再發(fā)送和接收數(shù)據(jù)了.但是不知道是那里的錯誤.像下邊這個的函數(shù),在一次發(fā)送完成了,調(diào)用一下就可以再發(fā)送的接收了
uint8_t?Ch376msc::cleanSTALL(){ ????spiBeginTransfer(); ????sendCommand(CMD1H_CLR_STALL);?//清除端點錯誤 ????write(bulkout_num); ????delayMicroseconds(2); ????spiEndTransfer(); ????return?(spiWaitInterrupt()); }