SD驱动根据硬件电路设计的一些调整方法
-
开发板上使用SD卡的步骤
-
Insmod scsi_mod.ko mmc_core.ko mmc_block.ko kdrv_sdmmc.ko
-
Insmod fat.ko vfat.ko
-
挂载:mount -t vfat /dev/block/mmcblk0p1 /mnt/sdcard
-
-
硬件设计上,sd 供电引脚直接接到电源,不需要sdmmc驱动控制供电,把供电GPIO腾出来做其他功能
在infinity6b0.dtsi里的sdmmc节点slot-pwr-gpios=<PAD_FUART_RTS>,<PAD_PM_GPIO9>,<0>,分别对应三个slot,客户一般用的是第一个SDIO接口。将默认的PAD_FUART_RTS改成PAD_UNKNOW.也可以把代码里的_SetPower()注释掉调用FUART_RTS的部分逻辑。
-
SDIO的CDZ引脚,因电路设计需改成CDZ高表示检测到SD卡,低表示没有检测到SD卡,软件调整方法
在infinity6b0.dtsi里的sdmmc节点revcdz = <0>;改成1.
-
默认SD clk是48Mhz,有哪些档位可选,如何修改
Hal_CARD_FindClockSetting()可以看出clk有几个档位: 48000000,43200000,40000000,36000000,32000000,20000000,12000000,300000。
在infinity6b0.dtsi里的sdmmc节点:slot-max-clks = <48000000>,<48000000>,<48000000>;分别对应三个slot,一般用第一个SDIO接口。
-
在uboot下使用sd卡,怎么改uboot下sd卡的clk
uboot/drivers/mstar/sdmmc/inc/ms_sdmmc_ub.h
把#define V_SDMMC1_MAX_CLK 32000000改成想要的clk档位。
-
量测的信号波形较差,想要拉高sd驱动能力,怎么改?
修改内核代码hal_card_platform.c的函数void Hal_CARD_InitPADPin(PADEmType ePAD, BOOL_T bTwoCard),
把CARD_REG_CLRBIT(GET_CARD_REG_ADDR(A_CHIPTOP_BANK, 0x32), BIT05_T|BIT04_T|BIT03_T|BIT02_T|BIT01_T|BIT00_T); //CLK, D3, D2, D1, D0, CMD => drv: 0
改为CARD_REG_SETBIT(GET_CARD_REG_ADDR(A_CHIPTOP_BANK, 0x32), BIT05_T|BIT04_T|BIT03_T|BIT02_T|BIT01_T|BIT00_T);
对应位1: 8mA 0: 4mA
-
开发板上格式化SD卡
-
mkfs.vfat /dev/block/mmcblk0p1(mkfs.vfat来自Busybox,如果没有要重新编译busybox,make menuconfig勾选Linux System Utilities --> mkfs_vfat即可)
-
开源工具dosfstools等
-