999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

EBoot下USB下載功能的實現

2008-04-12 00:00:00左成兵戚隆寧
現代電子技術 2008年24期

摘 要:在基于WinCE構建的嵌入式系統中EBoot下載功能尤為重要。EBoot原始方案中具有網口與串口下載的實現而缺乏通過USB進行下載的功能。在USB功能單元層次上提出一種數據傳輸協議,并基于此協議在SEP5010嵌入式平臺上實現EBoot下的USB數據傳輸,從而實現EBoot對USB下載功能的支持。實驗結果表明,該方案可以達到799 kB/s的數據平均傳輸速度,在不增加額外電路的前提下實現了SEP5010平臺上EBoot的USB數據下載功能。

關鍵詞:USB;SEP5010;鏡像下載;EBoot

中圖分類號:TP391文獻標識碼:B

文章編號:1004-373X(2008)24-054-04

Realization of Download Function in EBoot through USB

ZUO Chengbing,ZHANG Bin,QI Longning,ZHANG Meng

(National ASIC System Engineering Research Center,Southeast University,Nanjing,210096,China)

Abstract:EBoot download function is particularly important in the WinCE-based embedded system.Network and UART are two extensively used download methods,while USB download is not emphasized on.This paper gives a data transfer protocol on the functionality layer of USB client framework,and implements the data transportation using USB interface integrated in the SEP5010 chip.Accordingly,USB download for EBoot works perfect.The experiment shows that fast transmission is achieved by 799 kB/s on average,therefore USB download function of EBoot on SEP5010 platform without increasing circuit complexity is realized.

Keywords:USB;SEP5010;image download;EBoot

1 引 言

嵌入式系統開發一般采用宿主機-目標機的形式,開發人員在宿主機上搭建開發環境完成對目標機的開發和調試。目標機上電后通常會運行一段加載操作系統的程序,稱之為bootloader。Bootloader一般還具有鏡像下載功能,即通過RS 232串口、網絡接口、USB總線等從宿主機下載數據到目標機內存中。開發中經常需要傳輸的數據是操作系統鏡像,在Windows CE開發中,往往還需要下載數十兆的操作系統鏡像到內存中進行調試,因此鏡像下載功能對數據傳輸的效率要求較高。

選擇鏡像下載的硬件接口需要考慮其配置復雜程度和下載速度。通常下載方式有3種:網口下載、串口和USB下載。對于網絡下載方式,雖然下載速度較快,但由于一般SoC芯片內部都不集成網卡模塊,因此需要添加額外的網絡控制芯片,增加了電路的成本和復雜度。對于串口下載方式,RS 232串口的數據傳輸協議中速度相對較快的Xmodem協議在115 200 b/s的波特率下實測的傳輸速率也僅在30 kb/s左右,對數十兆的文件傳輸需求來說這樣的速度不能滿足要求。而SoC芯片通常都自帶了USB Device控制器,這使得USB連接的配置很簡單,USB接口通常工作在12 Mb/s的全速模式下,彌補了串口的缺點。因此,USB接口的下載方式較為理想。

本文在WinCE的Bootloader:EBoot (Ethernet BootLoader)的基礎上,提出了一種基于USB的下載方案,并在東南大學國家專用集成電路系統工程技術研究中心Garfield系列SEP5010處理器平臺上基于其USBD(USB Device )控制器予以實現。

2 系統平臺概述

EBoot是基于Windows CE平臺的系統上電后運行的一段程序,功能上類似于PC上的BIOS,用于將系統的軟硬件環境帶到一個合適的狀態并把操作系統加載到內存中。EBoot包含2種不同的操作模式:啟動加載模式和下載模式。在啟動加載模式下,EBoot從目標機上的某個存儲設備上將操作系統加載到內存中運行。而工作于下載模式下的EBoot通常都會向開發人員提供一個簡單的命令行接口,這個命令行接口支持的命令通常包括下載eboot.bin鏡像或nk.bin鏡像等文件、對FLASH等固態存儲設備的擦寫和編程、保存全局變量到固態存儲設備中等。

EBoot通過以太網下載操作系統的一般步驟是:首先,利用EBoot把宿主機上的nk.bin下載到硬件開發板上從特定地址開始的一段內存之中。然后,EBoot開始運行操作系統。

SEP5010是基于ARM926EJ-S內核的SoC芯片,它集成了多個外圍模塊,USBD(USB Device )模塊便是其中之一。它提供了SEP5010與主機的接口,具有如下特點:兼容USB 1.1 協議、USBD 外掛異步FIFO ,發送和接受FIFO 都為32×16、DMA 傳輸方式。

本文中的硬件連接簡單地采用了點對點的連接。一邊為宿主機,一邊為待調試的目標機。硬件連接如圖1所示。

在圖1中USB_P和USB_N是SEP5010提供的引腳,為了連接時能檢測到主機的復位,需要使用兩根GPIO口來進行電平檢測,一根是USB_INT,另一根是USB_X。USB_INT GPIO引腳是用來檢測USB設備是否復位的。USB_X GPIO口的作用提供給USB D+上拉電阻,用來告訴主機該設備是全速設備。

3 系統軟件實現

數據傳輸是主機和設備端兩方的軟件相配合完成的,整個傳輸過程可視為一個設備端驅動的過程。傳輸開始時,設備端發起傳輸請求,得到響應后設備端再發數據包請求,得到所有的包后傳送結束。主機所需要做的是配合設備端完成數據傳輸。因此本文將分別介紹USB主從機端的軟件設計。

3.1 數據傳輸協議

在USB協議中,批量傳輸的通道稱為流通道,USB協議對流通道的數據格式并無嚴格要求,在本文實現方案中,為了對流通道的數據進行校驗,采用了數據幀頭加數據幀的數據傳輸協議,如圖2所示。

在圖2中數據幀頭的大小是8個字節,其中字節0到字節3為幀頭簽名,其值恒為55h,53h,42h,46h,即字符串“USBF”,字節4標志了幀頭后面的數據幀類型。這里共定義了3種類型:

(1)Boot REQ:此時后面數據幀為1個固定的數據結構,它是由設備向主機發送,請求開始傳輸數據;

(2)Boot ACK:此時后面的數據幀為ACK類型;它是主機接收到Boot REQ請求后向設備發送的,表明主機已準備好向設備發送數據;

(3)Data REQ:此時后面的數據幀為傳輸數據幀,它是由主機發送給PMP_GPS(目標機)的。數據幀的前4個字節為幀號,后面為真正的傳輸數據。

字節5保留,字節6到字節7表示后面所跟數據幀的大小。

3.2 USB設備端方案

SEP5010芯片的USB寄存器讀寫方式較為特殊。 對于偏移地址0xD0~0xE0,0x200,0x300的寄存器,可以直接讀寫;對于其它偏移地址的寄存器,要使用以下方法:

(1) 讀操作時應先將usb_readflag寄存器置1,然后讀指定寄存器直到讀成功標志位為1(第30位為1)才可進行下一步操作;

(2) 寫操作時應先將數據寫入指定寄存器,然后讀指定寄存器直到寫成功標志位為1(第31 位為1)才可進行下一步操作;

(3) 對寄存器類型為Shadow 的寄存器進行讀寫時,需要對usb_applock寄存器的第0位軟件置1,然后再對shadow寄存器進行操作,操作完成后對usb_applock寄存器的第0位軟件置0;

(4) usb_txfifo和usb_rxfifo必須按16拍Burst進行讀寫;

在USB端的實現方案中,首先進行的是USB控制傳輸,如果控制傳輸完成,則進入USBBulk傳輸階段,USB端的整體流程如圖3所示。

3.2.1 USB控制傳輸

USB協議規定控制傳輸必須由端點0完成。控制傳輸中,SETUP事務將產生中斷,軟件讀取USB接口電路的控制端點寄存器,判斷主機的標準請求類型,SEP5010中USB接口電路將對主機發的GetDescriptor和SetConfiguration兩個標準請求產生中斷。對于其它的包括SetAddress在內10個USB標準請命令都有USB硬件自動處理,并且,硬件對于這10個命令也不會產生中斷到用戶空間,因此這些命令不需軟件干涉。

SETUP包標志著端點配置過程的開始,在配置過程中如果遇到異常或主機重新發SETUP包,軟件將重新進入端點配置過程。在主機發GetDescriptor請求時,設備端解析命令并發送相應的描述符給主機,主機端收到所有的描述符后就發送SetConfiguration請求,由于本設計采用的是輪詢方式,故收到SetConfiguration請求后,只要清除相應的中斷狀態位,并置全局變量g_BIsSetConfiguration 為TRUE,標志USB控制傳輸完成。USB控制傳輸流程如圖4所示。

特殊的是在SEP5010中,當主機要求的包長度大于設備返回的包長度時,如果所有數據都發送完畢后,主機仍要求設備發送數據,就通過給寄存器usb_ep0outstat(USB端點0輸出狀態寄存器)寫值0x2a,當主機端再發IN包給設備端時,設備端就會給主機發ZLP(Zero Length Packet),這樣主機收到這個零長度包后就會結束本次傳輸事務。

3.2.2 bulk傳輸

USB設備端在控制傳輸完成后向主機發送boot請求,然后等待主機回送ACK信號。如果設備未收到ACK信號,則返回重新發送boot請求,;否則檢查數據幀號變量的值是否小于等于MAX_NUM(文件的最大幀號);如果大于,那么就結束傳輸,否則向主機發送本次要傳輸的數據幀號,然后接收主機端發來的數據,接收完畢后把數據幀號的的值加1,表示下一次將要傳輸的數據是下一個數據幀;再次檢查數據幀號的值,如小于等于MAX_NUM,則向主機發送下次要傳輸的數據幀號,然后接收數據,如此反復,直到所有數據都傳輸完畢。USB Bulk傳輸流程如圖5所示。

3.3 USB主機端方案

主機端使用的應用軟件是自行開發的Usbdown,該軟件通過微軟的ActiveSync底層軟件驅動USB,接受并解析設備端發過來的數據包,根據相應的數據包包頭發送相應的數據給USB設備端,Usbdown軟件是使用 Visual C++開發的,Usbdown軟件采用了面向對象程序設計方法,在設計中,定義了一個USB Device類,該類部分定義如下:

class CUsbDevice

{

protected:

HANDLEm_hDevice;HANDLEm_hFile;HWNDm_hwndMessage;CRITICAL_SECTIONm_csTransfer;

BOOL ReadData(LPBYTE pbFrame,USHORT cbFrame);

public:

CUsbDevice();

virtual ~CUsbDevice();

void Cleanup();

DWORD WaitforBlockAck();

BOOL SendBlock(DWORD FrameNum);

IntGetByteSend()

{returnm_dwByteSend; }

DWORD GetFileLength()

{returnm_dwFileSize; }

};

在子對話框的初始化函數中,創建一個發送線程CDownDlg::SendThd,該線程的主要作用是發送文件給USB設備端。下簡要介紹Usbdown的工程流程,打開Usbdown軟件后,應用程序就啟動了發送線程,發送線程首先等待USB設備端發來boot請求;如未收到,則一直等待boot請求,當收到boot請求后跳出該循環,接著向USB設備端發送ACK信號;如發送不成功,則繼續發送該信號,直到發送成功,發送成功后就檢查上一次收到的數據幀號是否小于MAX_NUM,如果大于等于,那么就結束數據傳輸,否則接收數據幀號并解析之,然后發送相應的數據幀給USB設備端,本數據幀發送完畢后就進行下一次的數據傳輸,一直到整個文件傳輸結束。發送線程的流程圖如圖6所示。

Usbdown軟件運行后,會要求用戶選擇要下載的文件,僅可以選擇BIN格式的鏡像文件;如內核鏡像nk.bin或Bootloader的鏡像eboot.bin,當選擇好鏡像文件后,點擊下載按鈕,程序就開始下載文件,其下載文件截圖如圖7所示。

4 性能比較

在實現USB主從機端的軟件設計后,為了對采用USB接口下載鏡像效率的提升的評估,本文特進行了串口與USB接口下載速度的比較,共進行4次試驗,記錄下每次的值并算出平均值后得出的結論如表1所示。從表中可以看出,USB接口下載平均速度達到了799 kB/s。滿足了系統開發中對EBoot下載鏡像速度的要求。

5 結 語

本文分析了在EBoot下通過USB接口下載鏡像文件的USB主從機端的軟件實現,在USBD功能單元層上定義了簡單的數據傳輸協議,并配置了SEP5010的USBD模塊完成了EBoot下宿主機到目標機的數據傳輸。該下載方案已經應用于一款PMP_GPS的開發中,傳輸速度達到了799 kB/s,方便了該產品的開發調試,并且對相關的嵌入式系統開發也具有一定的參考意義。

參考文獻

[1]國家專用集成電路工程技術研究中心.SEP5010用戶手冊,2004.

[2]Anon Universal Serial Bus Specification Revision 2.0.http://www.usb.org/developers/docs/,2006.

[3]張冬泉.Windows CE實用開發技術.北京:電子工業出版社,2006.

[4]肖踞雄.USB技術及應用設計.北京:清華大學出版社,2003.

[5]Johnson M Hart.Windows系統編程.安娜,吳明軍,譯.北京:機械工業出版社,2006.

[6]周毓林.Windows CE.NET內核定制及應用開發.北京:電子工業出版社,2005.

[7]佚名.Windows CE下驅動程序開發基礎.http://www.Knowsky.com/16691.html,2007.

[8]微軟公司.Microsoft Windows CE設備驅動程序開發指南.北京:北京希望電子出版社,1999.

[9]尤晉元,史美林.Windows 操作系統原理.北京:機械工業出版社,2001.

[10]陳向群,馬洪兵.Windows CE.NET系統分析及實驗教程.北京:機械工業出版社,2003.

[11]Peter Norton,Rob McGregor.MFC開發Windows 95/NT 4應用程序.孫鳳英,譯.北京:清華大學出版社,1998.

作者簡介 左成兵 男,1982年出生,碩士研究生。研究方向為電路與系統、嵌入式系統設計。

張 彬 男,1982年出生,碩士研究生。研究方向為嵌入式系統設計。

戚隆寧 男,1979年出生,博士研究生。研究方向為嵌入式系統低功耗技術。

張 萌 男,1964年出生,東南大學電子科學與工程學院副教授。

主站蜘蛛池模板: 黄片一区二区三区| 91九色最新地址| 久久久久久久久久国产精品| 日韩中文精品亚洲第三区| 五月六月伊人狠狠丁香网| 国产99欧美精品久久精品久久| 重口调教一区二区视频| 91精品人妻互换| 男女性午夜福利网站| 91色在线视频| 国产91视频观看| 在线视频亚洲欧美| 天天躁夜夜躁狠狠躁躁88| 国内精品九九久久久精品| 国产欧美日韩va另类在线播放| m男亚洲一区中文字幕| 亚洲日韩精品伊甸| 在线国产毛片| 欧美日韩国产在线观看一区二区三区| 成人国产精品一级毛片天堂| 国产激情无码一区二区APP| 欧美翘臀一区二区三区| 在线无码九区| 天堂网国产| 欧美激情综合| 久草美女视频| 欧美亚洲另类在线观看| 久久99久久无码毛片一区二区| 亚洲av无码久久无遮挡| 国产一级裸网站| 国产综合精品一区二区| 亚洲a免费| a毛片在线免费观看| 中文字幕第4页| 97成人在线视频| 精品午夜国产福利观看| www.99精品视频在线播放| 久久熟女AV| 天天色综网| 亚洲精品视频免费| 黄色网页在线播放| 老色鬼欧美精品| 色噜噜狠狠狠综合曰曰曰| 国产91高跟丝袜| 极品私人尤物在线精品首页 | 午夜精品久久久久久久无码软件| 国产精品3p视频| 国产SUV精品一区二区| 国内精品久久九九国产精品| 日韩成人高清无码| 四虎永久在线精品影院| 狠狠做深爱婷婷久久一区| 精品久久国产综合精麻豆| 国产成年女人特黄特色毛片免 | 一本大道在线一本久道| 极品尤物av美乳在线观看| 成人精品亚洲| 久草性视频| 久久国产精品娇妻素人| 亚洲欧美一区二区三区蜜芽| 亚洲69视频| 天天摸夜夜操| 国产精品嫩草影院视频| 国产精品一老牛影视频| 国国产a国产片免费麻豆| 日韩无码真实干出血视频| 亚洲人人视频| 18黑白丝水手服自慰喷水网站| 免费无遮挡AV| 亚洲一区毛片| 日韩欧美综合在线制服| 999精品色在线观看| 国产香蕉一区二区在线网站| 日韩人妻少妇一区二区| 毛片基地视频| 在线观看精品国产入口| 亚洲欧美不卡视频| 国产一在线| 国产成人免费视频精品一区二区| 在线视频一区二区三区不卡| 亚洲视频免费播放| 国产成熟女人性满足视频|