《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > VxWorks5.5下電子盤DMA驅動程序設計與實現
VxWorks5.5下電子盤DMA驅動程序設計與實現
2016年電子技術應用第11期
尹加豹
江蘇自動化研究所,江蘇 連云港222061
摘要: 在嵌入式實時操作系統中,經常需要實時讀寫硬盤數據,為了提高VxWorks5.5系統下IDE電子盤讀寫速度,提出了一種基于ICH7-M南橋芯片的DMA模式驅動軟件的設計方法。該方法采用風河公司提供的磁盤驅動程序框架,設計了新的讀寫接口函數,新驅動遵循ATA-6接口協議并采用UDMA2傳輸模式,可使電子盤讀寫速度提高十余倍。應用結果表明,該方法運行穩定,系統的實時性提高,充分發揮了電子盤性能。
中圖分類號: TP336
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.009
中文引用格式: 尹加豹. VxWorks5.5下電子盤DMA驅動程序設計與實現[J].電子技術應用,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 引言

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

1 硬件環境

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

qrs1-t1.gif

    該計算機模塊搭載的電子盤為源科公司生產的飛龍V系列閃存硬盤,它采用NandFlash閃存芯片,基于標準的ATA/IDE端口,支持ATA-6協議。

2 硬盤工作原理分析

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

qrs1-b1.gif

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

qrs1-b2.gif

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

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

    錯誤寄存器:用于記錄硬盤執行命令后的出錯信息;

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

    扇區計數寄存器:用于存儲要讀/寫的扇區總數;

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

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

    狀態寄存器:用于記錄硬盤設備執行命令后的狀態;

    命令寄存器:用于執行命令;

    備用寄存器:其內部數據與狀態寄存器相同;

    設備控制寄存器:用于控制硬盤設備。

3 驅動程序設計

3.1 驅動與文件系統關系

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

qrs1-t2.gif

3.2 初始化

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

qrs1-b3.gif

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

    指令執行一般要經過以下幾種狀態:

    (1)發送指令, 進入等待狀態;

    (2)設備執行完指令后發出中斷,檢驗設備狀態;

    (3)如狀態正確, 則進行后續操作;否則返回。

    設置數據傳輸模式時,為保證電子盤能夠更高效工作,優先選擇UDMA傳輸模式;若電子盤不支持UDMA,則選擇MDMA模式;若不支持MDMA,則選擇SDMA模式;若不支持SDMA,則選擇PIO模式。

3.3 DMA讀寫設計

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

qrs1-t3.gif

    在PRDT表中,每個描述符占8 B,前4 B指向緩沖區地址,后4 B低16 bit表示緩沖區長度,地址和長度的第0位必須為0,當緩沖區長度為0時,數據長度為64 KB,EOT位為緩沖區結束標志位(為1表示當前緩沖區為最后一個)。當執行DMA讀時,控制器將電子盤中扇區數據讀到各個內存緩沖區中;當執行DMA寫時,控制器將各個緩沖區中數據寫入對應的扇區中。

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

    (1)首先判斷硬盤狀態,當其處于就緒狀態才可以進行操作;

    (2)填寫控制器相關寄存器指定起始邏輯塊(LBA尋址方式)和扇區總數;

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

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

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

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

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

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

    (4)將要傳輸的扇區地址、數量等信息寫入ATA設備寄存器,方法如下:在LBA 48b尋址模式下,首先將要讀取(寫入)的扇區數高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表示設備號,主盤置0,從盤置1,bit 6表示LBA尋址,需置1;最后將操作指令寫入Command寄存器,讀操作指令為0x25,寫操作指令為0x35;

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

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

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

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

4 試驗結果與分析

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

qrs1-b4.gif

5 結束語

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

參考文獻

[1] 潘惠芹.電子盤的設計及實現[J].計算機工程,2004,30(16):194-197.

[2] 陳學兵,沈毅男,張振華.VxWorks5.5在龍芯2號處理器的移植和性能分析[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文件系統分析與實現[J].微計算機信息,2008,24(32):85-87.

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

[7] 張楊,于銀濤.VxWorks內核、設備驅動與BSP開發詳解[M].北京:人民郵電出版社,2009.

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

[9] 李志鵬,王立強,康建斌,等.連續數據記錄系統中IDE數據接口的實現[J].無線電工程,2010,40(2):48-50.

[10] 曹桂平.VxWorks設備驅動開發詳解[M].北京:電子工業出版社,2011.

[11] 毛曉梅.基于VxWorks6.6系統的SATA控制器驅動技術研究[J].工業控制計算機,2013,26(11):129-133.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 日本成人福利视频 | 国产精品视频一区二区三区经 | 中文在线免费看视频 | 国产成人精品免费久久久久 | 日韩欧美一区二区三区在线观看 | 免费一级在线 | 一级视频在线免费观看 | 欧美午夜视频一区二区三区 | 全黄一级裸片视频在线观看 | 日韩欧美亚洲 | 日韩欧美中文 | 黄色片在线观看视频 | 欧美午夜精品久久久久免费视 | 国产色综合久久无码有码 | 亚洲免费午夜视频 | 日韩午夜在线 | 亚洲一区二区中文 | 精品一区二区三区视频在线观看 | 视频一区中文字幕 | 欧美成人eee在线 | 国产日韩欧美精品一区 | 一个人看的视频www 一个人看的视频www免费 | 中文字幕免费在线视频 | 福利社看片| 亚洲欧美啪啪 | 伊人久久国产免费观看视频 | 本道在线| 欧美日韩一级大片 | 成人精品免费视频 | 欧美天天射 | 欧美日韩一区二区三区在线观看 | 日本中文字幕在线观看 | 亚洲一区二区视频在线观看 | 日本久久影视 | 日本vs欧美一区二区三区 | 国产在线观看黄色 | 老司机精品影院一区二区三区 | 色香欲综合天天影院综合 | 欧美日韩中文国产一区二区三区 | 免费看的黄色录像 | 国产第一福利136视频导航 |