📄 sl811 读写u盘的资料,龙人提供.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0037)http://www.mcu51.com/list.asp?id=1661 -->
<HTML><HEAD><TITLE>读写U盘的资料,龙人提供(a66886527)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="SL811 读写U盘的资料,龙人提供_files/style.css" rel=stylesheet>
<META content="MSHTML 6.00.3790.94" name=GENERATOR></HEAD>
<BODY>
<DIV align=center>
<CENTER></CENTER></DIV>
<DIV align=center>
<CENTER>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width="97%"
borderColorLight=#000000 border=1>
<TBODY>
<TR>
<TD width="100%" bgColor=#d0d0d0>
<P align=center>文章编号:1661----加入日期:2004-12-15 </P></TD></TR>
<TR>
<TD width="100%">
<P align=right><A href="javascript:self.close()">『关闭窗口』</A></P></TD></TR>
<TR>
<TD width="100%">
<P align=center><B>读写U盘的资料,龙人提供(a66886527)</B></P></TD></TR>
<TR>
<TD width="100%">
<BLOCKQUOTE><BR>读写U盘的资料,龙人提供
<BR>读写U盘的资料准备充分和完毕,龙人在此征求大家的意见。我是把资料一下共享出来,还
<BR>是开个版块,从硬件的选材开始,一步步讲解这个项目的过程,同时附上代码。我个人赞成
<BR>后面一种。因为论坛创立的目的就是为了想帮助初为技术的朋友们,不想人迷惑,让学生朋
<BR>友们都能学到精华和好的东西。我曾经也做过弯路,学过周某人的东西,简直是垃圾!学了
<BR>等于没学。龙人就是看不管这些创立论坛。立志为初为技术的朋友,一开始就能站在一个较
<BR>高和实用的角度,不要去走那些花拳绣腿费钱费力的路。既然是学习肯定得要有资料和必要
<BR>的指引,在此龙人每晚辛苦2-3个小时,做出总结和指引帮助所有的人在10-15天全部掌握这
<BR>个东西,更重要的是通个这个学到单片机开发的思想,为以后的路作.......同时也想你们
<BR>在这里认识一帮朋友,学到做人做事的真道理,多点关爱和奉贤精神!不多说了,大家积极
<BR>投票,特别是学生朋友们,踊跃投票!在2天之内做决定,一切征求大家的意见。
<BR><BR><BR><BR><BR>在做这个项目之前,我想提醒大家,硬件不怎么难,关键是软件的问题。所以大家只要努
<BR>力,多用时间调试,最后就一定能够走通。我这里只是向大家指条好路,记住千万不要直接
<BR>COPY,否则学不到什么东西,什么事情,亲自动手后,然后搞定后者提问才是最好的办法。
<BR>另外,我想说明的是,我在这里讲的一般代码,大概最后速度有几十K,龙人最核心的800多
<BR>K的东西,需要一定的板子费才给大家。希望大家能够理解。不罗嗦了,进入正题。首先,
<BR>硬件选用最常见的8为51系列或者16位的也可以。主控芯片当然用sl811hst。然后要有扩展
<BR>内存,32K(62256就可以了)反向器,811的晶体最好用48M有源的,为了调试方便设置几个
<BR>必要的LED,为了在电脑上仿真,接个232口,好了硬件选材基本就是这些。必要工具:开关
<BR>电源:最好选用纹波少点的,否则容易读写出错;示波器;仿真器。我讲讲整个项目开发的
<BR>流程,不熟悉的人可以快去补补相关东西。画原理图(我上面说的器件)做PCB。然后开始
<BR>看USB1.1协议中的主机部分,811数据手册,SCSI协议(BULK),看FAT文件协议(有条件的
<BR>可以看点U盘开发资料)。等于心中有个数后就可以开始投入写代码和调试了。这个软件分
<BR>为3大层次来写,首先是81和CPU的通信遍写,无非就是读和写了,注意811和周边外围器件
<BR>的地址分配;之后是对811实现USB数据流的转换完成对USB的配置,为U盘设备设置,通信地
<BR>址。在这个USB流传送中主要是用了CONTROL传输。这个东西CYPRESS有完全的代码可以参
<BR>考,只需要修改一下地址或者不用修改就能直接运行,建议最好把,查询方式改成中断方
<BR>式,这样有利于提高CPU效率。之后该是对U盘枚举和设置了,根据SCSI协议只有对U盘进行
<BR>设置和配置后才是可用的。到这里就可以完成对U盘的读写了,不过此时你读写的数据流,
<BR>可能什么作用也不起,因为你没有文件系统,在WINDOWS里,你看不见任何东西,必须做一 <BR>个事实的文件系统来管理具体的数据。
<BR> xdata BYTE SL811_ADDR_PORT _at_ 0x8000;
<BR>xdata BYTE SL811_DATA_PORT _at_ 0x8100; <BR>extern
unsigned char xdata DBUF[BUFFER_LENGTH]; <BR>unsigned char
SL811Read(unsigned char idata a) <BR>{
<BR><BR>SL811_ADDR_PORT=a; <BR>return (SL811_DATA_PORT); <BR>}
<BR><BR><BR><BR><BR><BR>void SL811Write(unsigned char idata a, unsigned
char idata d) <BR>{ <BR>/ <BR>SL811_ADDR_PORT = a;
<BR>SL811_DATA_PORT = d; <BR>} <BR><BR><BR><BR>void
SL811BufRead(unsigned char addr, unsigned char *s, unsigned char c)
<BR>{ <BR><BR><BR><BR><BR>unsigned char idata i=c; <BR>SL811_ADDR_PORT =
addr; <BR> while (i--)
<BR> { <BR>*s = SL811_DATA_PORT; <BR>s++; <BR>}
<BR><BR><BR><BR>} <BR><BR><BR><BR>void SL811BufWrite(unsigned char addr,
unsigned char *s, unsigned char c) <BR>{ <BR><BR><BR><BR><BR>unsigned
char idata i=c; <BR>SL811_ADDR_PORT = addr;
<BR> while (i--) <BR> {
<BR>SL811_DATA_PORT = *s; <BR>s++; <BR>} <BR>}
<BR><BR><BR><BR>811和CPU通信的代码,最地层的东西,新手在这个地方一定要注意地址的定义,不要笑,这
<BR>个东西有些新人肯定不通。操作811之类的东西最好用地址来操作,速度快。不要用位控,
<BR>速度慢,并且时序控制起来也烦人。大家不要嫌我罗嗦这个东西可是最基本的,到这里来的
<BR>我希望都是新人,我讲的知识也是针对新人,所以应该基础一点。你在自己制作811的时候
<BR>函数可以就用这个了,但是地址可以根据具体情况换成响应的就可已了。还不明白的把电路 <BR>贴出来,龙人帮你算。
<BR><BR><BR><BR>今天讲讲811如何把数据流转成USB的数据流,使其能和主机通信。
<BR>先说说大的流程:(根据我自己编写的如件,其实也和CYPRESS提供的那个差不多,只是把 <BR>它的查询方式改成了中断方式)
<BR>U盘一插上后,CPU是怎么知道有设备接入的:这是通过811的中断告诉CPU的,同时当U盘拔
<BR>出去时也是通过中断告诉CPU的。那CPU是怎么判断
<BR><BR><BR><BR><BR><BR><BR>是插入还是拔出呢?可以通过读函数SL811Read(IntStatus)读取中断寄存器的值(注意,在
<BR>读中断寄存器的值必须对811进行初始化,SL81
<BR><BR><BR><BR>1Write(IntEna,0x20);SL811Write(IntStatus,INT_CLEAR);SL811Write(cSOFcnt,0xae);初
<BR>始中断寄存器,然后清0,打开SOF可以开
<BR><BR><BR><BR>始传输数据流)根据值我们就可以来控制软件的流程:1,如果是插入盘,那么就可以给U盘
<BR>分配地址,获取配置描述符中的具体数据,然后根
<BR><BR><BR><BR>据数据来设置实际的U盘包端点大小。最后根据具体设备类来设置配置值,然后配置接口。
<BR>到此时,整个USB枚举配置就完成了。给个配置的大
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -