?? sl811 讀寫(xiě)u盤(pán)的資料,龍人提供.htm
字號(hào):
<!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>讀寫(xiě)U盤(pán)的資料,龍人提供(a66886527)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="SL811 讀寫(xiě)U盤(pán)的資料,龍人提供_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>文章編號(hào):1661----加入日期:2004-12-15 </P></TD></TR>
<TR>
<TD width="100%">
<P align=right><A href="javascript:self.close()">『關(guān)閉窗口』</A></P></TD></TR>
<TR>
<TD width="100%">
<P align=center><B>讀寫(xiě)U盤(pán)的資料,龍人提供(a66886527)</B></P></TD></TR>
<TR>
<TD width="100%">
<BLOCKQUOTE><BR>讀寫(xiě)U盤(pán)的資料,龍人提供
<BR>讀寫(xiě)U盤(pán)的資料準(zhǔn)備充分和完畢,龍人在此征求大家的意見(jiàn)。我是把資料一下共享出來(lái),還
<BR>是開(kāi)個(gè)版塊,從硬件的選材開(kāi)始,一步步講解這個(gè)項(xiàng)目的過(guò)程,同時(shí)附上代碼。我個(gè)人贊成
<BR>后面一種。因?yàn)檎搲瘎?chuàng)立的目的就是為了想幫助初為技術(shù)的朋友們,不想人迷惑,讓學(xué)生朋
<BR>友們都能學(xué)到精華和好的東西。我曾經(jīng)也做過(guò)彎路,學(xué)過(guò)周某人的東西,簡(jiǎn)直是垃圾!學(xué)了
<BR>等于沒(méi)學(xué)。龍人就是看不管這些創(chuàng)立論壇。立志為初為技術(shù)的朋友,一開(kāi)始就能站在一個(gè)較
<BR>高和實(shí)用的角度,不要去走那些花拳繡腿費(fèi)錢(qián)費(fèi)力的路。既然是學(xué)習(xí)肯定得要有資料和必要
<BR>的指引,在此龍人每晚辛苦2-3個(gè)小時(shí),做出總結(jié)和指引幫助所有的人在10-15天全部掌握這
<BR>個(gè)東西,更重要的是通個(gè)這個(gè)學(xué)到單片機(jī)開(kāi)發(fā)的思想,為以后的路作.......同時(shí)也想你們
<BR>在這里認(rèn)識(shí)一幫朋友,學(xué)到做人做事的真道理,多點(diǎn)關(guān)愛(ài)和奉賢精神!不多說(shuō)了,大家積極
<BR>投票,特別是學(xué)生朋友們,踴躍投票!在2天之內(nèi)做決定,一切征求大家的意見(jiàn)。
<BR><BR><BR><BR><BR>在做這個(gè)項(xiàng)目之前,我想提醒大家,硬件不怎么難,關(guān)鍵是軟件的問(wèn)題。所以大家只要努
<BR>力,多用時(shí)間調(diào)試,最后就一定能夠走通。我這里只是向大家指條好路,記住千萬(wàn)不要直接
<BR>COPY,否則學(xué)不到什么東西,什么事情,親自動(dòng)手后,然后搞定后者提問(wèn)才是最好的辦法。
<BR>另外,我想說(shuō)明的是,我在這里講的一般代碼,大概最后速度有幾十K,龍人最核心的800多
<BR>K的東西,需要一定的板子費(fèi)才給大家。希望大家能夠理解。不羅嗦了,進(jìn)入正題。首先,
<BR>硬件選用最常見(jiàn)的8為51系列或者16位的也可以。主控芯片當(dāng)然用sl811hst。然后要有擴(kuò)展
<BR>內(nèi)存,32K(62256就可以了)反向器,811的晶體最好用48M有源的,為了調(diào)試方便設(shè)置幾個(gè)
<BR>必要的LED,為了在電腦上仿真,接個(gè)232口,好了硬件選材基本就是這些。必要工具:開(kāi)關(guān)
<BR>電源:最好選用紋波少點(diǎn)的,否則容易讀寫(xiě)出錯(cuò);示波器;仿真器。我講講整個(gè)項(xiàng)目開(kāi)發(fā)的
<BR>流程,不熟悉的人可以快去補(bǔ)補(bǔ)相關(guān)東西。畫(huà)原理圖(我上面說(shuō)的器件)做PCB。然后開(kāi)始
<BR>看USB1.1協(xié)議中的主機(jī)部分,811數(shù)據(jù)手冊(cè),SCSI協(xié)議(BULK),看FAT文件協(xié)議(有條件的
<BR>可以看點(diǎn)U盤(pán)開(kāi)發(fā)資料)。等于心中有個(gè)數(shù)后就可以開(kāi)始投入寫(xiě)代碼和調(diào)試了。這個(gè)軟件分
<BR>為3大層次來(lái)寫(xiě),首先是81和CPU的通信遍寫(xiě),無(wú)非就是讀和寫(xiě)了,注意811和周邊外圍器件
<BR>的地址分配;之后是對(duì)811實(shí)現(xiàn)USB數(shù)據(jù)流的轉(zhuǎn)換完成對(duì)USB的配置,為U盤(pán)設(shè)備設(shè)置,通信地
<BR>址。在這個(gè)USB流傳送中主要是用了CONTROL傳輸。這個(gè)東西CYPRESS有完全的代碼可以參
<BR>考,只需要修改一下地址或者不用修改就能直接運(yùn)行,建議最好把,查詢方式改成中斷方
<BR>式,這樣有利于提高CPU效率。之后該是對(duì)U盤(pán)枚舉和設(shè)置了,根據(jù)SCSI協(xié)議只有對(duì)U盤(pán)進(jìn)行
<BR>設(shè)置和配置后才是可用的。到這里就可以完成對(duì)U盤(pán)的讀寫(xiě)了,不過(guò)此時(shí)你讀寫(xiě)的數(shù)據(jù)流,
<BR>可能什么作用也不起,因?yàn)槟銢](méi)有文件系統(tǒng),在WINDOWS里,你看不見(jiàn)任何東西,必須做一 <BR>個(gè)事實(shí)的文件系統(tǒng)來(lái)管理具體的數(shù)據(jù)。
<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通信的代碼,最地層的東西,新手在這個(gè)地方一定要注意地址的定義,不要笑,這
<BR>個(gè)東西有些新人肯定不通。操作811之類(lèi)的東西最好用地址來(lái)操作,速度快。不要用位控,
<BR>速度慢,并且時(shí)序控制起來(lái)也煩人。大家不要嫌我羅嗦這個(gè)東西可是最基本的,到這里來(lái)的
<BR>我希望都是新人,我講的知識(shí)也是針對(duì)新人,所以應(yīng)該基礎(chǔ)一點(diǎn)。你在自己制作811的時(shí)候
<BR>函數(shù)可以就用這個(gè)了,但是地址可以根據(jù)具體情況換成響應(yīng)的就可已了。還不明白的把電路 <BR>貼出來(lái),龍人幫你算。
<BR><BR><BR><BR>今天講講811如何把數(shù)據(jù)流轉(zhuǎn)成USB的數(shù)據(jù)流,使其能和主機(jī)通信。
<BR>先說(shuō)說(shuō)大的流程:(根據(jù)我自己編寫(xiě)的如件,其實(shí)也和CYPRESS提供的那個(gè)差不多,只是把 <BR>它的查詢方式改成了中斷方式)
<BR>U盤(pán)一插上后,CPU是怎么知道有設(shè)備接入的:這是通過(guò)811的中斷告訴CPU的,同時(shí)當(dāng)U盤(pán)拔
<BR>出去時(shí)也是通過(guò)中斷告訴CPU的。那CPU是怎么判斷
<BR><BR><BR><BR><BR><BR><BR>是插入還是拔出呢?可以通過(guò)讀函數(shù)SL811Read(IntStatus)讀取中斷寄存器的值(注意,在
<BR>讀中斷寄存器的值必須對(duì)811進(jìn)行初始化,SL81
<BR><BR><BR><BR>1Write(IntEna,0x20);SL811Write(IntStatus,INT_CLEAR);SL811Write(cSOFcnt,0xae);初
<BR>始中斷寄存器,然后清0,打開(kāi)SOF可以開(kāi)
<BR><BR><BR><BR>始傳輸數(shù)據(jù)流)根據(jù)值我們就可以來(lái)控制軟件的流程:1,如果是插入盤(pán),那么就可以給U盤(pán)
<BR>分配地址,獲取配置描述符中的具體數(shù)據(jù),然后根
<BR><BR><BR><BR>據(jù)數(shù)據(jù)來(lái)設(shè)置實(shí)際的U盤(pán)包端點(diǎn)大小。最后根據(jù)具體設(shè)備類(lèi)來(lái)設(shè)置配置值,然后配置接口。
<BR>到此時(shí),整個(gè)USB枚舉配置就完成了。給個(gè)配置的大
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -