oo USB U盘程序疑问

[复制链接]
2727|5
 楼主| xuwukong 发表于 2008-4-23 22:59 | 显示全部楼层 |阅读模式
对于D12就两个资料,一个芯片资料,一个固件编写指导,在指导里<br />对端点0&nbsp;OUT<br />endpoint0_out()<br />{<br /><br />&nbsp;if(设置包)<br />&nbsp;&nbsp;设置包处理;<br />else&nbsp;if(控制写的数据阶段)<br />&nbsp;&nbsp;&nbsp;发数据到主机<br />}<br />端点0&nbsp;IN<br />endpoint0_in()<br />{<br />&nbsp;发送数据到主机<br />}<br />对OO的endp0_in(),endp0_out()结构还比较迷糊,各位见过的牛人给说明这个结构,另外这个PORTIN的中断标志是怎么产生的.只知道PORTOUT是收到主机来的数据产生中断的<br /><br />
computer00 发表于 2008-4-24 02:34 | 显示全部楼层

呵呵,我的程序的确存在着一些理解上的问题

这主要是我早期对这个编程时的理解错误了。不过它还是可以很好的工作的。<br /><br />D12的输入端点当主机请求数据时会发生中断,发送完毕后好象也会发生中断。<br />而有些USB芯片则只在数据传输完毕后才产生中断,这样的话就得事先填充数据。<br />而我的程序则不一样,是等中断端点发送请求后,再写数据到端点的。如果移植到<br />其他芯片,在中断处理那里要做一下修改,就是将判断是否需要处理数据那里的<br />中断发生标志的判断条件去掉。<br /><br />端点0发送setup包之后,我的程序并未做处理,而是等主机请求数据输入后才分析数据。<br />如果是输入请求,则返回数据。如果是输出数据,则等待数据发送,然后再返回0长度的状态包。
 楼主| xuwukong 发表于 2008-4-27 19:20 | 显示全部楼层

USB Get_Descriptor一次传输不完的过程是怎样

主机要求一个描述符,设备一次传输不完,比如需16,实际一次只能传8字节,以后的过程是不是这样:<br />设备发8字节,回主程序继续等待中断<br />主机再发USB&nbsp;Get_Descriptor<br />设备再回8字节,回主程序继续等待中断<br />主机识别传输完毕,回ACK<br />
computer00 发表于 2008-4-28 16:08 | 显示全部楼层

不是这样的

主机请求获取描述符,之后主机就会发输入请求令牌包,然后设备就以最大包长度返回<br />描述符,直到全部返回完(最后一次可能不足最大包长)。<br /><br />有一个例外就是在未设置地址之前,主机请求获取设备描述符,设备只需要返回<br />一次数据就行了,接下来主机就会复位USB,设置地址。
shushi007 发表于 2008-4-28 18:42 | 显示全部楼层

周立功出的书里面详细写了

周立功的pdiusbd12&nbsp;&nbsp;USB固件变成与驱动开发一书第91页把usb和上位机之间如何传递描述的过程详细写了&nbsp;&nbsp;你说的哪个里面就有!
 楼主| xuwukong 发表于 2008-4-29 22:37 | 显示全部楼层

终于明白了

没有这本书,看了个关于枚举的PDF<br />弄清楚了<br />所有事务由主机发起,即主机先发令牌包(SETUP,IN,OUT)<br />一次没收完,主机下次事务还是先发IN包,设备再送,主机发ACK确认,再重复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部