zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2079回复:23

请问D12问题,实在是不懂了。

楼主#
更多 发布于:2003-12-16 23:22
我的d12用的非同步方式,a0接的是cpu的addr0,枚举,发送接受都是好的,但是速度太慢了,才10k左右,感觉太不可能了,我的驱动用的是周立功的驱动,2000的机子,我发现我的板子不管什么时候,在收中断的时候老实要发生一个0x0的中断(就是什么中断都没有发生),但是d12的int管脚就是有中断,这个0x0的中断不影响这个板子的枚举,发送接受等,就是速度太慢了,会不会是这个的影响啊?
我的ALE是接gnd的,dma管脚dmaack下拉,dmareq悬空
有发生这样的情况吗?

[编辑 -  12/17/03 by  zkking]
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-19 16:25
我现在最快只到过30kbytes而已,不用中断,每次发2次的64bytes,然后开始查询是否发送成功,如此反复100次,busbound测到过30kbytes,但是以后就出不来了?难道必须换驱动吗?

我不是做U盘,是做下位机的数据上传,所以驱动肯定是必须的,好像做U盘的都不用驱动吧
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-19 10:19
2000下不需要驱动吗?周立功还给了一个2000/xp的驱动啊!
大侠帮我看看,我的发送程序几乎就是在直接对内存操作了,没有另外的函数调用,中断也不用了,但是速度还是没有改善啊:
void USB_WriteEndpoint(unsigned char * buf, unsigned char len)

{
unsigned char i;


        USB_DISABLE_INTERRUPT;

*(unsigned char *)0x04000001 = 5; // 选择端点
 i= *(unsigned char *)0x04000000;
// 端点状态
*(unsigned char *)0x04000001 = 0xf0;

// 写缓冲区命令
*(unsigned char *)0x04000000=0;
// 向缓冲区填充数据
*(unsigned char *)0x04000000=len;
for(i=0; i<len; i++)    
          *(unsigned char *)0x04000000=*(buf+i);
// 使缓冲区有效
*(unsigned char *)0x04000001=0xfa;
}

我就是反复的调这个函数(发了三次),每次都发64bytes,中间没有任何判断,pc居然可以全部收到(用busbound观测),下位机的速度应该还行吧,处理能力到了65Mhz,60mips,不亚于低端的dsp啊
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-19 08:55
速度主要还是设备的问题,PC如果是2000、XP是不需要装驱动,98\\me下就下一个吧,我原来有一个,不过不记得放那里了,不过到处都有。
cazz_girl
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-10-17
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-19 08:25
我也觉得是驱动的问题。
我把程序改了改。
单片机断,我用定时器写数据,就是不管计算机有没有读数据,单片机一直写。
计算机断,不发deviceiocontrol命令,只是不停的readfile,
在单片机中断子程序中加个测试点,用逻辑分析仪一看。
乖乖,计算机竟然要两个多毫秒才去读一次,而单片机已经写了几次了。
搞不懂了,计算机扫描一次没有数据,要等那么长时间才再扫描吗??
大虾们,帮帮忙吧~~~
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-18 20:46
这位狮子大侠啊,非常感谢您的耐心帮助,我现在怎么试速度都只有15kbytes左右,怀疑是不是上位机的驱动的问题,看了不少帖子,好像都说速度不高,因为周立功的驱动试vendor request 模式,请问能不能下到bulk模式的设备驱动啊,谢谢了

[编辑 -  12/18/03 by  zkking]
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-18 16:10
描述符要改,在加Bulk only协议的处理
cazz_girl
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-10-17
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-18 15:59
驱动用通用的MASS STORAGE驱动,固件要不要做什么更改啊???
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-18 13:51
我就是用D12做U盘,这里好多人都是。驱动用通用的MASS STORAGE驱动。
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-18 13:47
有用d12做u盘的吗?好像没有吧,速度上不去,我想换个驱动试试,但是现在只有周立功给的那个了
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-18 08:42
zlg那个测速程序使用厂商请求、端点0做的,确实不够快。主要还是看你的usb设备用那种传输方式,Bulk和同步的方式会快点。我以前做的700Kbyte是用通用U盘驱动的。如果光是mcu速度快,而使用vendor request是很难提升速度的。
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-17 19:19
上位机的缓冲一般设称多少啊?

听某位大侠说,周立功提供的2000驱动不可能使d12很快,因为他是vendor request模式,我也不太清楚,请问d12上200kbytes的驱动是用的周立功的吗?
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-17 13:59
一般上位机buffer也有关系,少发几次操作命令会快点
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-12-17 13:15
我的处理器绝对速度够快的,是arm7的处理器,三级流水线,可以到60个mips,绝对比51单片机要快好多吧。

下位机我的fifo缓冲设的64bytes,上位机也是设的64bytes,有什么问题吗?
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-12-17 11:47
关于速度的问题,看看吧

http://www.driverdevelop.com/forum/viewthread.php?fid=9&tid=44150&page=1&totalpost=37
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-12-17 11:42
200kbit吧,我看以前用51做过的都是几十Kbyte。还用C写肯定慢,你的MCU机器周期是1/64M吗?我看除了avr,其他的都要分频阿
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-12-17 11:36
那么为什么速度就是上不去了?我要被搞昏了,几位大侠指点一下好吗?我看了,很多人都是用10M的单片机做的,也是用c写的fifo的读写,速度一般可以到200k,我是mcu是64mhz的工作频率,3级的流水线,处理器可以到60个MIPS啊,速度绝对不会慢的,应用c写,却没有10m的单片机速度快,怎么回事了?
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-12-17 11:10
USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02
就是配置BULK了,使用endp2
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-12-17 11:03
这样描述可以吗?

//设备描述符
const USB_DEVICE_DESCRIPTOR DeviceDescr =
{
sizeof(USB_DEVICE_DESCRIPTOR), // 设备描述符长度, =0x12
USB_DEVICE_DESCRIPTOR_TYPE, // 设备描述符类型, =0x01
0x0110, // 协议版本, =1.10
USB_CLASS_CODE_TEST_CLASS_DEVICE, // 设备类型
0, // 设备子类
0, // 设备协议
EP0_PACKET_SIZE, // 端点0最大数据包大小, =0x10
0x0471, // PHILIPS公司的设备ID
0x0888, // 设备制造商定的产品ID
0x0100, // 设备系列号
0, // iManufacturer
0, // iProduct
0, // iSerialNumber
1 // 可能配置数
};

//配置描述符
const USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
sizeof(USB_CONFIGURATION_DESCRIPTOR), // 配置描述符的长度, =0x09
USB_CONFIGURATION_DESCRIPTOR_TYPE, // 配置描述符的类型, =0x02
CONFIG_DESCRIPTOR_LENGTH, // 描述符总长度 =0x2e
1, // 只支持1个接口
1, // 配置值
0, // 字符串描述符指针(无)
0x60, // 自供电
0x32 // 最大功耗(100mA)
};

//接口描述符
const USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR), // 接口描述符长度, =0x09
USB_INTERFACE_DESCRIPTOR_TYPE, // 接口描述符类型, =0x04
0, // 接口数,只有1个
0, // 可选配置,只有1个
NUM_ENDPOINTS, // 除端点0的端点索引数目 =0x04
USB_CLASS_CODE_TEST_CLASS_DEVICE, // 设备类型
USB_SUBCLASS_CODE_TEST_CLASS_D12, // 子类代码
USB_PROTOCOL_CODE_TEST_CLASS_D12, // 协议代码
0 // 字符串描述符指针(无)
};

//端点1发送描述符
const USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x81, // 端点1IN
USB_ENDPOINT_TYPE_BULK, // 中断传输, =0x03
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10
10 // 传输间隔时间, =10ms
};

//端点1接收描述符
const USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05    
0x01, // 端点1OUT                      
USB_ENDPOINT_TYPE_BULK, // 中断传输, =0x03    
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10    
10 // 传输间隔时间, =10ms    
};

//端点2发送描述符
const USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05    
0x82,                         // 端点2IN                      
USB_ENDPOINT_TYPE_BULK,         // 批量传输, =0x02    
EP2_PACKET_SIZE,   // 端点最大包的大小, =0x40    
10 // 批量传输时该设置无效
};

//端点2接收描述符
const USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05    
0x02, // 端点2OUT                      
USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02    
EP2_PACKET_SIZE, // 端点最大包的大小, =0x40    
10 // 批量传输时该设置无效  
};
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-12-17 10:31
楼上这位大侠,我的mcu不是51,其实他的晶振是10mhz的,然后内部pll倍频到64Mhz的。

端口描述为bulk?我还是个菜鸟,在d12的pdf中(周立功的那个中文的)就没有说道这个啊,需要如何描述了?实在不好意思,我真的不知道,在寄存器中写入吗?还是在枚举的时候通知host的?

[编辑 -  12/17/03 by  zkking]
上一页
游客

返回顶部