阅读:1732回复:13
help 我有关PID……
USB的PID是硬件自动产生的么?
还是要自己来写? 在接受端也是自动识别还是自己写代码判断的呢? PID不用写到BD里面吧? |
|
|
沙发#
发布于:2002-05-15 16:45
想补充问一下
帧是由硬件产生的吧? ???? :( :( |
|
|
板凳#
发布于:2002-05-15 16:53
1、VID和PID都可由下位机的硬件或固件产生。由固件产生的话可以通过修改FireWare修改。
2、由USBHUB判断,客户驱动程序可不管。 3、BD是什么? |
|
|
地板#
发布于:2002-05-15 17:36
感谢大哥给我的帮助,
我所说的bd是buffer description 是缓冲区描述 我的意思是如果pid是由硬件产生的,那么在接受端就会把它丢弃掉是吗? 大哥你顺便回答我的第二个问题嘛! 就是帧的那个啦! 虽然我得分很少,但是我不会小气地! ^^ |
|
|
地下室#
发布于:2002-05-16 08:46
VID和PID的主要作用是USBHUB辨别设备,并根据其来选择驱动程序。之后即无多大用处,不过客户驱动程序一般会保留设备的设备描述符,自然就保存了VID和PID。
你说的帧是指ISO传输中的帧吗?应该是由设备的USB控制器产生的。客户驱动程序可控制帧包大小和帧速。 |
|
|
5楼#
发布于:2002-05-16 09:13
谢谢谢谢~~
你所说的“不过客户驱动程序一般会保留设备的设备描述符,自然就保存了VID和PID。 ” 那么保存的vid和pid放在什么地方呢?难道也是放在缓冲区里面吗? 那么如何识别缓冲区里的id和数据呢? 我还以为缓冲区里存放的全都是有用的数据呢。 |
|
|
6楼#
发布于:2002-05-16 15:34
没人管了?
顶一下! |
|
|
7楼#
发布于:2002-05-16 16:12
一般放在设备扩展中。
|
|
|
8楼#
发布于:2002-05-17 08:45
那么我所说的缓冲区里都是有用的数据是不是正确的呢?
就是从缓冲区里读取的数据就可以直接使用了, 不需要在进行判断是pid还是data了? ??? |
|
|
9楼#
发布于:2002-05-17 17:12
又看不到了,在顶一下!
|
|
|
10楼#
发布于:2002-05-24 16:33
usb的pid和vid是写在device端的driver里的,just like:
unsigned char DEV_DESC[] = { 0x12, /*length of this desc. */ 0x01, /*DEVICE descriptor */ 0x00,0x01, /*spec rev level(BCD)(0x100) */ 0x00, /*device class */ 0x00, /*device subclass */ 0x00, /*device protocol */ 0x08, /*max packet size */ 0x51,0x04, /*National\'s vendor ID */ 0xC3,0x81, /*National\'s product ID */ 0x00,0x01, /*National\'s revision ID */ 0x01, /*index of manuf. string */ 0x02, /*index of prod. string */ 0, /*index of ser. # string */ 0x01 /*number of configs. */ }; 由host读取 如开发host端driver就不需自己写 如开发device端driver就需自己写 |
|
11楼#
发布于:2002-05-24 17:57
老兄,你老顶什么呀,真有意思,呵呵。
我这样理解楼上老哥的意思:heshen兄说的那些东西是作为固件程序的一部分写进mcu里的,是作为一个数组存在的,上位机有要求时,程序就把它发出去,对不对?斑竹老大说的‘客户驱动程序一般会保留设备的设备描述符’,是什么意思呢? |
|
|
12楼#
发布于:2002-05-25 15:04
fireware 是什么?设备描述符是以帧的形式发送给主机,而后主机自动识别其就是设备描述符吗?固件驱程如何编写?
|
|
13楼#
发布于:2002-05-25 15:42
(1)、PID、VID都是在USB设备的firmware中(firmware就是固件,是USB芯片的程序,作USB的不应该不知道这个东东啊),主要是使系统识别设备并加载相应的驱动程序,这体现在INF文件中,你可以同时更改INF文件和firmware中的PID、VID,这不会产生不良影响。
(2)、设备的列举是有主机通过Endpoint0发送请求,然后由设备响应来完成的,这体现在firmware的setupcommand子程序中。 (3)、设备列举完成后,主要执行设备的功能部分;但是,如果主机有Get_endpoint、Get_string、Get_pipe等请求,设备还是在setupcommand中相应。 (4)、在firmware的主循环中,有两个主要的部分,第一就是判断主机是否有Get_endpoint、Get_string、Get_pipe等请求,第二就是功能部分。 |
|
|