

下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于 ARM 和itC/OS 的嵌入式 USB 主機設計與應用基于 ARMffi tC/OSU的嵌入式 USB 主機設計與應用類別:嵌入式系統1 引 言 通常情況下,打印機、海量存儲等設備是由普通 PC 機來驅動的,由于大量的測控、醫療等系統需要存儲、打印數據,因此開發這 類設備的嵌入式驅動是非常有實用價值的。目前,各種嵌入式設備基本上是通 過軟盤存儲,并口打印的,而它們的存儲容量、數據傳輸速度已大大落后當前 各類嵌入式系統的需求。因此,開發基于 USB 接口的嵌入式海量存儲設備和打 印機驅動已成當務之急。USB(Universal Serial Bus) 是最近幾年逐步在PC 領域廣為應用的
2、新型串行接口技術,它通用性好、實時性強、傳輸方式多 樣、成本低、易于擴展和使用,這些優點使它受到許多硬件廠商的青睞,各種 類型的 USB設備產品大量涌入市場。 USE 通訊必須是主機和外設通訊, 每次通 訊都是由主機發起,外設只是被動地執行主機發過來的命令。而市場上所買到 和使用的 USB 移動設備,都是 USB 的外設(device), 如 USB 的移動硬盤、 USB 接口的數碼相機、打印機等。這些設備通常只能通過 PC 來進行相互的文 件和數據交換,沒有了 PC 機, 這些設備就無法進行數據交換。而實際上并非 每個地方都擁有 PC 機或者適合使用 PC 機,因此業界和用戶需求 USB 主
3、機的嵌 入式化。也就是開發和設計嵌入式的 USB 主機。根據具體醫療儀器(酶標儀)的實際需要,我們在三星的 ARM 處理器 S3C44B0X 上移植了實時操作系 統(RTOS µC/OS-ll,并編寫了基于 USB 主控制器芯片 SL811 的底 層驅動。為了能將酶標儀所檢測的數據保存到外設(如U 盤、移動硬盤)中,研究了對應的文件系統和 UFI 傳輸協議, 實現了對 FAT 文件系統的海量存儲設 備的讀寫。同時,為了打印霉標儀的檢測結果,研究了EPSO 打印機的 ESC/P打印語言,實現了 EPSON C6 系列、C65 系列、ME1 打印機基于 USB 通訊的嵌入 式打
4、印機驅動。2 嵌入式 USB 主機的硬件設計酶標儀的硬件平臺核心為三星公司的 S3C44B0X(主頻最高可達 66MHZ,它集成了 ARM7TDM 核, LCD控制器, 是一款適用于中端應用的微控制器。 系統擴展包括: 存儲器 ( 8MB SRAM 2MBFlash)、USBi 從機(SL811HS 和按鍵等硬件資源。其中 USB 部 分硬件連接如圖 1所示。圖 1:硬件連接圖SL811HS 是 Cypress 公司推出的一款嵌入式 USB Host/S1ave 芯片。支持 USB1.1 的全速和低速設備。 提供USB 主機的硬件接口及總線管理的物理機制。帶有在片的SIE 和 USB 發送器以
5、及在片的根集線器 Hub。因此,滿足了嵌入式 USB 主機系統所需要的功能,即由主機接口芯片來完成總線底層物理數據包的發送、接收 , 并能檢測總線狀 態,發出中斷請求。所以, 選擇 SL811HS 作為本系統的 USB 接口芯片是合適 的。 如圖 2所示,ARM!過 Cs3 片選 SL811HS 來確定 SL811HS 的基地址。D0-D7 為數據和地址的復用線,并通過 A0 來區分,當 A0 為“0”的時候,D0- D7 上傳輸的是偏移地址;反之,當 A0 為“1”的時候,D0-D7 作為數據線用。3 嵌入式 USB 主機的軟件設計3.1 嵌入式 USB 主機的軟件總體框架系統的軟件平臺核心
6、為 µC/OS-II ,它是一個源碼公開的、占先式多任務 管理的實時操作系統內核,其性能完全可與許多商業產品競爭,已在相當多的 系統中得到成功應用,是一個經實踐證明穩定可靠的內核,且其核心代碼短小 精悍,簡單易學。USB 主機為 USB 系統提供的功能有: 檢測 USB 外設的接入和移出; (2) 管理主機和外設之間進行的 USB 標準流量控制; (3) 枚 舉外設; (4) 管理主機和外設之間的數據流; (5) 搜集系統狀態和性能的統 計信息;(6)主機與外設之間的電氣接口,包括供電。USB 協議規定了人機接口設備 HID 類、MassStorage 類、音頻類和打印類等
7、一系列的設備類型,用于支持不同的設備。根據實際需要,我們開發了USB 接口的海量存儲類設備和基于 ESC/P 打印語言的 EPSO 打印機嵌入式驅動程序。具體驅動程序棧如圖 2 所示。該系統支持熱插拔,可以知道識別插上是哪種設備,并調用對應的驅 動。圖2: USB 驅動程序棧3.2 USB Mass Storage 類協議框架的實現 USB Mass Storage 類是 USB 協議所定義的用來磁盤管理及大容量數據 傳輸的。USB 定義了兩種海量存儲傳輸協議,它們分別是Buck-o nly Tran sport和 Control/Bulk/Interrupt(CBI) Transport。由
8、于目前市場上所出現的海量存儲設備基本上都采用前者傳輸協議,即讀寫數據都是通過塊傳輸來實現通 訊。在命令包 CBW (Comma nd Block Wrapper)中包含了標志信息,數據長度 以及 UFI 命令等信息。其中 UFI 命令含有格式化磁盤、讀磁盤、寫磁盤和讀磁 盤容量等一系列磁盤管理命令。大部分移動存儲設備都采用 FAT 文件系統來管理文件。整個文件系統通過 Mass Storage 的 UFI 命令與外設的磁盤建立 聯系。FAT 文件系統將海量存儲設備上的數據大致分成5 個部分:MBR 區(主引導區)、DBR 區 (系統引導區)、FAT 區(文件分配表)、FDT 區(文件目錄 表)
9、和 DATA區(數據區)。當有 USB 接口的海量存儲設備插上后,系統讀取 MBR 區和 DBR 區來獲得每扇區字節數,每簇扇區數,FAT 表個數等文件系統基本 信息。獲取這些基本信息后從海量存儲設備讀取一個文件的流程如圖 3 示。因 寫文件和讀文件的流程沒有很大的差別,在此就不累述了。圖 3 讀文件流程圖 3.3 基于 ESC?P 打印控制語言的打印機驅動設計EPSO 公司的打印機基本上都是基于 ESC?P 打印控制語言的,不同系列的打印機的控制語言 沒有太大的差別。因此,我們開發的驅動程序具有比較強的通用性,針對 EPSO 的 C63系列打印機開發的驅動完全適用 C65 系列和 ME1 打
10、印機。各種型號打印機的編程手冊可以到 EPSON 勺開發網站上下載。編程手冊對各種控 制命令作了詳細介紹,如初始化打印機( ESC )、選擇圖形方式( ESC (C 光 柵圖像命令(ESC.c v h m 8943;dk )等。EPSO 打印機提供兩種打印方式,一種是用來打印文本文件,用該方式打印英文字母、阿拉伯數字、符合的 時候向打印機發對應的控制命令后,只要直接發打印內容的 ASCII 碼即可。另 一種方式是用來打印光柵圖形,當需要打印表格、圖片和漢字的時候時往往會 用到這種方式。在此,列出幾個關鍵 API 函數并予已說明: print_image_init ( void ) :因為打印機
11、初始化后默認為打印文本模式,所以 要打印光柵圖形必須進行相關的初始化。print_image_command(unsignedint horiz_position,unsigned int verti_position, unsigned char rows, unsigned intcolumns, char color) :調用該函數之前必須事先至少調用過一 次 print_image_init (),它的功能是向打印機發打印圖片命令。其中,第一 和第二個輸入參數是打印圖形的橫縱坐標,第三和第四個輸入參數分別是打印圖形的行數和列數(特別值得注意的是,C63 系列和 C65 系列打印機一次最
12、多可打 16 行, 而 EPSON M 一次只能打 15 行), 第五個輸入參數 color 是選擇 打印顏色。在調用該函數后,直接向打印機發打印的數據就可以實現打印圖片 功能了。迎訪問無由電子開發網(技術文章 在線閱讀 在線商城 由于打印 文本模式和打印圖形的操作基本相同,而且更簡單,在此就不作說明。3.4 USB 協議的實現這是整個 USB 體系軟件的根基,它負責主機和設備之間數據傳輸。其代碼都包含在文件 sl811host.c 中,可供上層驅動調用的 API 函數主要有:EnumUsbDev():該函數主要實現枚舉設備的功能。當有USB 設備插上時,系統通過調用到該函數得到設備的標準描述
13、符(接口、配 置、端點)并識別是海量存儲設備還是打印機。設置地址( SetAdress ),設置 配置描述符( SetDecriptor ),設置配置值( SetConfiguration ),設置接口(SetInteface )也在該函數里實現。BuckSend():該函數主要實現主機上的數據通過塊傳輸方式發送到設備上;BuckReceive ():塊傳輸接受函數;BuckSend()和 BuckReceive ()兩個函數是最調度最平凡的兩個函數,因為對海量存儲設備的讀寫,對打印機發送控制命令、打印數據都是 通過塊傳輸通訊的,也就是通過調用這兩個函數來實現的。處理器讀寫SL811HS 單個
14、寄存器或數據存儲器的函數如下:void SL811Write(char a,char d) SL811_ADDR = a; SL811_DATA = d; char SL811Read(char a) SL811_ADDR = a; return (SL811_DATA);這兩個函數是 ARM 處理器和 SL811 芯片進行數據交互的基石,所有控制寄存器 和數據存儲器的讀寫都可以通過以上兩個函數來實現。當需要連續讀寫 SL811 中的儲存器時可以采用以下方式來實現,可以加快讀寫速度。voidSL811BufWrite(BYTE addr, BYTE s, BYTE c)SL811H_ADDR = addr;while (c-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論