当要传的数据大于64时该怎么办?是多加一个循环吗?边写边读然后再在里面加一个DISK_RD_GO命令吗? for(j=0;j++) { for(i=0;i<64;i++) { ... } .write_command_to_usb(DISK_RD_GO)?? }
CH375做主机操作U盘还是做设备和计算机进行数据通信?如果和计算机通信的话,那么每次写完64字节的数据之后,需要等待计算机取走,计算机取走之后CH375会产生端点上传中断。之后在发送下一包数据。
是做设备和计算机上位机进行数据通信。我试了下,写入128个数据要发送65个数据,发现前64数据接收个正常,第65个数据就重复变成已接收的第一个数据了。你说的端点上传中断是怎么回事?能具体说说吗?不用什么特别的函数指令吗?
这是我的发送函数: usb_tx(void) { int i,j; //usb数据发送 write_command_to_usb(WR_USB_DATA7); //发送写入数据命令 write_data_to_usb(length);//写入第一个字节,即后续数据长度 for(j=0;j { for(i=0;i<64;i++) //连续写入64个字节数据 { write_data_to_usb(UWR_BUFFER[j][i]); } } //等待产生中断表示数据已经被USB主机接收 do{ while(ch375_intflag == 1); //等待中断产生 ch375_intflag = 0; //清除CH375中断标志位 } while(ch375_status != USB_INT_EP2_IN); //等待USB数据发送成功
write_command_to_usb(UNLOCK_USB); //发送释放当前USB缓冲区命令 return 1; } 接收函数: usb_rx(void) { int i,j; write_command_to_usb(RD_USB_DATA); //发送读取数据命令 length = read_data_from_usb();//读取第一个字节,即后续数据长度 for(j=0;j { for(i=0;i<64;i++) //读取当前USB端点2接收到的数据 { URD_BUFFER[j][i] = read_data_from_usb();
} } return 1; } 有什么问题吗?
有问题,每次发送数据只能是64字节,当写64字节到CH375里面去之后,计算机取走你写的64字节之后,CH375中断引脚会拉为低电平。这个时候读取中断状态。如果中断状态为批量端点上传数据的话,那么解锁缓冲区。在发送下一包的数据。如此循环,直到你发送的数据发送完为止。
现在已经可以在上位机中把要发送的大于64字节的数据下传(我发送了512字节),数据没错。可是上传的时候出现了错误,只能传最后64字节之内的数据,前面的数据全被覆盖。不知道修改哪里,头都晕了,求帮助啊!
xiaochen19:我想问一下你是如何实现下传大于64字节数据的,上传大于64字节的数据实现了么?能否交流一下~~
上传大于64字节的数据一次只能上传64字节,等上传数据成功之后在传输你剩余的数据。