嵌入式系統的SD控制器設計實(shí)現
引言
本文引用地址:http://dyxdggzs.com/article/150261.htm 在目前的掌上電腦等嵌入式系統中,SD(securedigital)卡以其體積小和引腳數少的優(yōu)勢,提供了比CF更好的外部設備擴展解決方案。因此,如何在系統中集成SDHost控制模塊,以及在嵌入式操作系統里面實(shí)現其驅動(dòng)程序,都是目前嵌入式系統設計者要考慮的問(wèn)題。
本文實(shí)現所采用的開(kāi)發(fā)平臺是基于SAMSUNG公司的S3C2410AARM微處理器,利用處理內部的SD控制模塊,采用GPIO擴展的方法實(shí)現SDHost控制器。
使用S3C2410A的SD控制模塊,通過(guò)對GPIO功能的擴展來(lái)完成SD的檢測和寫(xiě)保護的功能,實(shí)現SDHost控制器相對比較靈活。在進(jìn)行驅動(dòng)程序開(kāi)發(fā)過(guò)程中,對SD卡檢測進(jìn)行防抖動(dòng)處理是必要的,必須根據系統電路特性來(lái)確定合適的檢測時(shí)機,在驅動(dòng)程序里面實(shí)現防抖動(dòng)處理,保證整個(gè)系統的效率。
1 SDHost硬件設計
SCDA1A0100是ALPS公司生產(chǎn)的SD卡連接插槽,采用高可用的滑動(dòng)觸點(diǎn)開(kāi)關(guān),能夠準確地檢測到卡插入的時(shí)機。
通過(guò)小型化和薄型化設計,已經(jīng)廣泛應用于PDA,數碼相機和個(gè)人電腦。當插槽有SD卡插入時(shí),SD卡會(huì )觸動(dòng)槽內的觸點(diǎn)開(kāi)關(guān),引起卡的檢測引腳和寫(xiě)保護引腳的相應電平變化。
Samsung的S3C2410A內部支持SDHost的控制模塊,有SDHost控制寄存器和可以用于SDHost控制器的IO引腳,可用編程的方法對其功能進(jìn)行選擇;但對于SD卡的檢測,寫(xiě)保護和插槽的電源使能等功能沒(méi)有專(zhuān)門(mén)的引腳。在本文實(shí)現中,對于卡檢測、電源引腳,通過(guò)GPIO擴展來(lái)實(shí)現。部分引腳定義如表1所示。
表1 S3C2410A部分GPIO引腳功能定義

S3C2410A的GPIO引腳分為GPA,GPB等8組,每組的IO引腳有控制寄存器(GPxCON),數據寄存器(GPxDAT),Pull-Up寄存器(GPxUP)進(jìn)行控制。每根引腳所在的GPxCON里有對應位控制其功能,通過(guò)對GPxCON編程來(lái)控制其功能,某一時(shí)刻,該引腳只能使用一種功能。
對于SD卡檢測引腳,需要配置成外部中斷源(EINTx),對應的EXTINT0,EXTINT1和EXTINT2寄存器控制該中斷源的觸發(fā)模式:低電平觸發(fā),高電平觸發(fā),前沿觸發(fā),后沿觸發(fā)或是前后沿觸發(fā)。
S3C2410A時(shí)鐘控制邏輯有兩個(gè)鎖相環(huán)路PLL(phaselockedloop):UPLL專(zhuān)用于USB時(shí)鐘;MPLL能夠產(chǎn)生系統要求的3種時(shí)鐘信號:FCLK供CPU內核使用,HCLK供系統總線(xiàn)使用,PCLK供外部總線(xiàn)使用。通過(guò)對MPLL控制寄存器MPLLCON配置,可以產(chǎn)生需要的時(shí)鐘頻率。
在時(shí)鐘控制邏輯里,寄存器CLKCON用來(lái)控制如USB,LCD,UART,SD等接口模塊的時(shí)鐘使能。其中bit[9]用于控制SD/MMC接口的時(shí)鐘。SDHost控制器不能直接使用PCLK信號。正常工作模式下,FCLK為266MHz,PCLK為66.5MHz,而SD卡的最高時(shí)鐘為25MHz,MMC卡最高為20MHz。通過(guò)對SDIPRE寄存器的bit[0-7]設置可以對PCLK進(jìn)行分頻,選擇合適SD/MMC卡的工作頻率。分頻公式為:
Clockrate=PCLK/2/(SDIPRE[0-7]+1)
2 驅動(dòng)程序的實(shí)現
2.1 驅動(dòng)程序體系結構
我們?yōu)殚_(kāi)發(fā)平臺上運行的WindowsCE系統開(kāi)發(fā)了SDHost控制器的驅動(dòng)程序。WindowsCE下,驅動(dòng)程序是用戶(hù)態(tài)的DLL,這些DLL向內核提供一些接口函數,這樣設備管理模塊就可以通過(guò)這些函數與具體的硬件設備進(jìn)行通信。
WindowsCE的驅動(dòng)程序模型主要有兩種類(lèi)型:流式接口驅動(dòng)和本地設備驅動(dòng)。流式設備驅動(dòng)向上層提供統一的流式設備接口,而本地設備驅動(dòng)可根據具體設備要求提供相應接口。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論