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