?? s3c2410usb控制器.htm
字號:
部分并不因為使用什幺樣的接口方式而有所改變(如早期的攝像頭皆采用 ECP 的并口增強模式來進行圖像數據的傳輸,而現在幾乎都是 USB
接口)。因而本文的重點是闡述 USB 外設接口的部分,即 USB Device Microcontroller (
USB器件微控制器)。<BR>USB總線是以差模驅動的方式來進行數據傳輸的,但在資料包發送之前, USB 協議規定必須使用 NRZI
的編碼方式來對資料進行編碼。當然,在 USB 外設中,用于譯碼的器件對外設來說也是必不可少的。 NRZI
的編碼協議其實很簡單,它采用的是逢“1”保持,逢“0”跳變的原則(圖9-22),而 NRZI
的譯碼則采用相反的操作。<BR></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center><IMG height=91
src="USB協議基礎及S3C2410 USB控制器.files/422.gif" width=477></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center>圖9-22 NRZI數據編碼<BR></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=left>為保證數據流中有足夠的信號變化, USB 協議規定了 Bit stuffing
(加填充位)的原則,即如果信號流中連續出現六位以上的資料“1”,則每隔六位,必須插入一個“0”,然后才進入NRZI編碼。圖9-23是一串原始資料及其加填充位后和
NRZI 編碼后的資料格式對比。</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center><IMG height=141
src="USB協議基礎及S3C2410 USB控制器.files/423.gif" width=420></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center>圖9-23 原始資料和加填充位后及NRZI編碼后的資料格式對比</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>SIE (Serial interface Engine)是 USB
外設最重要的硬件組成部分之一,它主要由四部分組成:<BR>1) 硬件上用來完成 NRZI 編/譯碼和加/去填充位操作的,NRZI/Bit
Buffing 和NRZO/Bit Unstuffing 的部分。<BR>2) 硬件上產生資料的 CRC 校驗碼并對資料包進行 CRC
校驗的 CRC check & Generator 部分。<BR>3) 用來將并行資料轉化成 USB 串行資料的并/串轉換部分(
Packet Encode ),將主機發送的 USB 資料包轉化成可以識別的并行資料的串/并轉換部分( Packet Decode
)。<BR>4) 檢測和產生 SOP (即每個資料包的同步字段)和 EOP 信號的部分。<BR>USB
外設使用一段代碼來存儲關于該外設工作的一些重要信息,這被稱為 USB 的協議層( Protocol Layer
),它不僅存儲了諸如廠家識別號、該外設所屬的類型(是 HUB 還是
Function,是低速還是高速設備)、電源管理等常規信息,更重要的是還存儲了外設的設備類型、器件配置信息、功能部件的描述、接口信息等,其存儲方式都采用特征字(
Descriptors )的方式。 USB 主機通過在外設的協議層和主機之間建立Endpoint
0信道、采用控制傳輸的方式對這些信息進行存取。特征字采用 USB 協議所規定的結構和代碼排列(關于特征字的詳細信息請參閱 USB
協議標準)。協議層是一臺 USB 外設能夠被主機正確識別和配置,并正常工作的前提。可以說,協議層是一臺 USB 外設的固件(
Firmware )中心。<BR>我們知道,資料采樣率因采樣精度和使用的不同場合而不同,如對于音頻應用,就可以采用 22.05kHz 或
44.1kHz 的采樣率,而這個時鐘并不和 USB 標準時鐘對應。因而在實際應用中,為保證采集到的資料無丟失地打包和傳送,必須在 SIE
和數據采集部件(對諸如音箱或打印機等外設則為資料消耗部件)之間設立 FIFOs,以便對資料進行緩存。對于采用塊傳送和同步傳送的外設而言,
FIFOs 的作用顯得尤為重要。例如一臺采用同步傳輸的 USB 數字攝像機(現在市場上有很多這種類型的產品),我們假設它的 CCD 為
400×300像素,那幺為保證資料正確地壓縮、傳輸和接收,直到以后的解壓縮及處理,在動態采集中,FIFOs至少要存儲一幀圖像,即要求
FIFOs 有 400 × 300 = 12KB的容量。<BR>在 USB 外設中,用于實現和 USB 線纜無縫連接的 USB
傳輸接收部分( Transreceiver )是必不可少的,它不僅要在電氣和物理層面上實現和 USB
線纜的連接,而且要完成對資料包的差模驅動或分離的操作。<BR>以上我們簡述了 USB 外設接口的硬件組成,那幺在完成 USB
數據傳輸的過程中,這些硬件又是如何配合工作并和位于主機的軟硬件交互,以完成數據傳輸的呢?<BR>前面已經提到, USB
總線采用總線列舉的方法來標記和管理外設所處的狀態,當一臺 USB外設初次連接到 USB
系統中后,通過8個步驟來完成它的初始化:<BR>1) USB 外設所連接的 HUB ( ROOT HUB 或擴展 HUB
)檢測到所連接的 USB 外設并自動通知主機,以及它的端口狀態的變化,這時外設還處于禁止( Disabled )狀態。<BR>2)
主機通過對 HUB 的查詢以確認外設的連接。<BR>3) 現在,主機已經知道有一臺新的 USB 外設連接到了 USB
系統中,然后,它激活( Enabled )這個 HUB 的埠,并向 HUB 發送一個復位( Reset )該埠的命令。<BR>4)
HUB 將復位信號保持 10ms ,為連接到該埠的外設提供 100mA
的總線電流,這時該外設處于上電狀態,它的所有寄存器被清空并指向默認的地址。<BR>5) 在外設分配到唯一的 USB
地址以前,它的默認信道均使用主機的默認地址。然后主機通過讀取外設協議層的特征字來了解該外設的默認信道所使用的實際的最大資料有效載荷寬度(即外設在特征字中所定義的在
DATA0 資料包中數據域位的長度)。<BR>6) 主機分配一個唯一的 USB 地址給該外設,并使它處于 Addressed
狀態。<BR>7) 主機開始使用 Endpoint 0 信道讀取外設的器件配置特征字,這會花去幾幀的時間。<BR>8)
基于器件配置特征字,主機為該外設指定一個配置值,這時,外設即處于配置( Configured )狀態了,它所有的端點( Endpoint
)這時也處于配置值所描述的狀態。從外設的角度來看,這時該外設已處于準備使用的狀態。<BR>在一臺外設能被使用之前,它必須被配置。“配置”即主機根據外設的配置特征字來定義器件的配置寄存器,以便規定外設的所有
Endpoint
的工作環境。如某信道所采用的數據傳輸方式,該外設所屬的器件“類”(Class)、“子類”(SubClass)等,從而通過基于主機的
USB 系統軟件或客戶軟件對外設進行控制。當一臺 USB 外設配置好以后,即會進入到掛起 ( Suspend
)狀態,直到它開始被使用。<BR>必須指出的是,一臺 USB 外設一旦配置好,它的每一個特定的信道只能使用一種數據傳輸方式。
Endpoint 0 信道只能采用控制傳送的方式,主機通過 Endpoint 0 來傳送標準的 USB
命令,完成諸如讀取器件配置特征字、控制外設對資料的采集、處理和傳送等任務,并可以通過Endpoint
0來檢測和改變外設所處的狀態(如對外設的遠程喚醒、掛起和恢復等)。<BR>對于一臺采用同步傳輸的數字攝像機來說,數據傳輸的過程如下:<BR>(1)
應用軟件( CSW )在內存中開辟資料緩沖區,并通過標準 USB 命令字向外設發出資料請求(IRPs)。<BR>(2) 主機 USB
系統軟件通過對該 IRPs 的翻譯形成 Token 資料包發送到外設,這時主機進入等待狀態。<BR>(3) 外設對資料包進行 NRZI
譯碼和 Bit Unstuffing 操作及 CRC 校驗,確認后接收主機 PID 字段中所包含的命令并開始采集資料。<BR>(4)
采集到的并行資料首先進入 FIFOs ,并通過并/串轉換部件形成串行脈沖。<BR>(5)
根據器件配置寄存器的要求對資料進行符合條件的分割,配置資料包的 PID 字段等以形成原始資料包。<BR>(6) 通過 CRC
校驗產生器對每一個資料包生成 CRC 校驗碼字段, SOP & EOP
信號產生器為該資料包加入同步字段頭和資料包結束符。<BR>(7) 數據包的 NRZI 編碼和 Bit Stuffing
操作。<BR>(8) 使用收發器( Transreceiver )將數據流驅動到 USB 線纜上。<BR>(9) 主機控制器將 USB
資料轉化成為普通資料送到資料緩沖區以進行資料的進一步處理。如果是控制傳輸、塊傳輸或中斷傳輸方式,在資料被成功傳送后,主機還會向外設發送
ACK 的握手資料包作為響應。</TD></TR></TBODY></TABLE>
<TABLE height=503 cellSpacing=0 cellPadding=0 width="90%" align=center><!--DWLayoutTable-->
<TBODY>
<TR>
<TD vAlign=top
height=82>圖9-24簡單描繪了異步數據傳輸的請求和傳送過程(在同步傳輸中沒有Handshake部分)。</TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center><IMG height=85
src="USB協議基礎及S3C2410 USB控制器.files/424.gif" width=437></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center>圖9-24 異步數據傳輸的請求和傳送過程</DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=left>至此,我們已從幾個方面較詳細地介紹了 USB 系統的軟硬件構成及 USB 的數據傳輸協議。USB
可以說是開辟了計算機外設接口的新紀元。它把人們從繁雜的聯機、不同的接口標準和惱人的中斷沖突中解放出來;<BR>使“PnP”和“熱插拔”這樣的特性不再只是口號;它大大擴展了計算機可連接的外設數目;它的智能電源管理有效地降低了手持計算機的電源損耗。USB
正在成為市場的熱點,越來越多的外設生產廠家將自己的產品轉向 USB 接口。而 USB 2.0 協議的推出,無疑對 USB
技術的發展起到了推波助瀾的作用。<BR>在如鼠標、鍵盤、手寫板或是游戲桿等人機交互的應用場合:如掃描儀、數碼相機、移動存貯設備、數字攝像機等數據輸入應用場合,USB
無疑是替代傳統串/并口的最佳接口方式,它們使得 USB 的優點得到了充分發揮。<BR>二、S3C2410 內置USB1.1
Device控制器<BR>S3C2410 內置的 USB Device 控制器具有一下特性:<BR>(1) 完全兼容 USB1.1
協議<BR>(2) 支持全速(Full Speed)設備<BR>(3) 集成的 USB 收發器<BR>(4)
支持Control、Interrupt 和 Bulk傳輸模式<BR>(5) 5 個具備 FIFO 的通訊端點<BR>(6) Bulk
端點支持DMA操作方式<BR>(7) 接收和發送均有 64Byte 的FIFO<BR>(8)
支持掛起和遠程喚醒功能<BR>下圖(圖9-25)是 USB 控制器的內部邏輯示意圖<BR></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center><IMG height=428
src="USB協議基礎及S3C2410 USB控制器.files/425.gif" width=516></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center>圖9-25</DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=left>三、S3C2410 USB 內部控制寄存器簡介:<BR>FUNC_ADDR_REG :USB
設備地址寄存器(見圖9-26)<BR>FUNCTION_ADDR :CPU 將由 USB
主機分配的器件地址寫入該字段<BR>ADDR_UPDATE :當 CPU 寫入新的地址后,置該位來更新 FUNCTION_ADDR
字段中的值<BR></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center><IMG height=103
src="USB協議基礎及S3C2410 USB控制器.files/426.gif" width=516></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center>圖9-26</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=left>PWR_ADDR :電源管理控制寄存器(見圖9-27)<BR>SUSPEND_EN
:使能SUSPEND模式<BR>SUSPEND_MODE :當設備進入 SUSPEND 狀態時,由 USB
控制器設置<BR>MCU_RESUME :由 CPU 設置 進入 RESUME 狀態<BR>USB_RESET :當 USB
主機發出復位(RESET)命令后,由CPU設置<BR>ISO_UPDATE :只用于 ISO 傳輸模式<BR></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center><IMG
src="USB協議基礎及S3C2410 USB控制器.files/427.gif"></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center>圖9-27</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=left>EP_INT_REG : Endpoint 中斷標志寄存器(見圖9-28) </DIV>
<DIV align=left></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center><IMG height=433
src="USB協議基礎及S3C2410 USB控制器.files/428.gif"
width=516><BR></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center>圖9-28</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=left>USB_INT_REG :USB中斷標志寄存器(見圖9-29)</DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center><IMG height=266
src="USB協議基礎及S3C2410 USB控制器.files/429.gif" width=516></DIV></TD></TR>
<TR>
<TD class=text2 vAlign=center>
<DIV align=center>圖9-29</DIV></TD></TR></TBODY></TABLE>
<TABLE height=49 cellSpacing=0 cellPadding=0 width="90%" align=center><!--DWLayoutTable-->
<TBODY>
<TR>
<TD vAlign=top>EP_INT_EN_REG :Endpoint 中斷使能寄存器(見圖9-30)</TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center><IMG height=166
src="USB協議基礎及S3C2410 USB控制器.files/430.gif" width=516></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center>圖9-30</DIV></TD></TR>
<TR>
<TD vAlign=top>INT_MASK_REG :USB 中斷屏蔽寄存器(見圖9-31)</TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center><IMG height=96
src="USB協議基礎及S3C2410 USB控制器.files/431.gif" width=516></DIV></TD></TR>
<TR>
<TD vAlign=top>
<DIV align=center>圖9-31 </DIV></TD></TR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -