新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式處理器MPC8250與CF卡的接口設(shè)計(jì)

        嵌入式處理器MPC8250與CF卡的接口設(shè)計(jì)

        作者: 時(shí)間:2012-06-27 來(lái)源:網(wǎng)絡(luò) 收藏

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

        2.3 讀寫數(shù)據(jù)的相關(guān)寄存器

        根據(jù)CF卡標(biāo)準(zhǔn),不能直接訪問(wèn)CF卡的數(shù)據(jù)區(qū)域,而需要通過(guò)訪問(wèn)CF卡內(nèi)的相關(guān)寄存器(這些寄存器的基地址在CF卡初始化時(shí)配置,見(jiàn)2.1節(jié))間接讀取或者寫入數(shù)據(jù)。在訪問(wèn)CF卡時(shí)必須對(duì)它們進(jìn)行正確配置:

        (1)扇區(qū)數(shù)目寄存器(Sector_CNT Register)

        讀寫操作時(shí),保存需要傳送的扇區(qū)數(shù)目。如果為0,則選擇256個(gè)扇區(qū);如果操作成功,操作結(jié)束時(shí)此寄存器為0;如果操作不成功,此寄存器包含了有待完成的扇區(qū)數(shù)目。

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

        其中包含了LBA位(1比特),用于設(shè)置地址訪問(wèn)方式。“1”LBA_Mode為邏輯地址訪問(wèn)方式,“0”為柱面/磁頭/扇區(qū)訪問(wèn)方式。本系統(tǒng)選擇邏輯地址訪問(wèn)方式,則該寄存器還包含了邏輯地址的24~27位。

        (3)扇區(qū)編號(hào)寄存器(Sector_NUM Register)

        在采用邏輯地址訪問(wèn)方式時(shí),該寄存器包含了邏輯地址的0~7位。

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

        在采用邏輯地址訪問(wèn)方式時(shí),該寄存器包含了邏輯地址的8~15位。

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

        在采用邏輯地址訪問(wèn)方式時(shí),該寄存器包含了邏輯地址的16~23位。

        (6)狀態(tài)寄存器(Status Register)

        反映了CF卡的狀態(tài),其中包含了CF卡忙(Busy)位、出錯(cuò)位(Err)、是否準(zhǔn)備就緒位(Rdy)等。

        (7)數(shù)據(jù)寄存器(Data Register)

        存放讀寫數(shù)據(jù),是一個(gè)16位寄存器。

        2.4 讀數(shù)據(jù)

        從CF卡讀取一個(gè)扇區(qū)的數(shù)據(jù),如圖3所示。因?yàn)橄到y(tǒng)采用的CF卡的扇區(qū)大小為:SectorSize = 512字節(jié),假設(shè)讀寫數(shù)據(jù)的地址為Addr,則該地址所在的扇區(qū)號(hào)為:

        Sector = Addr % SectorSize。

        首先配置寄存器,設(shè)置讀取的扇區(qū)數(shù)目、相應(yīng)地址和訪問(wèn)模式;然后發(fā)送讀命令(0x20),等待CF卡空閑且準(zhǔn)備就緒,再?gòu)臄?shù)據(jù)寄存器中連續(xù)讀取一個(gè)扇區(qū)的數(shù)據(jù);完成讀取后,等待CF卡空閑;程序返回。

        2.5 寫數(shù)據(jù)

        將數(shù)據(jù)寫入CF卡的操作與從CF卡讀取數(shù)據(jù)的操作類似,如圖4所示。首先配置寄存器,設(shè)置寫入的扇區(qū)數(shù)目、相應(yīng)地址和訪問(wèn)模式;然后發(fā)送寫命令(0x30),等待CF卡空閑并且處于準(zhǔn)備狀態(tài),連續(xù)向數(shù)據(jù)寄存器寫入一個(gè)扇區(qū)的數(shù)據(jù);完成寫入后,等待CF卡空閑,程序返回。

        本設(shè)計(jì)采用的操作系統(tǒng)是μC/OS——一個(gè)源代碼完全公開(kāi)的嵌入式操作系統(tǒng)。所有讀寫CF卡的函數(shù)都用C語(yǔ)言編制,并能在系統(tǒng)中有效工作。


        上一頁(yè) 1 2 3 下一頁(yè)

        關(guān)鍵詞: 嵌入式處理器 MPC8250 CF卡

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 通化市| 和田县| 巴塘县| 双江| 鹰潭市| 大名县| 获嘉县| 辉县市| 天全县| 石景山区| 南靖县| 江西省| 盐津县| 江孜县| 安顺市| 岳阳县| 资源县| 龙口市| 锡林郭勒盟| 吴旗县| 丹巴县| 多伦县| 铁力市| 吴桥县| 得荣县| 胶南市| 永仁县| 东至县| 门源| 额济纳旗| 惠东县| 湘西| 镶黄旗| 双峰县| 枣强县| 保德县| 绥宁县| 通城县| 竹溪县| 乐业县| 阳新县|