《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 嵌入式處理器MPC8250與CF卡的接口設計

嵌入式處理器MPC8250與CF卡的接口設計

2008-08-06
作者:王 汪, 茅靜芳

  摘? 要: 從如何設計嵌入式處理器" title="嵌入式處理器">嵌入式處理器與CF卡之間的接口、如何高效率地編制讀寫程序出發,介紹了嵌入式處理器與CF卡的接口設計和編程技巧。

  關鍵詞: CF卡? PCI局部總線? 扇區

?

  最近幾年,嵌入式處理器蓬勃發展,在通信、航空航天、醫療設備、消費類電子產品等領域一展身手。嵌入式處理器的外圍設備也日新月異,例如記憶棒、USB口、CF卡等。本文從硬件和軟件角度出發,介紹了CF卡在嵌入式系統中的設計和使用技巧。

  由于CF卡具有攜帶方便、易于升級、存儲量大、抗震性好等優點,應用范圍越來越廣。1995年10月,SanDisk、柯達、卡西歐、惠普、摩托羅拉、佳能等125家廠商發起成立了CompactFlash協會,致力于制定新一代的基于RAM和ROM技術的固態非易失的存儲介質標準——CF卡標準,使不同廠家開發的CF卡及其接口器件可以互相兼容。目前,CF卡標準已有1.4版本,容量從最早的2M字節到現今的1G字節。

  同時,CF卡遵從ATA-IDE工業設計標準,連接裝置與 PCMCIA卡相似,只不過CF卡是50引腳(PCMCIA卡68引腳),可以很容易插入無源68引腳 TypeII適配卡并完全符合PCMCIA電力和機械接口規格。另外,CF卡的兼容性佳,不僅同時支持3.3V和5V的電壓,而且不同的CF卡都可以用單一的機構讀寫,特別是CF卡升級換代時也可以保證舊設備的兼容性。而純電子運動的CF卡耗電量很低,僅為IBM微型硬盤的5%。

1 系統設計

  圖1是筆者開發的嵌入式系統框圖。其中,嵌入式處理器是MPC8250,PCI1410A是連接PCI總線和CF卡的一種接口芯片。

?

  MPC8250芯片是Motorola公司開發的一款PowerPC系列嵌入式處理器。芯片采用小巧而強大的32位超標量體系結構PowerPC 603e處理器內核,最高主頻為300MHz。它集成了PCI橋、PCI仲裁器、存儲器控制器、中斷控制器、DMA控制器、16K字節指令高速緩存和16K字節數據高速緩存等部件。MPC8250具有三個可配置為百兆或十兆以太網的FCC口,四個可配置為串口或網口的SCC口,一個多通道HDLC接口。該芯片適用于對成本、空間、功耗和性能都有很高要求的應用領域,例如路由器/接線器、多路MODEM、網絡存儲應用和圖像顯示等系統。

  PCI1410A芯片是TI公司開發的一種高性能的PCI到CF卡的控制器,支持遵循CF卡標準的各類CF卡。它符合PCI總線標準,既可以工作于PCI主設備模式,也可以工作于PCI從設備模式。

  MPC8250與PCI1410A之間通過32位PCI局部總線連接,工作頻率33MHz。MPC8250用作PCI主設備,PCI1410A用作PCI從設備,同時采用MPC8250內部的PCI仲裁器。

  本設計選用SanDisk公司的型號為SDCFB-64-101的CF卡,64M字節容量,幾何尺寸為36.4mm×42.8mm×3mm。PCI1410A與CF卡之間的連接遵循CF卡標準,由地址、數據、控制三組信號組成。PCI1410A提供了五個通用I/O" title="I/O">I/O引腳,設計中將其中一個引腳GPIO1用作LED指示。當CF卡工作時,LED會以64ms的周期閃爍。

SDRAM選用了三星公司的K4S561632A,每片容量256M比特,共四片。

2 接口編程

  在CF卡工作前,必須先進行初始化,在整個系統的地址空間中確定CF卡的位置,預設置CF卡的工作模式及相關寄存器。本設計中,CF卡位于系統的0x9A000000~0x9DFFFFFF地址空間。在每次讀寫CF卡時,必須根據讀寫數據的多少和操作特性來配置相應寄存器。

2.1 CF卡初始化

  本系統中,CF卡的初始化由MPC8250通過PCI總線配置PCI1410A的寄存器實現,具體步驟如下:

  (1)設置CF卡的基地址,即配置ExCA寄存器(偏移量:0x10)。該寄存器定義了CF卡在PCI存儲器空間的基地址,即0x9A000000。

  (2)配置PCI命令寄存器(偏移量:0x04),允許CPU訪問PCI存儲空間。

  (3)配置系統控制寄存器" title="控制寄存器">控制寄存器(偏移量:0x80)。該寄存器定義了一些系統控制位,例如,是否采用PCI中斷方式" title="中斷方式">中斷方式,是否采用內部振蕩器,是否采用DMA等。本設計采用PCI中斷方式,不采用內部振蕩器和DMA。

  (4)配置多功能引腳寄存器(偏移量:0x8C)。該寄存器配置通用引腳。本設計配置GPIO1引腳為LED指示,GPIO2引腳為PCI中斷輸出。

????(5)配置設備控制寄存器(偏移量:0x92)。該寄存器選擇中斷方式,是并行PCI中斷還是串行PCI中斷。本設計選擇了傳統的并行PCI中斷方式。

  (6)配置ExCA電壓控制寄存器(偏移量:0x802),選擇Vcc為3.3V還是5V。本設計選擇Vcc為3.3V。

  (7)配置ExCA存儲窗口0起始地址低位寄存器(偏移量:0x810),即起始地址的A19~A12位。PCI1410A具有五個存儲地址翻譯窗口和二個I/O地址翻譯窗口,用于配置CF卡內寄存器的訪問地址,將CF卡的寄存器映射到系統的存儲空間或I/O空間,MPC8250訪問這些寄存器就相當于訪問一段存儲空間或I/O空間。本設計中只使用了存儲地址翻譯窗口0。

  (8)配置ExCA存儲窗口0起始地址高位寄存器(偏移量:0x811),即起始地址的A23~A20位。

  (9)配置ExCA存儲窗口0結束地址低位寄存器(偏移量:0x812),即結束地址的A19~A12位。

  (10)配置ExCA存儲窗口0結束地址高位寄存器(偏移量:0x813),即結束地址的A23~A20位。

  (11)配置ExCA存儲窗口0地址比較寄存器(偏移量:0x840)。在系統訪問CF卡時,如果地址的高8位與該寄存器數值相同,則允許訪問,系統將該地址翻譯到相應的CF卡空間;否則,拒之門外。

  (12)配置ExCA存儲窗口使能寄存器(偏移量:0x806)。該寄存器可以分別打開或關閉五個存儲地址翻譯窗口和二個I/O地址翻譯窗口,因為每個窗口對應了寄存器中的一個使能位。芯片的默認值都是關閉的。在本設計中,打開存儲地址翻譯窗口0。切記在初始化的收官階段打開翻譯窗口使能位,以免功虧一簣。

2.2 讀寫CF卡技巧

  由于CF卡本身的特點,CF卡由ATA控制器和Flash存儲器兩部分構成。系統訪問Flash存儲器的速度遠遠小于訪問內存的速度。如果系統頻繁訪問CF卡,勢必影響系統的實時性和工作效率。所以必須考慮CF卡讀寫程序的設計技巧。

  根據存儲器訪問的局部性原理,CPU存取數據所訪問的存儲單元都趨向于聚集在一個較小的連續區域。從時間上看,如果一個信息項正在被訪問,那么在近期它很可能還會被再次訪問。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。

  本系統的程序設計中,開辟了一個扇區的內存空間tempSect,用于存儲最近訪問過的扇區數據;并設置了兩個全局變量:SaveSectorNum和SectorDirty。SaveSectorNum保存最近備份的扇區編號。SectorDirty說明備份數據是否與CF卡中的相應數據一致。如果一致,為“0”;否則為“1”。這樣不但可以減少讀寫CF卡的次數,而且提高了訪問速度,滿足嵌入式操作系統的實時性要求。

  同時,CF卡的物理結構也有利于以扇區為單元進行操作。因為CF卡內部的Flash存儲器由若干個扇區組成,而且CF卡中設置了專門針對扇區操作的寄存器。

  所以,本設計中,無論是讀一段數據,還是寫一段數據,都以扇區為基本單位。如果數據量在一個扇區內,并且地址范圍在同一扇區,則先讀取所在扇區的數據,然后按照在扇區中的偏移量獲得所需數據;如果數據量大于一個扇區,或者地址范圍橫跨兩個扇區,則按次讀取扇區,獲得所需數據。操作流程如圖2所示。

?

  系統初始化時,設置SaveSectorNum為“0”, tempSect中備份了0號扇區的數據;SectorDirty也為“0”,即備份數據未作更改。

  當讀取一個扇區的數據時,首先比較所讀取的扇區號(CurrSectorNum),是否與備份數據的扇區號(SaveSectorNum)一致,如果一致,則從備份數據中讀取,加快了訪問速度;否則,判斷備份數據是否更改,即SectorDirty是否為“1”;如果不是,則從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中;否則,先把tempSect的數據寫回CF卡,然后從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中。最后,設置備份數據扇區號SaveSectorNum為當前數據的扇區號CurrSectorNum,設置SectorDirty為“0”,并從備份數據中讀取所需數據。

  當寫入一個扇區的數據時,首先比較所寫入的扇區號(CurrSectorNum),是否與備份數據的扇區號(SaveSectorNum)一致,如果一致,則把數據寫入備份數據中,并且設置SectorDirty為“1”;否則,判斷備份數據是否更改,即SectorDirty是否為“1”;如果不是,則從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中;否則,先把tempSect的數據寫回CF卡,然后從CF卡中讀取扇區號為CurrSectorNum的數據到tempSect中。最后,設置備份數據扇區號SaveSectorNum為當前數據的扇區號CurrSectorNum,將指定數據寫到備份數據中,并且設置SectorDirty為“1”。

2.3 讀寫數據的相關寄存器

  根據CF卡標準,不能直接訪問CF卡的數據區域,而需要通過訪問CF卡內的相關寄存器(這些寄存器的基地址在CF卡初始化時配置,見2.1節)間接讀取或者寫入數據。在訪問CF卡時必須對它們進行正確配置:

  (1)扇區數目寄存器(Sector_CNT Register)

讀寫操作時,保存需要傳送的扇區數目。如果為0,則選擇256個扇區;如果操作成功,操作結束時此寄存器為0;如果操作不成功,此寄存器包含了有待完成的扇區數目。

  (2)磁頭寄存器(Select_HEAD Register)

其中包含了LBA位(1比特),用于設置地址訪問方式" title="訪問方式">訪問方式。“1”(LBA_Mode)為邏輯地址訪問方式,“0”為柱面/磁頭/扇區訪問方式。本系統選擇邏輯地址訪問方式,則該寄存器還包含了邏輯地址的24~27位。

  (3)扇區編號寄存器(Sector_NUM Register)

在采用邏輯地址訪問方式時,該寄存器包含了邏輯地址的0~7位。

  (4)柱面低位寄存器(Cylinder_LO Register)

  在采用邏輯地址訪問方式時,該寄存器包含了邏輯地址的8~15位。

  (5)柱面高位寄存器(Cylinder_HI Register)

  在采用邏輯地址訪問方式時,該寄存器包含了邏輯地址的16~23位。

  (6)狀態寄存器(Status Register)

反映了CF卡的狀態,其中包含了CF卡忙(Busy)位、出錯位(Err)、是否準備就緒位(Rdy)等。

  (7)數據寄存器(Data Register)

  存放讀寫數據,是一個16位寄存器。

2.4 讀數據

  從CF卡讀取一個扇區的數據,如圖3所示。因為系統采用的CF卡的扇區大小為:SectorSize = 512字節,假設讀寫數據的地址為Addr,則該地址所在的扇區號為:

  Sector = Addr % SectorSize。

?

  首先配置寄存器,設置讀取的扇區數目、相應地址和訪問模式;然后發送讀命令(0x20),等待CF卡空閑且準備就緒,再從數據寄存器中連續讀取一個扇區的數據;完成讀取后,等待CF卡空閑;程序返回。

2.5 寫數據

  將數據寫入CF卡的操作與從CF卡讀取數據的操作類似,如圖4所示。首先配置寄存器,設置寫入的扇區數目、相應地址和訪問模式;然后發送寫命令(0x30),等待CF卡空閑并且處于準備狀態,連續向數據寄存器寫入一個扇區的數據;完成寫入后,等待CF卡空閑,程序返回。

?

  本設計采用的操作系統是μC/OS——一個源代碼完全公開的嵌入式操作系統。所有讀寫CF卡的函數都用C語言編制,并能在系統中有效工作。

?

參考文獻

1 TI, Co. PCI1410A Data Manual. 2000

2 Motorola, Co.MPC8250 Hardware Specifications. 2002

3 Compact Flash Association.CF+ and CompactFlash Specification Revision 1.4. 1999.7

4 Jean J. Labrosse著,邵貝貝譯.μC/OS-II——源碼公開的實時嵌入式操作系統.北京:中國電力出版社,2001

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
免费高清在线视频一区·| 国产精品性做久久久久久| 亚洲综合导航| 99精品欧美一区二区蜜桃免费| 亚洲国产电影| 亚洲高清久久网| 久久精品理论片| 久久成人国产| 久久精品人人做人人综合| 午夜在线成人av| 亚洲欧美日韩在线综合| 亚洲主播在线播放| 亚洲欧美中日韩| 欧美一区二区三区播放老司机| 香蕉视频成人在线观看| 先锋资源久久| 久久精品免费看| 亚洲国产一二三| 亚洲精品在线一区二区| 日韩一级大片| 亚洲丝袜av一区| 亚洲一区二区黄色| 一二三四社区欧美黄| 一级日韩一区在线观看| 亚洲主播在线播放| 国产欧美一区二区色老头| 久久久久久精| 久久国产乱子精品免费女 | 99国产成+人+综合+亚洲欧美| 日韩午夜激情| 亚洲一区二区三区四区视频| 香蕉久久一区二区不卡无毒影院| 久久精品免费| 美日韩精品视频| 欧美日韩久久不卡| 国产精品私人影院| 国产资源精品在线观看| 亚洲电影免费观看高清完整版在线观看 | 午夜精品视频| 91久久午夜| 亚洲天堂第二页| 欧美一区二区视频免费观看| 美女在线一区二区| 欧美色道久久88综合亚洲精品| 国产精品素人视频| 影音先锋中文字幕一区| 99re视频这里只有精品| 性色av一区二区怡红| 亚洲精品久久久久久久久| 亚洲一区精彩视频| 久久久亚洲高清| 欧美日韩日本视频| 国产一区美女| 亚洲免费观看视频| 欧美一站二站| 亚洲天堂网在线观看| 久久成人精品| 这里是久久伊人| 欧美在线播放视频| 欧美黄污视频| 国产日本欧美视频| 亚洲国产午夜| 午夜精品区一区二区三| 亚洲精品一区二区三区婷婷月 | 欧美三区在线视频| 狠狠久久综合婷婷不卡| 一区二区欧美日韩| 亚洲成色www8888| 亚洲女女女同性video| 男人的天堂成人在线| 国产精品视频免费一区| 亚洲国产日韩欧美在线动漫| 午夜精品www| 在线视频欧美一区| 鲁大师成人一区二区三区| 欧美午夜精品久久久| 在线观看日韩av先锋影音电影院| 亚洲手机视频| 亚洲最新视频在线| 老牛嫩草一区二区三区日本| 国产嫩草一区二区三区在线观看| 亚洲精品国产精品乱码不99| 亚洲第一区中文99精品| 欧美一区亚洲一区| 欧美视频精品一区| 亚洲国产欧美一区二区三区同亚洲| 欧美一激情一区二区三区| 亚洲一二三区精品| 欧美精品粉嫩高潮一区二区| 一区二区亚洲欧洲国产日韩| 午夜精品影院在线观看| 亚洲欧美韩国| 欧美日韩一区二区在线观看视频| 亚洲高清激情| 久久精品亚洲一区二区| 欧美一区二区三区免费看 | 亚洲欧美精品伊人久久| 亚洲视频久久| 欧美理论大片| 亚洲福利小视频| 久久精品99国产精品日本| 欧美伊人影院| 国产精品日韩在线| 亚洲一级片在线看| 亚洲网站在线播放| 欧美日韩国产免费观看| 亚洲经典视频在线观看| 亚洲欧洲三级| 欧美寡妇偷汉性猛交| 伊人一区二区三区久久精品| 欧美伊人久久| 久久精品理论片| 国产视频不卡| 亚洲欧美不卡| 性亚洲最疯狂xxxx高清| 国产精品久久久久一区| 亚洲天堂av在线免费| 亚洲影音一区| 国产精品亚洲综合色区韩国| 亚洲视频在线观看一区| 午夜精品福利视频| 国产精品影视天天线| 午夜在线精品| 久久久久免费| 亚洲高清色综合| 亚洲免费成人av| 欧美日韩视频一区二区三区| 一区二区不卡在线视频 午夜欧美不卡' | 久久综合网络一区二区| 一区二区三区在线观看国产| 亚洲第一色在线| 欧美高清在线视频| 亚洲美女少妇无套啪啪呻吟| 亚洲综合日韩在线| 国产精品一区二区三区乱码| 欧美与欧洲交xxxx免费观看 | 亚洲视频视频在线| 国产精品国产一区二区| 亚洲欧美成人| 久久亚洲一区二区三区四区| 亚洲成色最大综合在线| 亚洲精品一区二区三| 欧美日韩一区二区欧美激情| 亚洲永久精品国产| 久久五月天婷婷| 亚洲经典在线| 亚洲尤物在线| 国产午夜精品一区二区三区欧美| 亚洲高清激情| 欧美日韩一级黄| 亚洲欧美日韩中文在线制服| 久久综合综合久久综合| 亚洲日本aⅴ片在线观看香蕉| 亚洲永久免费视频| 国内一区二区三区| 日韩视频专区| 国产毛片一区二区| 亚洲精品一区二区三区福利| 国产精品久久久久av| 亚洲高清一区二| 国产精品a级| 欧美在线观看一区二区三区| 欧美大片一区二区三区| 亚洲一区二区动漫| 老司机午夜免费精品视频| 99国产精品| 久久午夜精品一区二区| 99精品视频一区二区三区| 久久精品99国产精品日本| 亚洲欧洲日产国产综合网| 亚洲欧美www| 亚洲动漫精品| 欧美在线地址| 日韩天天综合| 久久天天躁狠狠躁夜夜爽蜜月 | 午夜精品久久久久久久白皮肤| 欧美成人午夜77777| 亚洲一区二区三区在线| 免费日本视频一区| 亚洲视频免费在线观看| 蜜桃av一区二区在线观看| 亚洲视频久久| 欧美精品免费播放| 欧美一区二区视频网站| 欧美日韩一本到| 亚洲国产日韩精品| 国产欧美日韩免费| 一个色综合av| 亚洲盗摄视频| 久久久xxx| 亚洲无线视频| 欧美激情偷拍| 久久激情婷婷| 国产精品亚洲人在线观看| 99国产精品一区| 激情成人综合网| 欧美一区二区成人| 夜夜嗨av一区二区三区| 欧美高清视频免费观看| 欧美一区二区日韩一区二区|