新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式處理器MPC8250與CF卡的接口設計

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

        作者: 時間:2012-06-27 來源:網絡 收藏

        當寫入一個扇區的數據時,首先比較所寫入的扇區號(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比特),用于設置地址訪問方式?!埃薄保煟蹋拢粒撸停铮洌澹牉檫壿嫷刂吩L問方式,“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 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临泽县| 来凤县| 德格县| 城固县| 松滋市| 黄浦区| 古丈县| 广南县| 平果县| 页游| 柯坪县| 文安县| 古丈县| 定边县| 平昌县| 株洲县| 吉水县| 信丰县| 石林| 台南县| 香格里拉县| 庆阳市| 合作市| 宁陵县| 洞头县| 石渠县| 阿拉善右旗| 中卫市| 徐汇区| 德江县| 五原县| 九寨沟县| 吉林市| 习水县| 出国| 扎赉特旗| 宁城县| 寿宁县| 淮滨县| 台前县| 原阳县|