阅读:1737回复:16
to metaling:bulk传输的一点理解,不知道对不对
metaling 你好,这两天我又改了一下固件部分的程序,理解了一下
bulk传输的过程,不知道对不对希望你给我解答一下。 设备枚举结束后从地址状态转换到了配置状态 通过设置配置使设备正常工作,接下来就是根据端点的配置情况进行 工作,而不论读写动作都是由上位机发起的,也就是说,上位机给 d12发送读写命令,然后才是进行数据的读写! 还有是不是只要进入了工作状态,端点就可以进行工作了 我在周立功的程序里面看到了一个read_write_register() 这个函数如果不用行不行? 请metaling和各位大虾指导!!! |
|
沙发#
发布于:2004-09-20 16:06
对.USB设备有3种状态:默认(DEFAULT),地址(ADDRESSED),配置(CONFIG).当设备枚举完后(加装驱动?),就进入了配置状态.这时,你
的设备的各个工作端点和管道都应当准备好投入工作. USB设备是一个被动设备,他的所有的工作是基于上位机(HOST)来完成 的,按软件的说法叫基于事件流的,也就是说上位机叫你干什么,你才 能干什么,上位机不理你,你干什么也没用,而上位机的动作一般都是 通过唤起中断来实现的. "只要进入了工作状态,端点就可以进行工作了",对,但他不是主动就 可以工作,而是要你来根据你的设备的要求进行一系列的配置才能工 作. 因为我没用过D12这个芯片,也没看过相关资料,所以对那个函数是干 什么的没有概念,不清楚. |
|
|
板凳#
发布于:2004-09-20 16:35
那时不是我可以这样理解我的工作过程
如果我现在想从flash理面读取数据,整个过程应该是 1,将flash中的数据写如d12的主端点缓冲区 然后等待上位机的读取命令 2,上位机通过软件向下位机发送读取数据的命令,具体函数easyd12 的动态连接库里面已经提供了。 3,mcu收到命令进行判断,然后进入了中断中主端点读函数 然后将整个数据传到上位机,由此循环完成了数据传输过程 我的理解对吗??? |
|
地板#
发布于:2004-09-20 21:52
不是吧.
1.收到HOST发来的读命令.(EP0中断或命令端口中断) 2.分析命令. 3.读FLASH,并将读到的数据写入USB相应端点的BUFF.(DMA中断) 4.等待HOST的IN令牌,将数据取走.(相应端点IN中断) |
|
|
地下室#
发布于:2004-09-21 09:20
请问dma中断是什么意思????
顺便还有一个问题,我一直没有理解dma是怎么回事,怎么应用 能不能顺便给我解释一下? 还有那是不是所有的读写过程都要通过控制端点分析阿 也就是说所有过程都要进入主端点中断!!! |
|
5楼#
发布于:2004-09-21 19:09
DMA中断就是说当你的DMA处理完了后,会产生一个DMA中断,你通过他
来判断DMA传输是否完成(最好在传输前设个中断,看看要传输的总长 度,传输完了后再看看是否传完了). DMA传输实际上是为了节省MCU的处理时间而设计的.在DMA传输过程 中,MCU不干涉,可以做自己的事.DMA的时序电路(一般)由外部电路 (DMA控制器产生). 不是.如:我可以通过其他端口(如中断端口)发送命令,固件接收了后, 解析他;也可以不通过命令,直接发送数据,但要求你在固件中进行安 排(?),就是说你知道这个端口发送的就是数据,而且就是这个数据. |
|
|
6楼#
发布于:2004-09-22 10:15
两位好,
我现正想,通过端点2向主机发送数据,数据写在一组数组里。 我只要把数据写入端点2IN缓冲区,然后使能缓冲区是不是就可以了, 然后就是等待主机的IN令牌,把数据取走,进入相应中断,清除中断标志位。 |
|
7楼#
发布于:2004-09-22 10:19
但这样做,根本进不去Ep2IN中断,什么原因呢
|
|
8楼#
发布于:2004-09-22 15:24
jrmforever、metaling、lhaih,你们好,一起研究一下:)
我也是不执行端点索引4的中断,在set config完之后中断寄存器一直为0,我的bus hound中set config之后主机还发送一个URB是select config,然后就停了,你们遇到过这种情况吗,怎么解决的?我觉着在这之前的过程都是正确的 |
|
9楼#
发布于:2004-09-22 19:45
to lhaih:
"只要把数据写入端点2IN缓冲区,然后使能缓冲区是不是就可以了", 对.看样子是你的驱动没有发IN TOKEN. to hongjuangguodong: set config后,完成枚举.然后就等待HOST事件,产生中断.select config是什么?不是标准命令? |
|
|
10楼#
发布于:2004-09-22 22:40
to metalwing
select config我也不知道是什么,是主机发送的,不是标准命令,也不知道需不需要返回值 完成枚举,等待host事件,是主机自动发送还是要写应用程序发送host事件 |
|
11楼#
发布于:2004-09-23 08:43
to hongjuanguodong:
"等待host事件,是主机自动发送还是要写应用程序发送host事件", HOST事件在枚举过程中,是HOST自动(实际上是由USBD)发.之后,是你 的驱动或应用程序发. |
|
|
12楼#
发布于:2004-09-23 10:55
to hongjuanguodong:
你的邮箱我发不进去,我的理解是:索引4中断是只有主机向设备发送数据时才会进入的,不运行程序,应该是进不去的。 |
|
13楼#
发布于:2004-09-23 12:45
to metalwing,lhaih
"HOST事件在枚举过程中,是HOST自动(实际上是由USBD)发.之后,是你 的驱动或应用程序发." 是不是周立功提供的D12TEST.SYS不支持Mass Storage设备,上位机驱动还要自己写:( 我的QQ:59996522 |
|
14楼#
发布于:2004-09-24 08:51
索引4中断是只有主机向设备发送数据时才会进入的,不运行程序,应该是进不去的。
不理解你什么意思.索引4中断是什么中断?反正就是IN中断产生在主 机(HOST)取走数据后,OUT中断产生在设备收到数据后. |
|
|
15楼#
发布于:2004-09-24 11:50
插入U盘后枚举完成会自动执行SCSI命令,主机应该可以自动发inquiry命令,但现在没有发送这个命令,上位机的驱动是没有问题的,枚举我也不知道有什么问题,设备驱动已经加载上了
|
|
16楼#
发布于:2004-09-24 14:11
主机应该可以自动发inquiry命令.
不是吧,应该是你的HOST固件或驱动(USBD)在检测到设备后,根据返回 的描述符知道是U盘,然后由他们发的吧.我对这些不清楚,也不知对不 对. |
|
|