程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 基於OHCI的USB主機 —— 總體構架

基於OHCI的USB主機 —— 總體構架

編輯:關於C語言

在我們的系統中,USB主機就是用來對U盤進行讀寫操作,因此在設計和構架上就完全圍繞這個目的而進行。整個系統所涉及到的內容比較多,按照嵌入式系統開發的一般原則,采用層次化的體系結構,將系統按照功能劃分為若干層次,每一層完成相應的功能。 根據系統的業務需要,系統總體構架如下: 9 業務應用層 8 文件操作API層 7 文件系統層 6 U盤操作命令接口層 5 UFI命令層 4 USB設備管理層 3 OHCI軟件接口層 2 寄存器讀寫接口層 1 硬件層 這是一個分層的結構,每層完成自己的功能,層與層之間都是通過接口完成,基本上上層應用都只依賴於下一層,對於個別層的功能實現需要依賴其下的2層,這是考慮實現的方便。 下面對每一層的功能進行說明: 1、 硬件 這是系統最底層,直接完成USB協議處理的硬件部分。 2、 寄存器讀寫接口 AM9200支持標准的OHCI接口,提供了訪問OHCI寄存器的指針pUhp)和數據交換區HCCA),本層對該指針和數據交換區的訪問進行封裝,對外屏蔽了寄存器讀寫的細節。以後如果移植到非OHCI的系統上,則可以保持在接口不變,對該層進行重新編碼即可。 3、 OHCI軟件接口 根據OHCI標准,數據傳輸都是通過端點描述符ED)和傳輸描述符TD)這兩種數據結構來完成的,在進行傳輸之前需要對ED和TD進行相應的設置,才可以保證數據傳輸的正確性,本層對ED和TD的操作進行了封裝,提供基於OHCI的數據傳輸接口。 關於ED和TD的詳細介紹請參考OHCI規范《Open Host Controller Interface Specification for USB》。 4、 USB設備管理 根據USB標准,USB設備都需要提供設備描述符、配置描述符、接口描述符和端點描述符等信息,本層代碼提供了取得這些描述符的命令。 另外,本層還將這些取得描述符的命令組合起來,完成了USB設備的枚舉和檢測。 5、 UFI命令 根據《Universal Serial Bus Mass Storage Class Bulk-Only Transport》和《Universal Serial Bus Mass Storage Class UFI Command Specification》規范,完成BulkOnly協議的UFI命令,提供扇區讀寫命令給上層。 6、 U盤操作命令接口 一方面封裝UFI命令層,提供以扇區為單位的磁盤讀寫命令,譬如diskRead()、diskWrite()等函數,另一方面,調用UFI命令完成U盤枚舉和檢測,確定邏輯0扇區的編號,為構建文件系統奠定基礎。 7、 文件系統 完成文件系統初始化,得到相關的參數,提供目錄查找、簇操作等接口給上層。 8、 文件操作庫函數 仿照C語言的標准文件庫函數,提供一套便於上層業務應用所使用的API函數庫,包括文件打開、關閉、讀寫和定位等。 9、 業務應用 這就是業務邏輯層了,也就是根據接收的計費信息調用相應的文件操作庫函數,完成話單保存的功能。 采用這樣的層次結構,系統具有良好的可維護性和擴展性,只要CPU支持OHCI標准,則本系統就可以不用修改直接使用,如果CPU不支持OHCI標准,則需要將OHCI層的代碼進行修改,保持上層的調用接口不變,就可以完成系統移植了。 如果需要擴展支持更多的USB設備,則保持OHCI層基本不變或適當擴展目前的OHCI層代碼只支持控制和批量傳輸,不支持同步和中斷傳輸),添加新的驅動以及上層應用就可以了。 在這一篇文章裡,我對我們的系統進行總體上的說明,這是為了避免一上來就闡述各種技術細節,導致一葉障目,不見泰山。在本系列文章中,所有的代碼都是按照這個構架原則來編寫的,記住這個構架,對於理解代碼會有很大的幫助。

本文出自 “rainman” 博客,請務必保留此出處http://lancelot.blog.51cto.com/393579/228153

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved