android14 SD卡加载卸载 安卓手机sd卡驱动android手机驱动「android14 SD卡加载卸载 安卓手机sd卡驱动」
首次出关于MTK方面的驱动文章,网上也很少有这方面的文章,所以我立志要写几篇这样的文章来引导刚出道的朋友们,咱们一起努力!
大家都说MTK简单,但我个人做过高通平台一年时间,然后转而做MTK平台,感觉还是能学到东西的,代码并不比所谓的高通简单,只是它做的好,封装的好,所以做这块驱动可能开发者做的事情没高通多,所以大家觉得容易,学不到东西。但只要自己对技术执着,深入到架构的实现,还是能学到很多的。我要让大家有这样一个思想,我们做MTK平台的不比做其他任何平台的差。
一. SD卡的基本知识:
SD卡有9个pin脚(micro-SD为8个,少一个接地pin脚),如图所示,
SD的数据传输方式有两种,普通SD模式和SPI模式,以SD模式为例,9个pin脚分别是VDD,VSS,CLK,以及我们需要关注的一根指令线CMD,4根数据线DAT0~DAT3。
分类:
- 按存储大小,普通SD卡(<=2GB,支持FAT12/FAT16),HCSD卡(>2GB,<=32GB,支持FAT32)
- 按体积大小,普通SD卡,mini-SD卡,micro-SD卡(TF卡)
速度
- 默认模式: 12.5MB/s
- 高速模式: 25MB/s
二. SD卡在MTK6573中的架构
涉及到的文件有:mediatek/platform/mt6573/kernel/drivers/mmc-host/sd.c
mediatek/platform/mt6573/kernel/drivers/mmc-host/mt6573_sdc.c
下面就整个驱动的流程过一下:
系统起来的时候执行 static int __init mt6573_sd_init(void) 在这个函数里最重要的是执行platform_driver_register(&mt6573_sd_driver),即注册到内核的虚拟总线上,注册的原则是把驱动mt6573_sd_driver各参数进行初始化。
下面进入变量mt6573_sd_driver各成员的初始化。其中最重要的成员是mt6573_sd_probe的执行。当在虚拟platform总线上driver和device的名字"mt6573-sd"相匹配时即执行probe函数。
下面先看看文件mt6573_sdc.c中的static struct platform_device mt6573_device_sd[] =
{
{
.name = "mt6573-sd",
.id = 0,
.num_resources = ARRAY_SIZE(mt6573_resource_sd0),
.resource = mt6573_resource_sd0,
.dev = {
.platform_data = &mt6573_sd0_hw,
},
},
从这个结构体可以得出platform_device和platform_driver的name是相同的,所以会遍历到执行probe函数,这个结构体中有个重要的参数mt6573_sd0_hw,这个成员即是SD卡的初始状态值:
struct mt6573_sd_host_hw mt6573_sd0_hw = {
.clk_src = MSDC_CLKSRC_98MHZ,
.cmd_edge = EDGE_RISING,
.data_edge = EDGE_RISING,
.cmd_odc = MSDC_ODC_8MA,
.data_odc = MSDC_ODC_8MA,
.cmd_slew_rate = MSDC_ODC_SLEW_SLOW,
.data_slew_rate = MSDC_ODC_SLEW_SLOW,
.cmd_pull_res = MSDC_PULL_RES_23K,
.dat_pull_res = MSDC_PULL_RES_23K,
.clk_pull_res = MSDC_PULL_RES_23K,
.rst_wp_pull_res= MSDC_PULL_RES_23K,
.data_pins = 4,
.data_offset = 0,
.flags = MSDC_SYS_SUSPEND | MSDC_HIGHSPEED | MSDC_CD_PIN_EN,
};
这个相当于SD卡的私有数据。
即分别实现了上述各函数。
重点来看看函数:
这个函数是向SD卡发送指令,进入这个函数是一系列SD卡的指令分类处理,具体参照SD的手册看这部分代码,我个人就没怎么仔细研究啦。
这一段主要是读写的函数了,是否工作在cmd53模式下。
这样整个request函数分析完了,整体感觉就是先设置SD参数,然后向SD发指令,等待SD应答。应答后以何种方式来传送数据,数据是怎样传送滴。等等。
从上面的分析可以看出SD卡虽然代码庞大,但只要仔细理清头绪,一切都可以迎刃而解。祝大家都能突破自我,攻破技术。
台湾版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com