阅读:1704回复:3
请教:SL811与U盘读写
我用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中操作,但是似乎总有问题。 |
|
沙发#
发布于:2003-05-26 04:08
我也在做sl811的一个项目,有空交流交流.email:junhli@msn.com or yyzhishui@elong.com
|
|
板凳#
发布于:2003-06-02 14:49
楼上的2为兄弟,我叶子做类似的项目,不知如何出手,特别是usb device的驱动的编写,对于U盘,如何能够得到她的一些设备信息?
帮帮忙! |
|
地板#
发布于: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)){//判断数据是否发送完成 } } |
|