用375接收大量數(shù)據(jù)有問題

用375接收大量數(shù)據(jù)有問題 你好!我是浙大三色研發(fā)部的徐明明,我們買的你們CH375A的評估板作usb主機(jī),用來和數(shù)據(jù)采集設(shè)備(CCD光譜儀)usb通訊。 現(xiàn)在接收數(shù)據(jù)有問題,本應(yīng)收到4168字節(jié),結(jié)果只收到2060個(gè)字節(jié),不知道是否程序問題還是375速度問題 接收子程序如下 void Read_Usb_Data( void ) // 讀取數(shù)據(jù) { unsigned char i,len,s; tog_1=1; len=0x40; while(len==0x40){ toggle_send(tog_1); s=issue_token( ( 0x82 << 4 ) | DEF_USB_PID_IN ); if(s==USB_INT_SUCCESS) { /* SETUP階段DATA0操作成功 */ len=rd_usb_data(buffer); printf("len=%02x\n",(unsigned short)len); for( i=0;i!=len;i++ ) printf("%02x ",(unsigned short)buffer[i]); tog_1=tog_1 ? 0:1; } else if ( s==USB_INT_RET_NAK ){ mDelaymS(2); } } toggle_send(tog_1); s=issue_token( ( 0x82 << 4 ) | DEF_USB_PID_IN ); if(s==USB_INT_SUCCESS) { /* SETUP階段DATA0操作成功 */ len=rd_usb_data(buffer); printf("len=%02x\n",(unsigned short)len); for( i=0;i!=len;i++ ) printf("%02x ",(unsigned short)buffer[i]); tog_1=tog_1 ? 0:1; } else if ( s==USB_INT_RET_NAK ){ mDelaymS(2); } }

后來我把toggle_send改成toggle_recv 程序如下 void Read_Usb_Data( void ) // 讀取數(shù)據(jù) { unsigned char i,len,s; tog_1=0; len=0x40; while(len==0x40){ toggle_recv(tog_1); s=issue_token( ( 0x82 << 4 ) | DEF_USB_PID_IN ); if(s==USB_INT_SUCCESS) { /* SETUP階段DATA0操作成功 */ len=rd_usb_data(buffer); // printf("len=%02x\n",(unsigned short)len); for( i=0;i!=len;i++ ) printf("%02x ",(unsigned short)buffer[i]); tog_1=tog_1 ? 0:1; } else if ( s==USB_INT_RET_NAK ){ mDelaymS(2); } } toggle_recv(tog_1); s=issue_token( ( 0x82 << 4 ) | DEF_USB_PID_IN ); if(s==USB_INT_SUCCESS) { /* SETUP階段DATA0操作成功 */ len=rd_usb_data(buffer); // printf("len=%02x\n",(unsigned short)len); for( i=0;i!=len;i++ ) printf("%02x ",(unsigned short)buffer[i]); tog_1=tog_1 ? 0:1; } else if ( s==USB_INT_RET_NAK ){ mDelaymS(2); } } 能接收到4172字節(jié) 多了4字節(jié) 而且采到的數(shù)據(jù)數(shù)一段段不連續(xù)的 請問是程序問題還是375速度不夠?

把你的數(shù)據(jù)收到后輸出來看看,估計(jì)是接一個(gè)包少一個(gè)包.DATA0,DATA1沒有切換的問題.


(1)第二次的接收數(shù)據(jù)的流程才是正確的,但whil( len == 40 )循環(huán)中已經(jīng)把所有數(shù)據(jù)全部讀完,下面為何還會再讀一次? (2)不知道這個(gè)設(shè)備的操作流程是怎樣的,最好讓其與計(jì)算機(jī)通信,然后模仿計(jì)算機(jī)的流程去操作


郁悶啊 1樓說沒切換問題 2樓說第2個(gè)流程是正確的 到底哪個(gè)說的對??


補(bǔ)充:tog_1(tog_1 = 0)只能被初始化一次 若Read_Usb_Data()被多次調(diào)用后,tog_1會被多次初始化,導(dǎo)致不同步


這是正常的數(shù)據(jù)--用bushound抓的 同一幀(4168字節(jié))的偶數(shù)字節(jié)的高半位只有2種數(shù)字(例中為e或f 也可能是1或2 2或3 ... 5或6等等)

cc e1 ae e1 99 e1 8f e1 81 e1 69 e1 5a e1 4b e1 39 e1 2e e1 1b e1 10 e1 07 e1 fd e0 f4 e0 e6 e0 de e0 d5 e0 ce e0 c8 e0 ba e0 b5 e0 b0 e0 a6 e0 a0 e0 9b e0 95 e0 91 e0 8c e0 84 e0 83 e0 7d e0 77 e0 77 e0 78 e0 75 e0 73 e0 70 e0 6c e0 69 e0 。。。。。。 70 fe a5 fe de fe 14 ff 3f ff 66 ff 8f ff b4 ff d4 ff eb ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff e6 ff ca ff a7 ff 7b ff 4e ff 1b ff e1 fe a6 fe 67 fe 1d fe d5 fd 88 fd 3c fd ed fc 9a fc 47 fc f2 fb 9e fb 49 fb ee fa 9a fa 46 fa ed f9 9a f9 44 f9 f2 f8 a6 f8 53 f8 06 f8 bd f7 68 f7 18 f7 c9 f6 7f f6 3b f6 f8 f5 b8 f5 7c f5 40 f5 08 f5 c7 f4 92 f4 5e f4 2d f4 f9 f3 c4 f3 9c f3 70 f3 4b f3


這是用375接收的數(shù)據(jù) 同一幀(4172字節(jié))里面,偶數(shù)字節(jié)的高半位有好幾種,感覺是375速度或程序有問題,把不同周期的采樣混合了。畫出來的曲線不是連續(xù)的,一段一段的 4f 70 4f 70 4b 70 4a 70 這里是7 4c 70 4b 70 4a 70 4a 70 50 70 50 70 4e 70 4e 70 4f 70 4f 70 4f 70 4d 70 。。。。。。 43 80 44 80 45 80 41 80 這里是8 45 80 43 80 43 80 46 80 46 80 43 80 45 80 4a 80 48 80 47 80 48 80 49 80 47 80 45 80 47 80 46 80 45 80 45 80 46 80 47 80 。。。。。。 77 d0 7a d0 7b d0 7e d0 這里是d 85 d0 86 d0 83 d0 80 d0 83 d0 88 d0 88 d0 81 d0 82 d0 87 d0 8a d0 8c d0 8c d0 8c d0 8a d0 8a d0 8e d0 8e d0 89 d0 88 d0 8a d0 8c d0 91 d0 98 d0 。。。。。。。。。 57 20 55 20 52 20 51 20 這里是2 4f 20 4e 20 4d 20 4d 20 4a 20 49 20 4a 20 4d 20 4d 20 4a 20 4c 20 4d 20 4a 20 47 20 48 20 4c 20 4b 20 4b 20 4e 20 4c 20 。。。。。。。。。。


補(bǔ)充2樓,我就是在模仿計(jì)算機(jī)的啊 whil( len == 40 )循環(huán)中已經(jīng)把所有數(shù)據(jù)全部讀完,下面再讀一次其實(shí)是沒用的


去掉下面的 這樣

void Read_Usb_Data( void ) // 讀取數(shù)據(jù) { unsigned char i,len,s; tog_1=0; len=0x40; while(len==0x40){ toggle_recv(tog_1); s=issue_token( ( 0x82 << 4 ) | DEF_USB_PID_IN ); if(s==USB_INT_SUCCESS) { /* SETUP階段DATA0操作成功 */ len=rd_usb_data(buffer); // printf("len=%02x\n",(unsigned short)len); for( i=0;i!=len;i++ ) printf("%02x ",(unsigned short)buffer); tog_1=tog_1 ? 0:1; } else if ( s==USB_INT_RET_NAK ){ mDelaymS(2); } } }


但是我讀1幀數(shù)據(jù)(4168字節(jié)) 只要調(diào)用1次Read_Usb_Data()啊

讀下幀數(shù)據(jù)應(yīng)該關(guān)系不大吧?


打印函數(shù)不對,請修改后測試: printf("%02x ",(unsigned short)buffer);


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频