wlfworld
驱动牛犊
驱动牛犊
  • 注册日期2004-03-01
  • 最后登录2005-07-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1712回复:5

请教write_10(写U盘)问题,急!

楼主#
更多 发布于:2004-07-17 10:50
我在用sl811读写u盘,读已经做好了,写的时候,遇到如下问题,请各位大虾为小弟把脉诊断一下。
写flash的时候应该要求一次写一个扇区(512个字节),如果我连续发送512个字节的话,收到的状态是01。我想这是USB_mass_storage_bo规定每传输6(frank的报告中说是7次)次数据要返回一次CSW的原因吧。但我改成如下程序后,发送384字节后不能收到CSW(发送448个也一样),请各位大虾帮忙看看,指点指点小弟。万分感谢!


char write_10(INT32 lba,INT8 len,INT8 *pBuffer)
{
   char i;
   for(i=1;i<16;i++)
Bulk_CBW.bCBW_CB=0;
INT16 write_lba;
Bulk_CBW.dCBW_Signature=CBW_SIGNATURE;
Bulk_CBW.dCBW_Tag=0x68ac68ac;
Bulk_CBW.dCBW_DataXferLen=512; Bulk_CBW.bCBW_Flag=0x0;
Bulk_CBW.bCBW_LUN=0;
Bulk_CBW.bCBW_CDBLen=10;
/////////////////////////////////////
Bulk_CBW.bCBW_CB[0]=0x2a;
write_lba=lba;
for(i=5;i>1;i--)            //小端系统
{
Bulk_CBW.bCBW_CB=(INT8)(write_lba&0xff);
rite_lba=write_lba>>8;
}                          //小端系统
Bulk_CBW.bCBW_CB[8]=len;
//////////////////////////////////////
if(!epBulkSend((INT8 *)&Bulk_CBW,0x1f))
   return FALSE;
if(!epBulkSend(pBuffer,384)) //64*6
return FALSE;
if(!epBulkRcv((INT8 *)&TPBulk_CSW,13))
return FALSE;
if(!epBulkSend(pBuffer,128))
return FALSE;
//DelayMs(10);
if(!epBulkRcv((INT8 *)&TPBulk_CSW,13))
   return FALSE;
/////////////////////////////
return TRUE;
}
wlfworld
驱动牛犊
驱动牛犊
  • 注册日期2004-03-01
  • 最后登录2005-07-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-18 10:12
char write_10(INT32 lba,INT8 len,INT8 *pBuffer)
{
char i;
for(i=1;i<16;i++)
Bulk_CBW.bCBW_CB=0;
INT16 write_lba;
Bulk_CBW.dCBW_Signature=CBW_SIGNATURE;
Bulk_CBW.dCBW_Tag=0x68ac68ac;
Bulk_CBW.dCBW_DataXferLen=512; Bulk_CBW.bCBW_Flag=0x0;
Bulk_CBW.bCBW_LUN=0;
Bulk_CBW.bCBW_CDBLen=10;
/////////////////////////////////////
Bulk_CBW.bCBW_CB[0]=0x2a;
write_lba=lba;
for(i=5;i>1;i--) //小端系统
{
Bulk_CBW.bCBW_CB=(INT8)(write_lba&0xff);
rite_lba=write_lba>>8;
} //小端系统
Bulk_CBW.bCBW_CB[8]=len;
//////////////////////////////////////
if(!epBulkSend((INT8 *)&Bulk_CBW,0x1f))
return FALSE;
if(!epBulkSend(pBuffer,384)) //64*6
return FALSE;
if(!epBulkRcv((INT8 *)&TPBulk_CSW,13))
return FALSE;
if(!epBulkSend(pBuffer,128))
return FALSE;
//DelayMs(10);
if(!epBulkRcv((INT8 *)&TPBulk_CSW,13))
return FALSE;
/////////////////////////////
return TRUE;
}
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-01 13:05
问题解决了吗?
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-01 13:14
我的和你差不多,我是用51+CH371读写U盘,目前我还什么都不知道,请问你是在深圳吗?如果是的话我想请教一些问题,或者电话方便吗?我愿意付报酬,因为这个是我参加工作以来第一个任务,我不想做砸。但是同样因为是第一次工作,我给的报酬不会很高,(800元左右)。本人女子,相信不会对人有伤害力。
新手上路,各位大侠莫不理睬
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-01 13:16
我的QQ是170153870,有可以帮忙的人请和我联系
新手上路,各位大侠莫不理睬
gblue
驱动牛犊
驱动牛犊
  • 注册日期2003-08-20
  • 最后登录2004-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-03 15:20
>>我想这是USB_mass_storage_bo规定每传输6(frank的报告中说是7次)次数据要返回一次CSW的原因吧。
请问哪一行有写?
游客

返回顶部