男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
用Holtek USB MCU實(shí)現(xiàn)USB Device
用Holtek USB MCU實(shí)現(xiàn)USB Device
 更新時(shí)間:2009-7-22 16:40:53  點(diǎn)擊數(shù):0
【字體: 字體顏色
/script>

一直想在論壇寫(xiě)個(gè)帖子,介紹Holtek USB MCU單片機(jī)的實(shí)際應(yīng)用。無(wú)奈時(shí)間緣故,
上班忙公司的事,下班忙著在各個(gè)論壇灌水。忽然想通了,何不把自己的摸索經(jīng)歷寫(xiě)
下來(lái)與大家分享。于人,幫助初學(xué)者,于我,知識(shí)的總結(jié)與提升。
我將在這個(gè)帖子里面把我用Holtek 82K系列MCU開(kāi)發(fā)USB Device的經(jīng)驗(yàn)跟大家
分享,包括固件(也叫做韌件、單片機(jī)軟件)、PC軟件。主要局限在Low Speed
和HID,這樣我們就不用開(kāi)發(fā)Driver了,而是直接是有能夠M$的HID Driver。至于
硬件,如果你跟我一樣懶,直接抄Datasheet好了,保證可以跑。
雖然說(shuō)包括Firmware和Software,但是以Firmware為主。因?yàn)镕irmware最能
體現(xiàn)USB spec的內(nèi)容,Driver也在很大程度上體現(xiàn)USB spec,但是不是這個(gè)帖子
討論的主題。
我首先做個(gè)假設(shè),參與討論的朋友都可以:
1、熟練使用Holtek MCU的匯編指令集
2、熟練使用IDE3000來(lái)開(kāi)發(fā)單片機(jī)應(yīng)用
3、對(duì)USB有一定的了解,曾經(jīng)瀏覽過(guò)USB spec,哪個(gè)版本都算數(shù)
4、對(duì)C++和Windows API有一定的了解(如果你不寫(xiě)Software就可不要求這個(gè)學(xué)分啦)
 
 
做USB Device,一定要對(duì)USB spec的chapter9熟悉?纯疵质恰癈HAPTER 9 USB
DEVICE FRAMEWORK”就知道這章是我們寫(xiě)Firmware的參考重點(diǎn)了。這里我們先來(lái)
溫習(xí)一下Chapter9的內(nèi)容。


先來(lái)看看USB Device的state machine,這個(gè)狀態(tài)機(jī)使USB設(shè)備知道自己處于何種狀態(tài)。
我的USB spec是V1.1版本的,在176頁(yè)。USB Device所處的幾個(gè)狀態(tài)分別是:
attached(連接)、Powered(上電)、Default(缺省狀態(tài))、Address(可尋址)、
configured(已配置),在外加一個(gè)suspend狀態(tài)。
Attached狀態(tài),就是我們手工把Device和Host連接的過(guò)程,Plug而已,用Firmwre的角
度說(shuō)就是“不關(guān)我的事”。
Powered這個(gè)狀態(tài)的命名來(lái)自于總線(xiàn)供電的設(shè)備。但是也有設(shè)備是自供電的,這就設(shè)計(jì)
些對(duì)我們討論Firmware關(guān)系不大的細(xì)節(jié),我們先跳過(guò)不談(我是不是太懶惰了)。
Default缺省狀態(tài),USB Device在加電后并不立刻對(duì)總線(xiàn)發(fā)出響應(yīng),而是在USB的總線(xiàn)
Reset后才進(jìn)入Default狀態(tài),可以在缺省地址相應(yīng)USB的token。至于Default狀態(tài)都會(huì)
發(fā)生什么USB request,我也說(shuō)不清楚,但是有一點(diǎn)是明確的,Set Address是這個(gè)階段
的很重要的任務(wù)。
Address狀態(tài)就是在Default狀態(tài)響應(yīng)Set Address后進(jìn)入的。按說(shuō),現(xiàn)在就可以工作了吧,
為什么還要再安排個(gè)Configured狀態(tài)呢。這是因?yàn)閁SB的設(shè)計(jì)者想U(xiǎn)SB Device可以support
N個(gè)設(shè)置,到時(shí)候可以根據(jù)需要N選一(皇帝臨幸妃子不都如此嗎)。
Configured就是最終的工作狀態(tài)了(不要再想上面的話(huà)了。,這時(shí)候大量數(shù)據(jù)傳輸,所
有的USB Device都是在這個(gè)狀態(tài)工作的。
至于那個(gè)suspend狀態(tài),把它當(dāng)成休假好了,省電了。

說(shuō)完了狀態(tài)機(jī),就該說(shuō)枚舉過(guò)程了。Enumerate過(guò)程,我有個(gè)朋友一直翻譯為總線(xiàn)標(biāo)示過(guò)程,
如果你也如此,肯定是看那份翻譯的還算不錯(cuò)但是又很蹩腳的中文USB spec了。
我們先看看USB Device被Plug到Host的socket后發(fā)生了什么:
1、那個(gè)口對(duì)應(yīng)的HUB會(huì)報(bào)告主機(jī),此時(shí)你只是見(jiàn)到了媒婆而已,相親還得等會(huì)
2、HUB這個(gè)媒婆就跟HOST竊竊私語(yǔ),討論你長(zhǎng)得帥不帥之類(lèi)的,而且故意搞些delay保證
你不會(huì)立馬拍屁股走人。
3、HUB會(huì)Reset Device個(gè)10ms,然后Device總算到了Default狀態(tài)了,可以對(duì)0地址相應(yīng)了。
4、HOST跟Device見(jiàn)面后,通過(guò)一系列的USB request,吧Device從幾個(gè)狀態(tài)轉(zhuǎn)來(lái)轉(zhuǎn)去,最
終目標(biāo)是Configured。Default狀態(tài)就只能用0地址,configured之前只能用Default pipe,也
只能使用control傳輸。

打字有點(diǎn)累了,USB Requeset的回顧放到下次吧。
 
 
GET_STATUS------問(wèn)你話(huà)呢,忙什么呢?HOST就是這樣去了解DEVICE的
CLEAR_FEATURE----那個(gè)不用的功能暫時(shí)關(guān)閉吧。
SET_FEATURE------打開(kāi)某個(gè)功能,現(xiàn)在需要。
SET_ADDRESS------你轉(zhuǎn)正了,你的正式地址是N(1~127)
GET_DESCRIPTOR----想知道你的自我描述,
SET_DESCRIPTOR----試試能否改變你
GET_CONFIGURATION--你用的是哪個(gè)配置啊
SET_CONFIGURATION--你用我告訴你的這個(gè)配置,號(hào)碼
GET_INTERFACE-----你用的是哪個(gè)接口啊
SET_INTERFACE-----用這個(gè)配置吧
SYNCH_FRAME------這個(gè)是同步傳輸用的

關(guān)于這幾個(gè)Request的細(xì)節(jié),我們會(huì)在討論Firmware的時(shí)候,再細(xì)細(xì)敘來(lái)。
 

HOLTEK單片機(jī)的USB SIE承擔(dān)USB通訊的很多協(xié)議層及其以下層次()的細(xì)節(jié),
也就是說(shuō)電氣和協(xié)議層等USB spec的內(nèi)容,只需粗略讀一下即可。
而Firmware處理的多是Device Frame(spec ch9)的內(nèi)容。

詳細(xì)如下(其實(shí)很費(fèi)話(huà),因?yàn)閹缀跛械腢SB MCU都如此,或者很類(lèi)似)

USB SIE處理下面的工作:
1、轉(zhuǎn)換接受到的編碼數(shù)據(jù),編碼準(zhǔn)備在USB總線(xiàn)上傳輸?shù)臄?shù)據(jù)。
2、硬件CRC檢查和CRC產(chǎn)生。如果CRC錯(cuò)誤,硬件不會(huì)ACK給HOST,并且設(shè)置FLAG
3、硬件自動(dòng)更新、發(fā)送數(shù)據(jù)反轉(zhuǎn)位,(Data1/0)
4、自動(dòng)發(fā)送ACK或者NAK
5、SETUP/IN/OUT的Token自動(dòng)識(shí)別,并設(shè)置對(duì)應(yīng)的寄存器
6、把收到的數(shù)據(jù)保存到對(duì)應(yīng)的FIFO
7、位填充、去填充
8、地址檢查,只有與自己Address對(duì)應(yīng)的數(shù)據(jù)才接受
9、端點(diǎn)檢查,根據(jù)HOST的要求,設(shè)置對(duì)應(yīng)的寄存器

Firmware需要做余下的工作:
1、通過(guò)響應(yīng)來(lái)自的HOST的USB Request完成枚舉
2、填充或者清空FIFO,完成數(shù)據(jù)的讀寫(xiě)
3、掛起/恢復(fù) USB Device 狀態(tài),通過(guò)USB SIE控制器存取
4、完成Remote wake up,如果需要的話(huà)
5、透過(guò)USB中斷,依據(jù)各個(gè)Register的狀態(tài),branch到各個(gè)不同的處理路徑

下面會(huì)介紹HOLTEK單片機(jī)的USB所對(duì)應(yīng)的寄存器
 
以HT82K96為例,介紹USB相關(guān)的Register
這些Register主要分布在BANK0和BANK1
BANK0: USC, USR, SCC
BANK1: AWR, STALL, PIPE, SIES, MISC, FIFO0~FIFO3

1、USC只有bit0-bit3是跟USB相關(guān)的。
SUSP和RESUME,是USB總線(xiàn)狀態(tài)表現(xiàn)的地方
RMWK,通知HOST進(jìn)行WakeUp的,相當(dāng)于Device這個(gè)秘書(shū)喚醒HOST
URST:USB Reset標(biāo)示

2、SCC中跟USB相關(guān)的只有2個(gè)bit
SYSCLK:說(shuō)明現(xiàn)在用的是6M還是12M,千萬(wàn)別添錯(cuò),否則HOST不理你
USBCKEN:USB時(shí)鐘允許,正常用的時(shí)候一定置1,置0的相當(dāng)于USB關(guān)了,不給發(fā)薪怎么干活呢

3、USR跟USB相關(guān)的bit多了
EP0IF-EP3IF: Endpoint Interrupt flag,就是引起USB中斷的來(lái)頭,F(xiàn)irmware看這幾個(gè)bit,
用完了還要記得清除,去大號(hào)當(dāng)然要自己擦屁股了
SPS2:PS2使能,當(dāng)然置0了,對(duì)待敵人要象秋風(fēng)掃落葉一樣.....
SUSB: USB使能,當(dāng)然置1了,對(duì)待.....
ADREF: AD轉(zhuǎn)換用的,跟我們的話(huà)題無(wú)關(guān),自己看去
FIFO-cntl: 專(zhuān)門(mén)跟仿真器用的,操作FIFO時(shí)候,0讀1寫(xiě),我想燒OTP也不礙事吧,就一直用吧

下面是住在BANK1的寄存器介紹,寫(xiě)Firmware的時(shí)候記著用間接尋址來(lái)訪(fǎng)問(wèn)喔

1、AWR
USB地址(7個(gè)bit)+Remote Wake使能(1個(gè)bit),注意這7個(gè)bit的地址,是bit1-bit7,所以經(jīng)常要shift 1個(gè)bit

2、STALL
STALL,死到死到,確實(shí)是負(fù)責(zé)各個(gè)端點(diǎn)死活的,不過(guò)不是死了拉到,1就死0就活,每個(gè)ENDPOINT一個(gè)bit

3、FIFO0~FIFO3
各個(gè)PIPE的FIFO了,各管各家,各養(yǎng)各媽

4、PIPE
這里就告訴你剛才哪個(gè)王妃(PIPE)被國(guó)王(HOST)臨幸過(guò),仍然是各管各家,每個(gè)PIPE一個(gè)bit

5、MISC
終于輪到這個(gè)最雜貨的Register了,這可以PIPE訪(fǎng)問(wèn)的法官啊,它仲裁SIE和Firmware誰(shuí)可以訪(fǎng)問(wèn)FIFO
因?yàn)镕irmware是通過(guò)FIFO跟USB SIE聯(lián)絡(luò)的,于是FIFO就是臨界區(qū)(不明白概念者,去看OS課本)
SELP0+SELP1:兩個(gè)bit表示4個(gè)FIFO,別告訴我你想不通
TX:發(fā)送還是接受,也就是你要讀還是寫(xiě)FIFO,1表示其中哪個(gè),1當(dāng)然表示發(fā)送了,人家名字叫TX啊
REQ和READY:分別用來(lái)提交申請(qǐng)和查看申請(qǐng)是否通過(guò),大家最討厭的羅嗦估計(jì)也跟它倆有關(guān),不過(guò)人家也盡責(zé)了
剩下的幾個(gè)bit估計(jì)比較獨(dú)立了
Cleare:不管FIFO有沒(méi)有READY,強(qiáng)制清除FIFO,說(shuō)好聽(tīng)的叫做進(jìn)入特別狀態(tài),不好聽(tīng)就叫做獨(dú)裁
SCMD:告訴Firmware說(shuō)FIFO里面的數(shù)據(jù)是Setup,它怎么有先見(jiàn)之明呢,人家SIE不是看過(guò)Token了嗎
LEN0:告訴Firmware說(shuō)HOST送來(lái)個(gè)長(zhǎng)度為0的數(shù)據(jù)包,有這樣送禮的嗎?USB spec確實(shí)定義了這種流氓做法,這是后話(huà)

6、SIES
這個(gè)寄存器啊,新版的IC才有(詳見(jiàn)官方datasheet)
Adr_set:這個(gè)有用啊,增加它Firmware可簡(jiǎn)化了不少,這是后話(huà)。
F0_Err: FIFO0專(zhuān)用的Error寄存器,作用呢,您仔細(xì)瞅吧,一出錯(cuò)標(biāo)志而已,無(wú)非想證明FIFO0最重要 
  
 

  • 上一篇: 基于PIC18F系列單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)
  • 下一篇: PIC子程序庫(kù)-AD轉(zhuǎn)換(PIC16C54)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1
    主站蜘蛛池模板: 雷山县| 申扎县| 水城县| 灵宝市| 临洮县| 临沭县| 大关县| 苍山县| 永川市| 龙山县| 阿荣旗| 和林格尔县| 来凤县| 阿城市| 柘荣县| 贺兰县| 临海市| 横山县| 莆田市| 申扎县| 城市| 襄城县| 宁明县| 会宁县| 明水县| 逊克县| 镇宁| 汝阳县| 海阳市| 浑源县| 城步| 乐山市| 万荣县| 嘉黎县| 巨鹿县| 大悟县| 贺州市| 凤凰县| 富裕县| 阿合奇县| 盘山县|