liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2324回复:6

关于Mass Storage设备类的Bulk_Only的开发的问题。请赐教!

楼主#
更多 发布于:2001-11-28 22:39
请教各位大虾,我现在要开发USB海量存储设备类的驱动,具体是采用掌上电脑(PDA)的FLASH作“电子硬盘”的功能,掌上电脑和PC之间的通讯和数据传送使用USB的BULK_ONLY方式传送,要求PDA插上PC时,刷新后在PC的资源管理器中能多出一个额外的硬盘出来(即PDA上的FLASH),并可对之进行等同于普通硬盘一样的文件操作。这需要在PDA端和主机端都要进行编程,现在先解决设备端的问题。我看了USB1.1的协议和我采用的芯片PDIUSBD12的资料,对标准设备请求的命令基本已经掌握,但是对该海量存储设备类的两个特定请求:
1、Bulk_Only Mass Storage Reset
2、Get Max Lun
由于没有现成的例程,不知道这两个设备请求的代码是如何编写的。
请问各位大虾和斑竹能否提供帮助?请不吝赐教!
除了以上两个问题,如果有大虾开发过类似的海量设备类的程序,希望共同探讨,我的邮箱:handsome_zcl@263.net。附件是我写的该类设备端的驱动的协议部分。请大虾们指正并完善。
菜菜
wst100
驱动牛犊
驱动牛犊
  • 注册日期2001-06-23
  • 最后登录2010-11-02
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-11-29 08:47
有附件吗?我怎么看不到?附件怎么看?
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-11-29 09:23
哦,发帖时我是把它附上了,我也不知道怎么看。算了,直接把一部分主要的贴在下面行了。麻烦帮我看看怎么写:
/*------------------------------------------------------*/
/*
   //*************************************************************************
   //  bulk-only 海量存储协议部分(设备端的驱动部分)
   //*************************************************************************
*/

#include <stdio.h>
#include <string.h>
#include <dos.h>

#include \"BasicTyp.h\"
#include \"common.h\"

#include \"usb100.h\"

#include \"chap_9.h\"

#include \"Hal4Sys.h\"
#include \"Hal4D13.h\"

#include \"DEBUG.H\"
#include \"ISO.H\"
/*
//*************************************************************************
// Public Data
//*************************************************************************
*/
extern D13FLAGS bD13flags;
extern CONTROL_XFER ControlData;
extern unsigned char flag4test;
extern IO_REQUEST idata ioRequest;
//------------------------------------------------------

/*
   //*************************************************************************
   // USB Device Descriptor
   //*************************************************************************
*/

#define MASS_NUM_ENDPOINTS 3 //CONTROL ENDPOINT + BULK-IN + BULK-OUT
#define MASS_NUM_INTERFACE 1  //BULK-ONLY DATA INTERFACE
#define MASS_NUM_ALTINTERFACE 1  //该接口只支持一个Alternate Setting

#define MASS_CONFIG_DESCRIPTOR_LENGTH    sizeof(USB_CONFIGURATION_DESCRIPTOR) \\
+ MASS_NUM_ALTINTERFACE * sizeof(USB_INTERFACE_DESCRIPTOR) \\
+ (MASS_NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))


USB_DEVICE_DESCRIPTOR MassDeviceDescr =
{
sizeof(USB_DEVICE_DESCRIPTOR), // 0x12
USB_DEVICE_DESCRIPTOR_TYPE,    // 0x01
0x110, //usb spec1.1 USB协议版本号 1.10
0,      // bDeviceClass 在接口描述符中指定
0,      // bDeviceSubClass 在接口描述符中指定
0,      // bDeviceProtocol 在接口描述符中指定
EP0_PACKET_SIZE,  // 64
0x0471,  //指定的销售商标识
0x0100, // 0x0100  产品ID
0x0100,  //设备的版本号为1.00
0,//STR_INDEX_MANUFACTURER,
0,//STR_INDEX_PRODUCT,
0,//STR_INDEX_SERIALNUMBER,
1   //设备所拥有的配置的数目
};

USB_CONFIGURATION_DESCRIPTOR MassConfigDescr =
{
sizeof(USB_CONFIGURATION_DESCRIPTOR),  // 0x9
USB_CONFIGURATION_DESCRIPTOR_TYPE,     // 0x2
MASS_CONFIG_DESCRIPTOR_LENGTH,   // 该配置所包含的配置、接口、终点、类及Vendor描述符总长度    
1, //该配置上的接口数为1,
1,  //配置值――SetConfiguration()的参数
0,  //STR_INDEX_CONFIGURATION,
0xC0,//no remote wakeup ,self-powered
0x1   //最大工作电流2mA
};

USB_INTERFACE_DESCRIPTOR MassInterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR),    // 0x9
USB_INTERFACE_DESCRIPTOR_TYPE,       // 0x4
0,           //接口序号
0,           // 接口所支持的bAlternateSetting
MASS_NUM_ENDPOINTS, // 0x2  终点数目,不包括ENDPOINT0
USB_CLASS_CODE_MASS,  //  0x08
USB_SUBCLASS_CODE_RBC, // 0x01
USB_PROTOCOL_CODE_BULKONLY,  // 0x50
0,  //STR_INDEX_INTERFACE
};

USB_ENDPOINT_DESCRIPTOR MassEP_Descr[2] =
{
//EP0D BULK OUT
{
sizeof(USB_ENDPOINT_DESCRIPTOR),  // 0x 07
USB_ENDPOINT_DESCRIPTOR_TYPE,     // 0x 05
0x01,  // bEndpointAddress = 0x0? ,后四位表示The endpoint number
USB_ENDPOINT_TYPE_BULK,  // bmAttributes = 0x2 ,表示这是一个批终点
NONISO_FIFOSIZE_64,      // wMaxPacketSize = 64
0       //不用于批终点
},
//EP0E BULK IN
{
sizeof(USB_ENDPOINT_DESCRIPTOR),   // 0x 07
USB_ENDPOINT_DESCRIPTOR_TYPE,      // 0x 05
0x82,         // bEndpointAddress = 0x8? ,后四位表示The endpoint number
USB_ENDPOINT_TYPE_BULK,
NONISO_FIFOSIZE_64,
0
}

};

/*
   //*************************************************************************
   // 海量存储设备类BULK-ONLY类型传输的协议层 特定类的设备请求
   //*************************************************************************
*/


void MASS_BulkOnlyReset()
{

}

void MASS_GetMaxLUN()
{

}
菜菜
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-11-29 15:20
Philips的D12有这种应用的sample
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-11-29 15:55
如果能有海量存储设备类的BULK_ONLY传输的现成的例子那就太好了,请问斑竹能否将该例子发给我?谢谢了!
菜菜
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-11-29 16:00
我只有PHILP公司提供的标准设备请求的例子程序,是设备端的。没有海量存储的例程,如果斑竹有的话,麻烦发给我参考,谢谢!
菜菜
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-11-30 13:03
为什么不去philips的网站上找?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部