打印

68013A 例程问题

[复制链接]
10822|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
宋倩2010|  楼主 | 2011-5-18 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人使用Cy7c68013A进行开发,其它例程都已经完成,控制传输找资料已经完成.
只是剩下       DriverObject-> MajorFunction[IRP_MJ_WRITE]   =   Ezusb_Write;       //写入数据 这个个例程没有完成,不知如何下手了
沙发
宋倩2010|  楼主 | 2011-5-18 23:19 | 只看该作者
还有这个
DriverObject-> MajorFunction[IRP_MJ_READ]   =   Ezusb_Read;           //读取数据

使用特权

评论回复
板凳
chenho| | 2011-5-18 23:37 | 只看该作者
FsContext这个具体内容不太清楚,最有可能这个东西没有搞好。

使用特权

评论回复
地板
huwr| | 2011-5-19 00:26 | 只看该作者
先确认68013A的firmware好了没有?

使用特权

评论回复
5
hulan1985| | 2011-5-19 20:57 | 只看该作者
CY不是有自己的驱动吗,楼主为什么还要重写啊?

使用特权

评论回复
6
huanghuac| | 2011-5-20 21:50 | 只看该作者
cypress没有提供driver sample code么?好像《usb原理与工程开发》有提供实例。

使用特权

评论回复
7
happy_10| | 2011-5-20 22:00 | 只看该作者
这个是没有提供实例的,没实现IRP_MJ_READ的例程的,他们都是使用IRP_MJ_DEVICE_CONTROL这个例程来传输数据的

使用特权

评论回复
8
宋倩2010|  楼主 | 2011-5-20 22:04 | 只看该作者
那最终是firmware的问题,还是driver的问题?

使用特权

评论回复
9
宋倩2010|  楼主 | 2011-5-20 22:09 | 只看该作者
如果是driver的问题,if(fileObject && fileObject- >FsContext) 判断为false的原因是什么?
想知道下...

使用特权

评论回复
10
happy_10| | 2011-5-20 22:16 | 只看该作者
if(fileObject && fileObject- >FsContext)

这个文件对象是需要创建的,在驱动加载时,这个不好控制, 我没有采用此方法,这种方法是DDK的例子的方法.

使用特权

评论回复
11
冰清玉洁| | 2011-5-20 22:21 | 只看该作者
是因为你fileObject- >FsContext为null,fileObject- >FsContext可以记录任意信息,但从这里可以看出是记录PUSBD_PIPE_INFORMATION pipeInformation信息的。
Ezusb驱动我没用过,但大体应该和ddk中的例子bulkusb差不多,fileObject- >FsContext应该在IRP_CREATE中就被赋值了,但你的程序没有成功赋值。
下面摘抄一段bulkusb中的代码
C/C++ code
NTSTATUS
BulkUsb_DispatchCreate(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
{
。。。。
    for(i=0; i<interface->NumberOfPipes; i++) {

        if(pipeContext == &deviceExtension->PipeContext[i]) {

            //
            // found a match
            //
            BulkUsb_DbgPrint(3, ("open pipe %d\n", i));

            fileObject->FsContext = &interface->Pipes[i];
            
            ASSERT(fileObject->FsContext);

            pipeContext->PipeOpen = TRUE;

            ntStatus = STATUS_SUCCESS;

            //
            // increment OpenHandleCounts
            //
            InterlockedIncrement(&deviceExtension->OpenHandleCount);

            //
            // the device is idle if it has no open handles or pending PnP Irps
            // since we just received an open handle request, cancel idle req.
            //
            if(deviceExtension->SSEnable) {

                CancelSelectSuspend(deviceExtension);
            }
        }
    }

使用特权

评论回复
12
宋倩2010|  楼主 | 2011-5-20 22:27 | 只看该作者
哦,我再思考思考

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

322

主题

3217

帖子

2

粉丝