我想用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
很多资料都稳藏了些细节,而这些细节又是很重要的,明白了主机与设备的交互过程,就可以根据项目的资源很容易地编出正确的程序.
期待高手们指点."