亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        EBoot下USB下載功能的實現(xiàn)

        2008-04-12 00:00:00左成兵戚隆寧
        現(xiàn)代電子技術(shù) 2008年24期

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

        關(guān)鍵詞:USB;SEP5010;鏡像下載;EBoot

        中圖分類號:TP391文獻(xiàn)標(biāo)識碼: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 引 言

        嵌入式系統(tǒng)開發(fā)一般采用宿主機-目標(biāo)機的形式,開發(fā)人員在宿主機上搭建開發(fā)環(huán)境完成對目標(biāo)機的開發(fā)和調(diào)試。目標(biāo)機上電后通常會運行一段加載操作系統(tǒng)的程序,稱之為bootloader。Bootloader一般還具有鏡像下載功能,即通過RS 232串口、網(wǎng)絡(luò)接口、USB總線等從宿主機下載數(shù)據(jù)到目標(biāo)機內(nèi)存中。開發(fā)中經(jīng)常需要傳輸?shù)臄?shù)據(jù)是操作系統(tǒng)鏡像,在Windows CE開發(fā)中,往往還需要下載數(shù)十兆的操作系統(tǒng)鏡像到內(nèi)存中進(jìn)行調(diào)試,因此鏡像下載功能對數(shù)據(jù)傳輸?shù)男室筝^高。

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

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

        2 系統(tǒng)平臺概述

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

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

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

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

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

        3 系統(tǒng)軟件實現(xiàn)

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

        3.1 數(shù)據(jù)傳輸協(xié)議

        在USB協(xié)議中,批量傳輸?shù)耐ǖ婪Q為流通道,USB協(xié)議對流通道的數(shù)據(jù)格式并無嚴(yán)格要求,在本文實現(xiàn)方案中,為了對流通道的數(shù)據(jù)進(jìn)行校驗,采用了數(shù)據(jù)幀頭加數(shù)據(jù)幀的數(shù)據(jù)傳輸協(xié)議,如圖2所示。

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

        (1)Boot REQ:此時后面數(shù)據(jù)幀為1個固定的數(shù)據(jù)結(jié)構(gòu),它是由設(shè)備向主機發(fā)送,請求開始傳輸數(shù)據(jù);

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

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

        字節(jié)5保留,字節(jié)6到字節(jié)7表示后面所跟數(shù)據(jù)幀的大小。

        3.2 USB設(shè)備端方案

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

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

        (2) 寫操作時應(yīng)先將數(shù)據(jù)寫入指定寄存器,然后讀指定寄存器直到寫成功標(biāo)志位為1(第31 位為1)才可進(jìn)行下一步操作;

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

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

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

        3.2.1 USB控制傳輸

        USB協(xié)議規(guī)定控制傳輸必須由端點0完成??刂苽鬏斨校琒ETUP事務(wù)將產(chǎn)生中斷,軟件讀取USB接口電路的控制端點寄存器,判斷主機的標(biāo)準(zhǔn)請求類型,SEP5010中USB接口電路將對主機發(fā)的GetDescriptor和SetConfiguration兩個標(biāo)準(zhǔn)請求產(chǎn)生中斷。對于其它的包括SetAddress在內(nèi)10個USB標(biāo)準(zhǔn)請命令都有USB硬件自動處理,并且,硬件對于這10個命令也不會產(chǎn)生中斷到用戶空間,因此這些命令不需軟件干涉。

        SETUP包標(biāo)志著端點配置過程的開始,在配置過程中如果遇到異?;蛑鳈C重新發(fā)SETUP包,軟件將重新進(jìn)入端點配置過程。在主機發(fā)GetDescriptor請求時,設(shè)備端解析命令并發(fā)送相應(yīng)的描述符給主機,主機端收到所有的描述符后就發(fā)送SetConfiguration請求,由于本設(shè)計采用的是輪詢方式,故收到SetConfiguration請求后,只要清除相應(yīng)的中斷狀態(tài)位,并置全局變量g_BIsSetConfiguration 為TRUE,標(biāo)志USB控制傳輸完成。USB控制傳輸流程如圖4所示。

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

        3.2.2 bulk傳輸

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

        3.3 USB主機端方案

        主機端使用的應(yīng)用軟件是自行開發(fā)的Usbdown,該軟件通過微軟的ActiveSync底層軟件驅(qū)動USB,接受并解析設(shè)備端發(fā)過來的數(shù)據(jù)包,根據(jù)相應(yīng)的數(shù)據(jù)包包頭發(fā)送相應(yīng)的數(shù)據(jù)給USB設(shè)備端,Usbdown軟件是使用 Visual C++開發(fā)的,Usbdown軟件采用了面向?qū)ο蟪绦蛟O(shè)計方法,在設(shè)計中,定義了一個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; }

        };

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

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

        4 性能比較

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

        5 結(jié) 語

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

        參考文獻(xiàn)

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

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

        [3]張冬泉.Windows CE實用開發(fā)技術(shù).北京:電子工業(yè)出版社,2006.

        [4]肖踞雄.USB技術(shù)及應(yīng)用設(shè)計.北京:清華大學(xué)出版社,2003.

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

        [6]周毓林.Windows CE.NET內(nèi)核定制及應(yīng)用開發(fā).北京:電子工業(yè)出版社,2005.

        [7]佚名.Windows CE下驅(qū)動程序開發(fā)基礎(chǔ).http://www.Knowsky.com/16691.html,2007.

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

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

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

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

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

        張 彬 男,1982年出生,碩士研究生。研究方向為嵌入式系統(tǒng)設(shè)計。

        戚隆寧 男,1979年出生,博士研究生。研究方向為嵌入式系統(tǒng)低功耗技術(shù)。

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

        丰满人妻被黑人猛烈进入| 亚洲天堂av在线免费观看| 精品人妻系列无码人妻漫画| 久久精品国产色蜜蜜麻豆 | 久久亚洲av午夜福利精品西区| 99久久99久久久精品蜜桃| 亚洲国产天堂久久综合| 亚洲熟妇av乱码在线观看| 无码一区二区丝袜| 少妇高潮精品在线观看| 亚洲男同gay在线观看| 国精产品一区二区三区| 亚洲日韩成人无码不卡网站 | 国产一区二区三区视频网| 一个人看的视频www免费| 麻豆五月婷婷| av高清视频在线麻豆免费观看| 99re66在线观看精品免费| 无码人妻av一区二区三区蜜臀 | 国产一区,二区,三区免费视频| 丝袜美腿人妻第一版主| 日韩人妻一区二区三区蜜桃视频 | 免费观看18禁无遮挡真人网站| 国产日韩成人内射视频| 日韩人妻系列在线视频| 国产高清在线视频一区二区三区 | 国产精品国语对白露脸在线播放| 国产一区二区亚洲av| 日韩精品一区二区三区在线视频| 熟女体下毛毛黑森林| 国产AV国片精品有毛| 亚洲av无吗国产精品| 亚洲av无码一区二区三区网址| 激情97综合亚洲色婷婷五| a级大胆欧美人体大胆666| 无码av免费永久免费永久专区| 日本熟妇裸体视频在线| 男人扒开女人双腿猛进视频| 国产av无码专区亚洲av| 黑丝美女被内射在线观看| 开心五月婷婷激情综合网|