3988|12

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

无法调用 FMD_OEMIoControl [复制链接]

想用 应用区调用 FMD_OEMIoControl 对nand 进行操作, 遇到下面问题:

首先: nand 已经可以正常使用

在应用中 通过hFlash = CreateFile(L"DSK1", ...) 得到 HANDLE 可以成功;
接着调用 DeviceIoControl(); 不成功得到的 error: 是 87 也就是参数不对,
如下:

FlashInfo  flashInfo;

DeviceIoControl(        hFlash, GET_DISK_INFO ,NULL, 0,(LPVOID)&flashInfo,sizeof( FlashInfo ),NULL, NULL)


其中 GET_DISK_INFO 在 FMD_OEMIoControl中 的case 做了处理;

有遇到类似情况的吗?

最新回复

我上次也遇到这个问题,打开方式不对 这是我的问题帖子,可供参考 [url=http://topic.eeworld.net/u/20091011/22/9bf86d5b-7904-4964-ab2a-28866092a085.html][/url]  详情 回复 发表于 2009-12-14 23:42
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你要确定一点:
nand的device name是不是L"DSK1",?
可以查active键值或者api遍历来确定
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢楼上的回答, 注册表设置的时候 是DSK1, 而且 usb 在识别 nand(DSK1) 与 sd(DSK4) 的时候 设置的是  : DSK1, nand 在pc上能够识别;  我可以很肯定的说 nand 的 device name 确实是 DSK1
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
顶上
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
原因不明,我这样做都行啊,是否一些细节参数问题?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
怎么还不行呀??解决了吗??
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果flash的驱动就是  DSK1的话  那就是FMD_OEMIoControl 的问题了
不要 传参数呐
先进入case 中打印些 信息 看是不是进入到FMD_OEMIoControl 里面了
  要是进入了  估计就是你的 地址没转换
给下 我的部分代码
BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{

#if 1
        volatile LPBYTE pReadBuffer;
        volatile LPBYTE pWriteBuffer;
        pflReadWriteInput pBufMsg_Input = (pflReadWriteInput)pInBuf;
        pflReadWriteOutput pbufMsg_Output = (pflReadWriteOutput)pOutBuf;

    switch(dwIoControlCode)
        {
                case IOCTL_FMD_READ:
                        pReadBuffer = (LPBYTE)MapPtrToProcess(pbufMsg_Output->pSectorBuff,GetOwnerProcess());
                        Sleep(1);
                        return FMD_ReadSector(pBufMsg_Input->startSectorAddr, pReadBuffer, pbufMsg_Output->pSectorInfoBuff, pBufMsg_Input->dwNumSectors);
               
                case IOCTL_FMD_ERASE:
                        return FMD_EraseBlock(pBufMsg_Input->blockID);
               
                case IOCTL_FMD_WRITE:
                        pWriteBuffer = (LPBYTE)MapPtrToProcess(pBufMsg_Input->pSectorBuff,GetOwnerProcess());
                        Sleep(1);
                        return FMD_WriteSector(pBufMsg_Input->startSectorAddr, pWriteBuffer, pBufMsg_Input->pSectorInfoBuff, pBufMsg_Input->dwNumSectors);
               
                case IOCTL_FMD_GET_STATUS:
                        if(FMD_GetBlockStatus(pBufMsg_Input->blockID) != BLOCK_STATUS_BAD)
                                return FALSE;
               
                case IOCTL_FMD_SET_STATUS:
                        return FMD_SetBlockStatus(pBufMsg_Input->blockID, BLOCK_STATUS_BAD);
               
                default:
                        DEBUGMSG(1, (L"FMD_OEMIoControl: unrecognized IOCTL (0x%x)\r\n",dwIoControlCode));
                        return FALSE;
        }
#endif

    return(TRUE);
}
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 2 楼 wuzukui 的回复:
谢谢楼上的回答, 注册表设置的时候 是DSK1, 而且 usb 在识别 nand(DSK1) 与 sd(DSK4) 的时候 设置的是? : DSK1, nand 在pc上能够识别;? 我可以很肯定的说 nand 的 device name 确实是 DSK1

给你个必杀技,呵呵
如果你的device name是正确的话,你调用deviceiocontrol()时传递一个系统不存在的control code,如0,看看程序是否能够走到FMD_OEMIoControl,
如果没有走到,device name一定有问题
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 guopeixin 的回复:
引用 2 楼 wuzukui 的回复:
谢谢楼上的回答, 注册表设置的时候 是DSK1, 而且 usb 在识别 nand(DSK1) 与 sd(DSK4) 的时候 设置的是? : DSK1, nand 在pc上能够识别;? 我可以很肯定的说 nand 的 device name 确实是 DSK1

给你个必杀技,呵呵
如果你的device name是正确的话,你调用deviceiocontrol()时传递一个系统不存在的control code,如0,看看程序是否能够走到FMD_OEMIoControl,
如果没有走到,device name一定有问题


呵呵 , 必杀, 我试试
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
查看winerr.h文件,得到
//
// MessageId: ERROR_INVALID_PARAMETER
//
// MessageText:
//
//  The parameter is incorrect.
//
#define ERROR_INVALID_PARAMETER          87L    // dderror
就是说你传递的参数不正确。
请确保参数的正确。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 wuzukui 的回复:
引用 7 楼 guopeixin 的回复:
引用 2 楼 wuzukui 的回复:
谢谢楼上的回答, 注册表设置的时候 是DSK1, 而且 usb 在识别 nand(DSK1) 与 sd(DSK4) 的时候 设置的是? : DSK1, nand 在pc上能够识别;? 我可以很肯定的说 nand 的 device name 确实是 DSK1

给你个必杀技,呵呵
如果你的device name是正确的话,你调用deviceiocontrol()时传递一个系统不存在的control code,如0,看看程序是否能够走到FMD_OEMIoControl,
如果没有走到,device name一定有问题


呵呵 , 必杀, 我试试

包你好使好用,呵呵
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

12
 
顶上, 今天调其他的去了,
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

13
 

我上次也遇到这个问题,打开方式不对

这是我的问题帖子,可供参考

[url=http://topic.eeworld.net/u/20091011/22/9bf86d5b-7904-4964-ab2a-28866092a085.html][/url]
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表