基于S3C2410的SD卡linux驅(qū)動工作原理
我在講嵌入式Linux驅(qū)動開發(fā)班的時候,發(fā)現(xiàn)不少學(xué)員對SD卡驅(qū)動這塊比較感興趣,課下來找我探討。而在很多技術(shù)論壇,也有不少人問這方面的問題,所以就想寫一下這方面的內(nèi)容,希望對大家的學(xué)習(xí)能有所幫助。想了解SD卡的工作原理,首先需要了解的就是SD卡協(xié)議了,這個在網(wǎng)上可以輕松的下載到。在了解協(xié)議后,就可以看看下面的一些開發(fā)思路了。
首先看下脫離操作系統(tǒng)如何在S3C2410上實現(xiàn)SD卡的讀寫。過程可以分為3個大的步驟:初始化sd卡、寫sd卡、讀sd卡;下面的過程是我通過realview-MDK環(huán)境測試過的。
一、初始化sd卡
二、寫sd卡
寫sd卡可以分為3種方式:POLL、中斷、DMA
(1) POLL寫
(2)中斷寫
(3)DMA寫
三、讀sd卡
讀sd卡也可分為3中方式:POLL、中斷、DMA
(1) POLL讀
(2)中斷讀
(3) DMA讀
了解了脫離操作系統(tǒng)的工作原理后,現(xiàn)在可以思考linux是如何管理管理SD卡的了。Linux中SD驅(qū)動可以分為3層:塊設(shè)備層(mmc_block.c ,mmc_sysfs.c,mmc_queue.c)、mmc協(xié)議層(mmc.c)、sd驅(qū)動層(s3c2410_sdi.c)。
下面從以下幾個方面理解驅(qū)動:
1、s3c2410_sdi.c代碼初始化過程;
2、SD卡塊設(shè)備注冊過程;
3、request及數(shù)據(jù)傳輸?shù)膶崿F(xiàn)。
下面介紹的過程參考的代碼是我們?nèi)A清遠(yuǎn)見培訓(xùn)中心在教學(xué)中使用的一套代碼,內(nèi)核版本是2.6.8,其它版本過程類似。
一、s3c2410_sdi.c代碼初始化過程
二、SD卡塊設(shè)備注冊過程
三、request及數(shù)據(jù)傳輸?shù)膶崿F(xiàn)