<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > USB主控芯片SL811HS的固件程序設計

USB主控芯片SL811HS的固件程序設計

作者:■ 重慶郵電學(xué)院計算機應用專(zhuān)業(yè) 王濤 李星 李秉智 時(shí)間:2005-04-27 來(lái)源:eaw 收藏

摘   要:本文以Cypress公司的主控芯片SL811HS為例,介紹了其的設計方法。
關(guān)鍵詞:;;;;

前言
隨著(zhù)需求的發(fā)展,許多電子產(chǎn)品尤其是各種嵌入式設備,需要提供主控接口來(lái)連接如移動(dòng)硬盤(pán)、U盤(pán)等USB設備以滿(mǎn)足應用要求。本文對Cypress公司的USB主控芯片SL811HS作了詳細介紹,并給出其的設計方法。

SL811HS芯片介紹
SL811HS是一款遵從USB1.1協(xié)議的嵌入式USB Host/Slave芯片。該芯片既能和USB低速設備進(jìn)行通信,也能和USB高速設備進(jìn)行通信。由于提供了8bit寬數據總線(xiàn)及中斷支持,使得該芯片能方便地與微處理器、微控制器以及進(jìn)行連接。
SL811HS能工作在Host/Slave兩種模式。在Host模式下,SL811HS為USB主控制器,在Slave模式下,SL811HS為一個(gè)USB設備。該芯片的特點(diǎn)主要有:能通過(guò)硬件設置或軟件設置的方法使該芯片工作在Host或Slave模式;自動(dòng)探測所接設備是低速設備還是高速設備;8bit雙向數據總線(xiàn);片上SIE、USB收發(fā)器;自動(dòng)產(chǎn)生SOF令牌包,以及自動(dòng)生成令牌包、數據包中所需要的CRC5/CRC16數據;內部256byte RAM,支持乒乓操作;支持SUSPEND/RESUME、WAKE UP、LOW-POWER模式。

SL811HS固件程序設計
SL811HS對一個(gè)接入的USB設備的啟動(dòng)過(guò)程為:
(1) SL811HS檢測到有外部USB設備接入;
(2) 對這個(gè)USB設備進(jìn)行Reset操作,檢測該USB設備是高速設備還是低速設備,并設置好SL811HS中對應的寄存器位;
(3) 通過(guò)0號讀取該USB設備的描述符信息如廠(chǎng)商ID、產(chǎn)品ID、設備類(lèi)、設備子類(lèi)、設備協(xié)議,選取對應的子程序;
(4) SL811HS固件驅動(dòng)程序對該USB設備進(jìn)行初始化:讀取該USB設備的設備描述符,為該設備指定地址,讀取該設備的配置描述符信息、接口描述符信息、描述符信息,為該USB設備設置選擇配置描述符;
(5) 對該USB設備的初始化完成后,按照應用要求與該設備進(jìn)行通信。
以圖1所示的電路圖為例,說(shuō)明TMS320C6211與SL811HS的電路連接關(guān)系以及一個(gè)簡(jiǎn)化的固件程序(DSP程序)的設計。
該系統USB固件程序主要由幾個(gè)部分組成:對SL811HS進(jìn)行設置的初始化程序,這部分程序在系統復位后就立即執行;發(fā)現USB設備接入的子程序,并判斷該設備是高速設備還是低速設備;對該USB設備進(jìn)行Enumerate即初始化操作,并指定其USB地址的子程序;用于其他數據通信的子程序,利用該部分程序完成指定的應用要求。(本文有刪節,詳見(jiàn)本刊網(wǎng)站:www.eaw.com.cn)
初始化部分需要根據SL811HS數據手冊的要求對各個(gè)控制寄存器進(jìn)行設置。把SL811HS控制寄存器2(地址0x0F)設置為0xAE,以使能SL811HS的全部功能;把控制寄存器1(地址0x05)設置為0;把SOF Count Low寄存器(地址0x0E)設置為0xE0,讓SL811HS每1ms自動(dòng)產(chǎn)生SOF。此外還要對SL811HS中斷使能寄存器進(jìn)行設置,以使能設備插入/移去中斷。
在對SL811HS的初始化完成以后,TMS320C6211 DSP上的固件程序進(jìn)入等待設備插入的階段。當SL811HS以中斷方式通知DSP現在有設備接入時(shí),固件程序進(jìn)入發(fā)現USB設備接入子程序。
需要注意的是,USB設備接入后應首先對其進(jìn)行復位操作,且復位時(shí)間不少于10ms,否則USB設備將不能啟動(dòng)。
USB設備在正常使用前,還需要由固件程序對它進(jìn)行配置,即對USB設備進(jìn)行初始化。該部分涉及資源的分配、選擇合適的驅動(dòng)程序、設置USB地址等。這些功能的完成都需要控制傳輸??刂苽鬏數膶?shí)現是固件程序中一個(gè)比較復雜的部分。其實(shí)現函數為:
int ControlXfer(unsigned char DeviceAddr;//需要進(jìn)行控制傳輸USB設備的地址;
unsigned char Payload;    file://USB數據包的最大尺寸;
Setup * setup;    file://待傳輸的SETUP令牌結構體;
unsigned char *Buf;  file://接收或發(fā)送數據緩沖區;)
{  short int  wLen=setup->wLength;  file://取出該控制傳輸需要在數據階段傳輸的數據量的大??;
if  (SetupXfer(DeviceAddr, Payload, 8, (unsigned char *)setup)= =false)
// 傳輸SETUP,向USB設備指明控制傳輸第二階段數據傳輸的方向與數量以及命令的類(lèi)型;
       return false;
if (wLen)    file://需要數據階段傳送需要的數據
{
if  (setup->bmRequest Type&0x80) file://區分數據階段的傳輸方向;
{   if (InXfer(DeviceAddr,0, Payload,wLen,Buf)==false)
file://調用InXfer()函數完成對IN的傳輸;
       return false;}
else
{   if  (OutXfer (DeviceAddr, 0, Payload, wLen, Buf)==f alse)
// 調用OutXfer()函數完成對OUT事務(wù)的傳輸;
       return  false; }
}
if  (setup->bmRequestType &0x80)  file://控制傳輸的狀態(tài)階段;
{  if (OutXfer(DeviceAddr,0, Payload,0,Null)==false)
        return false;}
else
{ if (InXfer(DeviceAddr,0, Payload,0, Null)==false)
        return false;} 
 return true;
}  
有了完成控制傳輸的函數,就可以完成對USB設備的Enumerate即初始化,其流程如圖2所示。
為了簡(jiǎn)化說(shuō)明,圖2的流程說(shuō)明了USB設備只有一個(gè)配置描述符的流程。
在編碼SL811HS固件程序時(shí),還需要注意:根據應用需要,如果要支持USB HUB類(lèi)型的設備接入時(shí),需要對前面的程序作適當的調整和考慮,尤其注意在跨過(guò)HUB與一個(gè)低速USB設備通信時(shí)要先發(fā)一個(gè)前導包。如果支持多個(gè)USB設備的接入,通過(guò)對SL811HS內部SOF Count Low寄存器和SOF Count High寄存器的分析,來(lái)確定能否滿(mǎn)足當前接入設備的帶寬要求。每次事務(wù)傳輸完成,都應該讀取SL811HS內部USB Status寄存器的值,以確定該次事務(wù)傳輸是否成功、是否超時(shí)等異常情況的發(fā)生,以保證程序的穩健性。

結語(yǔ)
在測試中,普通U盤(pán)接入系統的USB接口,該系統能自動(dòng)識別出該USB設備并能按USB Mass Storage Class協(xié)議格式讀出、寫(xiě)入該U盤(pán)上各個(gè)扇區的數據?;谏鲜龅膶?shí)現方案可以廣泛應用于各種便攜式、嵌入式數據采集系統中。采集到的數據可以直接放到U盤(pán)等存儲器中,用戶(hù)只需定期更換存儲器即可,而且插入取出存儲器也比較方便,充分發(fā)揮了USB接口靈活方便的特點(diǎn)?!?/P>

參考文獻
1. Don Anderson. USB系統體系. 中國電力出版社,2001
2. Universal Serial Bus Specification Revision 1.1, 1998.9



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>