汪长鸿 发表于 2013-1-25 15:43:44

USB传数据的疑问

大侠们下午好!公司现在在做一个方案,要求将MCU采集到的数据通过usb发到上位机上,在此之前我对usb的了解几乎为0,于是开始看经典usb书--圈圈教你玩usb,整本书大致看了一遍,现在对usb有了一个概念上的理解。
我现在的疑问是:既然usb所有的操作都是由主机发起,那么我如何或者说什么时候将数据传上去呢?要主机发一个传输的事务然后设备被动的发一次?那么这个事务又如何发起呢?这一点不明白。
还有,我是在usb_MSC(大容量存储设备)上移植的代码,描述符没有任何改动,我也不明白是否要改动,改哪里等等。
最后,如果数据正常发上去了,那么上位机应该通过什么软件来接收这些数据呢?
麻烦大侠们帮忙看看,非常感谢!

wye11083 发表于 2013-1-25 15:51:31

USB端点如果没有数据,主机会一直等待,取决于你的驱动有没有超时。

CANSTAR 发表于 2013-1-25 15:54:32

那么这个事务又如何发起呢?
主机驱动负责。

如果数据正常发上去了,那么上位机应该通过什么软件来接收这些数据呢?
自己编写上位机软件。调用驱动提供的API。

andy9909 发表于 2013-1-25 16:07:08

你用过labview吗 有个组件叫NI-VISA里面可以控制USB我这有一个给STM32授时的程序 你可以看一下

lcw_swust 发表于 2013-1-25 15:43:45

如果是USB转串口
电脑会定时向MCU发送IN包,如果MCU没有数据要发送,就以NAK响应,如果有数据需要发给电脑,就返回数据包(data0/data1),电脑串口就收到数据了
电脑要向MCU发数据,就会发送OUT包,MCU收到数据,电脑就认为串口数据发送成功了

汪长鸿 发表于 2013-1-25 16:11:58

andy9909 发表于 2013-1-25 16:07 static/image/common/back.gif
你用过labview吗 有个组件叫NI-VISA里面可以控制USB我这有一个给STM32授时的程序 你可以看一下 ...

没用过labview,你给的附件里就一个vi文件,表示不知如何使用。不过还是谢谢你啊!

andy9909 发表于 2013-1-25 16:16:11

vi是上位机应用程序的雏形

dr2001 发表于 2013-1-25 16:39:06

1、无论何种传输方式,都是主机发IN Token,然后设备再发送数据。
2、主机何时发IN Token具体情况具体分析,和系统的驱动有关。Bulk传输一般来说必须有上层的请求才会发;中断则系统有可能会有一个缓存。

换句话说,如果是Bulk,用户需要调用Read函数才导致发生USB IN;如果是中断,那么有一个可能是在系统缓冲填满前,系统按照描述符定期自动发;也有可能和Bulk类似。

描述符改不改看标准和具体应用,本来这东西就是描述设备功能的,对上了就不用改。
用Mass Storage的话,设备会被系统标准驱动接管,能进行的操作和标准驱动提供的功能相关。

汪长鸿 发表于 2013-1-25 16:42:10

lcw_swust 发表于 2013-1-25 16:10 static/image/common/back.gif
如果是USB转串口
电脑会定时向MCU发送IN包,如果MCU没有数据要发送,就以NAK响应,如果有数据需要发给电脑 ...

非常感谢您的帮助,我现在有点头绪了,我回去试试,成功了钱您拿走,哈哈!

汪长鸿 发表于 2013-1-25 16:51:29

dr2001 发表于 2013-1-25 16:39 static/image/common/back.gif
1、无论何种传输方式,都是主机发IN Token,然后设备再发送数据。
2、主机何时发IN Token具体情况具体分析 ...

同样感谢您的帮助!有点思路了,回去研究下usb_cdc的代码。

汪长鸿 发表于 2013-1-28 15:45:35

结贴:问题搞定,可以用cdc下的usb向硬件串口发送数据的函数直接将数据发出去,发多少可以由自己指定,我测试过可以一次发4K。但是具体的usb发送过程还是不懂啊,还得慢慢看书看资料积累。就此为止吧,谢谢大家的帮助!
另,结贴的话金币怎么送出去啊?求解!
页: [1]
查看完整版本: USB传数据的疑问