hwfdriver
驱动牛犊
驱动牛犊
  • 注册日期2003-05-01
  • 最后登录2004-05-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1705回复:3

请教:SL811与U盘读写

楼主#
更多 发布于:2003-05-24 12:42
   我用SL811在嵌入式系统中做HOST CONTROLER,对U盘可以读写,但是总出现ENDPOINT STALL,按MASS STORAGE协议可以处理一些,但是有时是无法恢复,(U盘灯灭,U盘好象在配置状态且SOF发送正常时灯亮,朗科64M双启动型),而且是常出现这样情况。
   请教各位大侠:1.U盘读写常出的错及如何恢复(除了进行RESET DEVICE),或有哪个网站有资料。2.关于TOGGLE我按照USB MASS STORAGE BULK ONLY TRANSPORT,及USB SPECIFICATION中操作,但是似乎总有问题。
junhli
驱动牛犊
驱动牛犊
  • 注册日期2003-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-26 04:08
我也在做sl811的一个项目,有空交流交流.email:junhli@msn.com  or yyzhishui@elong.com
andy
驱动牛犊
驱动牛犊
  • 注册日期2001-05-11
  • 最后登录2003-07-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-02 14:49
楼上的2为兄弟,我叶子做类似的项目,不知如何出手,特别是usb device的驱动的编写,对于U盘,如何能够得到她的一些设备信息?
帮帮忙!
czc_1234567890
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2004-09-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-09 16:41
各位大哥们,我现在也在做用SL811读数码相机,但一直不是很顺利,我现在还在枚举,还没有通过,程序如下,我C语言是刚学的,写的不好之处,还请各位大侠指点一二,小弟先谢谢各位大侠了,

void enumerate_811(void){ //USB枚举函数
uchar data_len,*pa,a;
pa = &rdsbmsf[0]; //

wrdata(CtrlReg,0x08); //USB总线复位
yanshi_ms(10); //延时10MS
wrdata(CtrlReg,0x00); //USB总线清除复位
while(verdictSlave()){ //verdictSlave()返回0说明有设备动作(插上或拔下)
}
TXD_DATA = '2'; //调试用(向串行口发数据,来指示程序运行情况)
yanshi_ms(1);//延时1毫秒(为了让串行数据足够的时间发送)
clr_intstatus(); //清除中断寄存器
txd_SETUP(0x00,0x00,0x08,0x10); //发送SETUP包(获得设备描述符)txd_SETUP 的参数说明,第一个:设备地址,第二个,端点号,第三个,DATA0或DATA1的数据长度,第四个,数据在SL811缓冲区的基地址
TXD_DATA = '3';
clr_intstatus(); //清除中断寄存器
yanshi_ms(1); //延时1000毫秒
data_len = 8;
wr_ndata(0x10,data_len,pa); //把获取设备描述符的命令放入SL811的0x10数据缓冲区
txd_DATA0_1(0x10,data_len,0); //发送DATA0包
while(verdictUSBA_B(0)){ //verdictUSBA_B(0)返回0说明DATA0_1包发送完成
}
TXD_DATA = '4';
Chinese_sign = 1;
yanshi_ms(1); //延时1毫秒
clr_intstatus(); //清除中断寄存器
while (!a){//verdictACK()返回1说明主机收到ACK
yhsxdata[a] = rdsbmsf[a];
}
TXD_DATA = '5';
}







void txd_SETUP(uchar addr,uchar ENDP,uchar data_Len,uchar data_redixaddr){ //发送 SETUP 包
wrdata(EP0Status,(PID_SETUP + ENDP));//下次发送SETUP包,并且端点为ENDP//PID_SETUP = 0xD0,ENDP = 0;
wrdata(EP0Counter,addr);//设备的地址
wrdata(EP0XferLen,data_Len);//数据的长度
wrdata(EP0Address,data_redixaddr);//数据的基地址
wrdata(EP0Control,0x03);//发送数据
while(verdictUSBA_B(0)){//判断数据是否发送完成
}
}
游客

返回顶部