《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > VxWorks5.5下電子盤DMA驅(qū)動程序設(shè)計(jì)與實(shí)現(xiàn)
VxWorks5.5下電子盤DMA驅(qū)動程序設(shè)計(jì)與實(shí)現(xiàn)
2016年電子技術(shù)應(yīng)用第11期
尹加豹
江蘇自動化研究所,,江蘇 連云港222061
摘要: 在嵌入式實(shí)時(shí)操作系統(tǒng)中,經(jīng)常需要實(shí)時(shí)讀寫硬盤數(shù)據(jù),,為了提高VxWorks5.5系統(tǒng)下IDE電子盤讀寫速度,提出了一種基于ICH7-M南橋芯片的DMA模式驅(qū)動軟件的設(shè)計(jì)方法,。該方法采用風(fēng)河公司提供的磁盤驅(qū)動程序框架,,設(shè)計(jì)了新的讀寫接口函數(shù),新驅(qū)動遵循ATA-6接口協(xié)議并采用UDMA2傳輸模式,,可使電子盤讀寫速度提高十余倍,。應(yīng)用結(jié)果表明,該方法運(yùn)行穩(wěn)定,,系統(tǒng)的實(shí)時(shí)性提高,,充分發(fā)揮了電子盤性能。
關(guān)鍵詞: VxWorks5.5 DMA 電子盤 驅(qū)動
中圖分類號: TP336
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.009
中文引用格式: 尹加豹. VxWorks5.5下電子盤DMA驅(qū)動程序設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2016,,42(11):40-43.
英文引用格式: Yin Jiabao. Development of flash disk DMA driver on VxWorks5.5 operating system[J].Application of Electronic Technique,2016,,42(11):40-43.
Development of flash disk DMA driver on VxWorks5.5 operating system
Yin Jiabao
Jiangsu Automation Research Institute,,Lianyungang 222061,China
Abstract: In the embedded real-time operating system, reading and writing hard disk data are common. To improve the reading and writing speeds of Integrated Drive Electronics(IDE) Flash disk, a new Direct Memory Access(DMA) driver of south bridge chipset ICH7-M is introduced. This driver uses the hard disk driver framework provided by the WindRiver company and designs new reading and writing functions. This new driver follows the Advanced Technology Attachment with Packet Interface-6(ATA/ATAPI-6) protocol and Ultra DMA Mode-2(UDMA2) is used to read and write. The test result shows that the speed is scaled up more than 10 times, and real-time of the system is improved. This driver is stable and takes full advantage of IDE Flash disk.
Key words : VxWorks5.5,;DMA,;Flash disk;driver

0 引言

    電子盤又稱電子硬盤,,它采用符合硬盤接口技術(shù)(Advanced Technology Attachment,,ATA)工業(yè)標(biāo)準(zhǔn)的控制技術(shù),克服了傳統(tǒng)機(jī)械硬盤的弊病,,能夠提供高性能和高可靠的數(shù)據(jù)儲存,,被廣泛應(yīng)用于工業(yè)控制、軍工,、航空航天等領(lǐng)域[1],。VxWorks是風(fēng)河公司開發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng),其中VxWorks5.5版本具有較高的可靠性和卓越的實(shí)時(shí)性,,在很多領(lǐng)域都有廣泛的應(yīng)用[2],。但是VxWorks5.5系統(tǒng)原生電子盤驅(qū)動僅支持過程輸入輸出(Process Input Output,PIO)方式,,存取速度較慢,,無法滿足某些應(yīng)用的實(shí)時(shí)性要求,需要設(shè)計(jì)基于直接存儲器存?。―irect Memory Access,,DMA)方式的驅(qū)動,以提升電子盤讀寫速度,,擴(kuò)展其應(yīng)用領(lǐng)域,。

1 硬件環(huán)境

    硬件平臺為中船重工第七一六研究所生產(chǎn)的CM6066單板加固計(jì)算機(jī),。該計(jì)算機(jī)主板采用Intel Core Duo L2400/L2500低功耗處理器, 配以Intel 945GM芯片組,南橋芯片為ICH7-M(82801GBM),,提供的接口包括SATA,、ATA/IDE、USB2.0,、千兆以太網(wǎng)及串口等,,主要功能框圖見圖1。

qrs1-t1.gif

    該計(jì)算機(jī)模塊搭載的電子盤為源科公司生產(chǎn)的飛龍V系列閃存硬盤,,它采用NandFlash閃存芯片,,基于標(biāo)準(zhǔn)的ATA/IDE端口,支持ATA-6協(xié)議,。

2 硬盤工作原理分析

    硬盤的讀寫是一個(gè)復(fù)雜的過程,,它涉及到硬盤的接口方式、尋址方式,、控制寄存器模型等,。硬盤的存儲介質(zhì)也從最初的磁性材料、光磁介質(zhì)發(fā)展到半導(dǎo)體存儲材料,,但不同硬盤的讀寫方法和尋址方式都一樣,,因?yàn)椴煌脖P都遵循ATA協(xié)議。ATA協(xié)議的最新版本為ATA-8,,ATA-6及之前的版本僅支持IDE接口,,從ATA-7開始,,協(xié)議增加了對SATA接口的支持,。在ATA-6協(xié)議中,硬盤參數(shù)信息共占用512 B,,分為256個(gè)WORD,,表1簡單說明了部分字節(jié)代表的意義。

qrs1-b1.gif

    在ATA-6協(xié)議中,,CPU與硬盤設(shè)備的通信是通過讀寫設(shè)備接口上的寄存器實(shí)現(xiàn)的,。接口寄存器分為兩組,一組為命令塊寄存器,,用于CPU向設(shè)備發(fā)送命令或從設(shè)備讀取狀態(tài),;另一組為控制塊寄存器,用于CPU控制設(shè)備或獲取備用狀態(tài),,如表2所示,。

qrs1-b2.gif

    各接口寄存器功能如下所述:

    數(shù)據(jù)寄存器:用于CPU與硬盤設(shè)備之間的數(shù)據(jù)交換,該種方式即PIO模式,,DMA傳輸不使用該寄存器,;

    錯(cuò)誤寄存器:用于記錄硬盤執(zhí)行命令后的出錯(cuò)信息,;

    特征寄存器:用于存儲命令代碼;

    扇區(qū)計(jì)數(shù)寄存器:用于存儲要讀/寫的扇區(qū)總數(shù),;

    LBA高/中/低8位寄存器:用于LBA尋址,;

    設(shè)備寄存器:用于使能被選設(shè)備并提供配置信息;

    狀態(tài)寄存器:用于記錄硬盤設(shè)備執(zhí)行命令后的狀態(tài),;

    命令寄存器:用于執(zhí)行命令,;

    備用寄存器:其內(nèi)部數(shù)據(jù)與狀態(tài)寄存器相同;

    設(shè)備控制寄存器:用于控制硬盤設(shè)備,。

3 驅(qū)動程序設(shè)計(jì)

3.1 驅(qū)動與文件系統(tǒng)關(guān)系

    VxWorks下的設(shè)備包括字符設(shè)備,、塊設(shè)備和網(wǎng)絡(luò)設(shè)備等,電子盤等存儲設(shè)備屬于塊設(shè)備,,此類型設(shè)備以“塊”為單位進(jìn)行數(shù)據(jù)操作,,可大大提高數(shù)據(jù)的訪問速度,但也帶來了巨大的數(shù)據(jù)維護(hù)工作量,,因此,,塊設(shè)備驅(qū)動程序與I/O系統(tǒng)之間還存在一個(gè)中間層,即文件系統(tǒng)[4],。VxWorks使用的dosFs文件系統(tǒng)是一種與MS_DOS文件系統(tǒng)兼容的文件系統(tǒng),,能夠滿足實(shí)時(shí)應(yīng)用的多種需求[5]。dosFs文件系統(tǒng)以簇為單位讀寫數(shù)據(jù),,每簇包含64個(gè)扇區(qū),,每一個(gè)扇區(qū)(512 B)為一個(gè)存儲塊,所以一次讀寫4 KB數(shù)據(jù)[6],。應(yīng)用程序訪問電子盤數(shù)據(jù)時(shí),,I/O系統(tǒng)會調(diào)用文件系統(tǒng)計(jì)算出相應(yīng)扇區(qū)的地址及數(shù)量,而后文件系統(tǒng)再調(diào)用電子盤驅(qū)動程序訪問電子盤,,完成讀寫操作,。以讀操作為例,具體過程如圖2所示[7],。

qrs1-t2.gif

3.2 初始化

    電子盤在PIO模式下,,僅使用命令塊寄存器中的數(shù)據(jù)寄存器進(jìn)行數(shù)據(jù)交換,傳輸過程十分簡單,,但在DMA模式下需要專用的IDE控制器,,傳輸過程比較復(fù)雜。IDE控制器集成在ICH7-M芯片組中,,是標(biāo)準(zhǔn)PCI設(shè)備,,在256 B的配置空間中,偏移0x20的寄存器配置為IDE主控寄存器組基地址,。主控寄存器組包含3個(gè)寄存器,,分別為主控命令寄存器,、主控狀態(tài)寄存器、物理設(shè)備描述符表指針寄存器,,各寄存器地址映射如表3所示,。

qrs1-b3.gif

    在初始化過程中,首先搜尋PCI-IDE控制器并獲取寄存器基地址,、中斷信號量等信息,,之后分配必要的資源,如同步信號量,、看門狗,、PRDT表等,然后掛接中斷服務(wù)程序,,建立CPU與控制器的連接,。連接成功后首先獲取電子盤參數(shù)信息,然后根據(jù)參數(shù)設(shè)置讀寫傳輸模式和其他一些支持的屬性,,如電源管理,、SMART指令等。在電子盤設(shè)備初始化過程中,,CPU會向設(shè)備發(fā)送指令來進(jìn)行操作,。發(fā)送指令時(shí), CPU先填寫各種指令參數(shù)到相關(guān)寄存器中, 然后向命令寄存器發(fā)送命令字啟動指令, 之后設(shè)備開始執(zhí)行指令[9]

    指令執(zhí)行一般要經(jīng)過以下幾種狀態(tài):

    (1)發(fā)送指令, 進(jìn)入等待狀態(tài),;

    (2)設(shè)備執(zhí)行完指令后發(fā)出中斷,檢驗(yàn)設(shè)備狀態(tài),;

    (3)如狀態(tài)正確, 則進(jìn)行后續(xù)操作;否則返回,。

    設(shè)置數(shù)據(jù)傳輸模式時(shí),,為保證電子盤能夠更高效工作,優(yōu)先選擇UDMA傳輸模式,;若電子盤不支持UDMA,,則選擇MDMA模式,;若不支持MDMA,,則選擇SDMA模式;若不支持SDMA,,則選擇PIO模式,。

3.3 DMA讀寫設(shè)計(jì)

    每一次DMA傳輸都需要設(shè)置一系列寄存器,使得開銷很大,,然而文件系統(tǒng)對硬盤的I/O請求是不連續(xù)的,,物理內(nèi)存中的數(shù)據(jù)也是不連續(xù)的。為了提高傳輸效率,,需要將不連續(xù)的數(shù)據(jù)組合在一起,,再啟用DMA操作,,這些數(shù)據(jù)就能夠一次傳輸完成。為此,,DMA傳輸使用了物理設(shè)備描述符表(Physical Region Descriptor Table,,PRDT),表中的描述符指向內(nèi)存緩沖區(qū)的起始地址和長度,,這樣一次DMA傳輸,,即可將表中記錄的數(shù)據(jù)都傳輸完成,PRDT表結(jié)構(gòu)示意圖如圖3所示,。

qrs1-t3.gif

    在PRDT表中,,每個(gè)描述符占8 B,前4 B指向緩沖區(qū)地址,,后4 B低16 bit表示緩沖區(qū)長度,,地址和長度的第0位必須為0,當(dāng)緩沖區(qū)長度為0時(shí),,數(shù)據(jù)長度為64 KB,,EOT位為緩沖區(qū)結(jié)束標(biāo)志位(為1表示當(dāng)前緩沖區(qū)為最后一個(gè))。當(dāng)執(zhí)行DMA讀時(shí),,控制器將電子盤中扇區(qū)數(shù)據(jù)讀到各個(gè)內(nèi)存緩沖區(qū)中,;當(dāng)執(zhí)行DMA寫時(shí),控制器將各個(gè)緩沖區(qū)中數(shù)據(jù)寫入對應(yīng)的扇區(qū)中,。

    通常情況下,,硬盤的DMA讀寫過程一般需要如下幾個(gè)步驟:

    (1)首先判斷硬盤狀態(tài),當(dāng)其處于就緒狀態(tài)才可以進(jìn)行操作,;

    (2)填寫控制器相關(guān)寄存器指定起始邏輯塊(LBA尋址方式)和扇區(qū)總數(shù),;

    (3)啟動控制器,開始讀寫操作,;

    (4)讀寫完畢后,,提起中斷通知。

    在VxWorks5.5中,,電子盤驅(qū)動讀寫硬盤的接口讀函數(shù)定義為ataBlkRd,,寫函數(shù)定義為ataBlkWrt,讀寫函數(shù)最終調(diào)用ataBlkRW實(shí)現(xiàn)讀寫功能,。該函數(shù)定義為STATUS ataBlkRW(ATA_DEV *pDev,,sector_t startBlk,UINT32 nBlks,,char *pBuf,,int direction)[10]。該接口函數(shù)僅使用PIO模式進(jìn)行讀寫操作,需要使用DMA讀寫模式將其重新實(shí)現(xiàn),。具體過程如下:

    (1)將主控狀態(tài)寄存器的Interrupt及Error位置1,,清除錯(cuò)誤、中斷等狀態(tài)值,;

    (2)設(shè)置主控命令寄存器的R/W位,,讀電子盤時(shí),設(shè)為1,,寫電子盤時(shí),,設(shè)為0;

    (3)將PRDT表地址寫入描述符表指針寄存器,,并根據(jù)緩沖區(qū)地址及長度配置PRDT表,;

    (4)將要傳輸?shù)纳葏^(qū)地址、數(shù)量等信息寫入ATA設(shè)備寄存器,,方法如下:在LBA 48b尋址模式下,,首先將要讀取(寫入)的扇區(qū)數(shù)高8位,、低8位寫入Sector Count寄存器,,然后將LBA(31:24)、LBA(7:0)寫入LBA Low寄存器,;將LBA(39:32),、LBA(15:8)寫入LBA Mid寄存器;將LBA(47:40),、LBA(23:16)寫入LBA High寄存器,;接著配置Device寄存器,其bit 4表示設(shè)備號,,主盤置0,,從盤置1,bit 6表示LBA尋址,,需置1,;最后將操作指令寫入Command寄存器,讀操作指令為0x25,,寫操作指令為0x35,;

    (5)主控命令寄存器的Start/Stop位置1,開啟DMA傳輸,;

    (6)待傳輸結(jié)束后,,硬盤發(fā)出一個(gè)中斷請求,,PCI-IDE控制器隨之向CPU提起中斷,;

    (7)響應(yīng)中斷后,將主控狀態(tài)寄存器的Interrupt位置1,清除中斷信息,;

    (8)最后將主控命令寄存器的Start/Stop位置0,,關(guān)閉DMA傳輸。

4 試驗(yàn)結(jié)果與分析

    在CM6066單板加固計(jì)算機(jī)(南橋芯片為ICH7-M,,即82801GBM)上測試新設(shè)計(jì)的DMA模式驅(qū)動,,測試結(jié)果顯示可成功讀寫電子盤文件,接著對讀寫速度進(jìn)行測試,,并與原生PIO方式驅(qū)動的讀寫速度進(jìn)行對比,。測試方法如下:采用系統(tǒng)自帶函數(shù)tickGet()進(jìn)行計(jì)時(shí),測試寫速度時(shí)將一段內(nèi)存數(shù)據(jù)(200 MB)寫入電子盤中,;測試讀速度時(shí)將電子盤中文件(200 MB)讀入內(nèi)存中,,由此可計(jì)算出讀寫速度[11]。分別使用兩種驅(qū)動進(jìn)行測試,,結(jié)果表明,,采用DMA方式的驅(qū)動可顯著提升電子盤讀寫速度,具體數(shù)值見表4,。

qrs1-b4.gif

5 結(jié)束語

    本文開展的基于VxWorks5.5系統(tǒng)的電子盤DMA驅(qū)動軟件的研究具有很大的實(shí)用價(jià)值,,以Intel ICH7-M芯片為硬件平臺,完成了新驅(qū)動的設(shè)計(jì)與實(shí)現(xiàn),,并通過應(yīng)用測試證明該設(shè)計(jì)行之有效,,能夠顯著提升電子盤性能。該驅(qū)動程序工作穩(wěn)定,、性能可靠,、實(shí)時(shí)性較好,目前已應(yīng)用在某電子海圖項(xiàng)目中,,可大幅縮短海圖文件的加載時(shí)間,,實(shí)現(xiàn)了海圖的快速拖拽及縮放功能。該驅(qū)動亦可應(yīng)用于其他要求高實(shí)時(shí)性的工業(yè)控制領(lǐng)域,。

參考文獻(xiàn)

[1] 潘惠芹.電子盤的設(shè)計(jì)及實(shí)現(xiàn)[J].計(jì)算機(jī)工程,,2004,30(16):194-197.

[2] 陳學(xué)兵,,沈毅男,,張振華.VxWorks5.5在龍芯2號處理器的移植和性能分析[J].計(jì)算機(jī)測量與控制,2012,,20(9):2542-2545.

[3] MCLEAN P T.AT attachment with packet interface-6(ATA/ATAPI-6)[R].USA:American National Standards Institute,,2002:115-126.

[4] WindRiver.VxWorks programmer′s guide 5.5[M].USA:WindRiver,2002.

[5] 王晉東,,黃海,,王坤,,等.基于VxWorks的dosFs文件系統(tǒng)分析與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008,,24(32):85-87.

[6] 張輝,,陳昕,沈晶晶,,等.大容量機(jī)載存儲系統(tǒng)設(shè)計(jì)與仿真評價(jià)[J].電光與控制,,2014,21(5):104-108.

[7] 張楊,,于銀濤.VxWorks內(nèi)核,、設(shè)備驅(qū)動與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.

[8] Intel Corporation.Intel ICH7 family datasheet[M].USA:Intel,,2006.

[9] 李志鵬,,王立強(qiáng),康建斌,,等.連續(xù)數(shù)據(jù)記錄系統(tǒng)中IDE數(shù)據(jù)接口的實(shí)現(xiàn)[J].無線電工程,,2010,40(2):48-50.

[10] 曹桂平.VxWorks設(shè)備驅(qū)動開發(fā)詳解[M].北京:電子工業(yè)出版社,,2011.

[11] 毛曉梅.基于VxWorks6.6系統(tǒng)的SATA控制器驅(qū)動技術(shù)研究[J].工業(yè)控制計(jì)算機(jī),,2013,26(11):129-133.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。