CH375与中断传输

CH375用作HOST,连HID类的设备,条码扫描枪,利用论坛提供的例程,基本上实现了功能。 现在有几个问题: 1)例程中设定CH375工作在低速模式,用的是 CH375_WR_CMD_PORT(0x0b); /* 切换使375B进入低速模式 */ CH375_WR_DAT_PORT(0x17); CH375_WR_DAT_PORT(0xd8); 是不是只针对CH375B,我用CH375A是该命令总是失败。看到CH375数据手册版本3D上有一条SET_USB_SPEED命令,试了一下,可以 CH375_WR_CMD_PORT(0x04); /* 切换使375B进入低速模式 */ CH375_WR_DAT_PORT(0x01); 不知该命令对那些版本的CH375有效。

2)设备有一个中断In端点用来传输数据。我发现例程中,在完成设备的枚举和设置之后,发送In令牌启动了中断传输,以后单片机在收到CH375读取数据成功的中断后,再发送IN令牌获取下一次的数据。我的问题是: 中断传输应该是USB Host以一定的速度发送In令牌读取数据,CH375的手册上也说明支持中断传输,可是In令牌发送的频率是怎么决定的?按理说端点描述符中有相关的说明,可CH375是怎么知道这个频率的?好像没有针对这个设置CH375的命令。CH375怎么知道In令牌是发送到中断端点还是批量端点,也就是说CH375怎么知道单片机设置的IN令牌是要进行中断传输呢?USB刚接触,还望高手不吝赐教。

(1)SET_USB_SPEED只是针对CH375B芯片,其余型号不支持该命令 (2)频率是在中断端点描述符中确定的;CH375本身不关心这个频率,也不需要设置命令,是由用户按照设备中断端点描述符中频率值发送IN令牌包;IN令牌包中有端点号,指明操作哪个端点的,CH375本身也不关心具体的传输类型,都是用户决定的,参考ISSUE_TKN_X或ISSUE_TKN命令。


谢谢。 您的意思我明白了。能不能这样说,CH375处理的是USB协议中提到的Transaction的概念,而Transfer的流程是要用户来保证的? 我是参考了网站提供的常用USB源程序中CH375B芯片做主机操作鼠标键盘的例子程序。看下来觉得程序的流程是:枚举和设置完成之后,发送In令牌启动整个流程,如果设备端响应了该In令牌,完成了一次传输,那么CH375会向CPU申请中断,CPU在中断服务程序中,读取设备发送的数据,紧接着再发In令牌,启动下一次接收。感觉上CPU(或者说用户)是根据设备发送数据的频率来发送In令牌的。这好像与USB中的中断传输有些区别?还是说实际上在例子程序中,CH375向CPU申请中断的频率其实基本是固定,基本上与一个In事务的时间一致?


CH375在发送In令牌之后,是不是只有收到数据完成一次In事务才会向CPU申请中断?


(1)各种传输的流程是由用户通过软件实现 (2)我们例程中并没按照中断端点描述符中指定的频率去读中断点,仅供参考。正确的做法是应该 (3)这个说法不准确,示例程序中CH375向CPU申请中断的频率并不是固定的,还与设备本身数据准备的快慢也有关系。如果CH375每发一个IN事务,设备都能立即响应,那么频率自然高;反之,设备都未能立即响应,产生超时,CH375会进行重试N次(N由用户决定),那么频率自然低。 解释的不够详细,建议多看看USB协议


非常感谢。


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