欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

51单片机模拟usb口解决思路

更新时间: 2014-01-05 03:14:22 责任编辑: Author_N1

 

51单片机模拟USB口
我想用51来模拟USB的低速模式,有几个问题不明白:
1:在低速模式中,D-和差分器输出是同向吗?
     在全速模式中,D+和差分器输出是同向吗?
2:主机在发送给设备获取描述符请求之前都有什么命令?当主机检测到有低速设备插入时,复位设备,然后向设备发送命令,这个命令是什么呢?我用示波器观察,并解码后,发现是0x69  0x82  0x18,连续好几个包。这个是输入令牌包,为什么开始不发送SOF包?或者是SETUP包?

3:我在接收到SETUP包时必须在多长时间内返回ACK包?

4:模拟全速模式需要什么型号的芯片?ARM行吗?推荐几款。
--参考方法--
没模拟过,都是直接用带硬USB的

4.可以找下NUVOTON的NUC1xx系列的芯片,我现在用的是NUC120,他们的宣讲会一会都会免费送仿真器和简单的开发板
--参考方法--
可以参考一下《圈圈教你玩usb》这本书。
--参考方法--
1)51模拟USB,作主机还是设备模式? 作主机模式太难了,一般使用一片串口转USB来做,比较现实;
2)ARM芯片,一般都自身具备了USB主机和设备部件,只要编程使用就行了;
3)如果你没有ARM基础,这又是一个大工程;
4)所以,还是使用串口转USB来的方便和快速。
--参考方法--
1)用STC的模拟USB设备,30M的时钟,速度没有问题;
2)《圈圈教你玩usb》这本书我看了,看不见令牌包。我主要想学习一下更底层的东西。
3)速度上能达到模拟全速模式的芯片有哪种?请推荐下!
--参考方法--
下面是我从别的地方看到的,请补充:


         "USB总线属一种轮讯方式的总线,USB系统把时间分成一段段,系统管理各事务,合理安排各事务的分派,在某一时间段内有:A地址B端口OUT事务,C地址D端口IN事务.....

事务预处理允许对一些数据流的通道进行控制,从而在硬件级上防止了对缓冲区的高估或低估,通过发送不确认握手信号从而阻塞了数据的传输速度.当不确认信号发过后,若总线有空闲,数据传输将再做一次.

通道的端点可以用NAK信号来通知主机自已正忙,NAK不能作为向主机返还IRP的中止条件.在一个给定的IRP处理过程中,可以遇到任意多个NAK.

对于设备的长时间操作或系统死机,主机驱动程序有时在发送一个IRP时使用定时器对象,限定系统处理IRP时间,超时时,驱动程序取消IRP,向应用程序报事务失败,USB系统从事务队列中取消该事务.

比如:D12设备系统,如下是我的猜测:

当D12收到主机IN命牌后,D12产生一个引脚中断,通知MCU准备数据,同时判断端点缓冲区数据是否可以发送,如果不能发送,它将发送NAK信事情通知主机自已正忙,在下一个周期,D12又收到主机IN令牌,(此时会不会产生中断我不知道),D12又判断端点能不能发送...直至送出为止.

因而与此事务有关的完整通信应为:

host:        Sync-->IN-->ADDR-->ENDP-->CRC5-->EOP-->IDLE

{

D12:        Sync-->NACK-->EOP-->IDLE

host:        Sync-->IN-->ADDR-->ENDP-->CRC5-->EOP-->IDLE

D12:        Sync-->NACK-->EOP-->IDLE

.......................

}

D12:       Sync-->DATA0/1-->DATA-->CRC16-->EOP-->IDLE

.........................

host:       Sync-->ACK-->EOP-->IDLE

很多资料都稳藏了些细节,而这些细节又是很重要的,明白了主机与设备的交互过程,就可以根据项目的资源很容易地编出正确的程序.

期待高手们指点."

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:22
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19908/
本文WWW.DOC100.NET DOC100.NET版权所有。