?? 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 + -