SDMMC驱动配置
SDMMC外设用于将STM32MP1与SD存储卡、SDIO和MMC设备互连。
特性:
三个MMC外设控制器
完全符合MultiMediaCard系统规范4.51版。卡支持三种不同的数据总线模式:1位(默认),4位和8位。
启动支持
SDMMC1 / 2实例可用于支持SD或MMC Flash设备上的内存引导。
SDMMC3不能被用于启动。
SDMMC实例按设备树arch/arm/boot/dts/stm32mp157c.dtsi文件中的地址排序:  sdmmc3: sdmmc@48004000 { ... sdmmc1: sdmmc@58005000 { ... sdmmc2: sdmmc@58007000 {  PanGu开发板上默认,sdmmc3是被禁用的,sdmmc1作为SDCard功能,sdmmc2作为eMMC,所以被别名为mmc0和mmc1。如果需要启用sdmmc3,它会被命名为mmc0,并一次类推,所以不要忘记变更启动设备的命令。比如,'root=/dev/mmclkb0p6'变更为''root=/dev/mmcblk1p6,这样系统会从sdmmc1(SDCard)来挂载rootfs。 
外设分配
| Domain | Peripheral | Runtime allocation | Comment | |||
| Instance | Cortex-A7 secure (OP-TEE)  | Cortex-A7 non-secure (Linux)  | Cortex-M4 (STM32Cube)  | |||
| Mass storage | SDMMC | SDMMC1 | ☐ | |||
| SDMMC2 | ☐ | |||||
| SDMMC3 | ☐ | ☐ | Assignment (single choice) | 
CA7配置SDMMC1和SDMMC2
下例显示如何配置SDMMC与eMMC Flash连接,使用8bit数据宽度。
   &sdmmc2{                                                  Comments     
       pinctrl-names = "default", "opendrain", "sleep";      
       pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_dir_pins_a>;
       pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_dir_pins_a>;
       pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_dir_sleep_pins_a>;             
       non-removable;                                        --> Non-removable slot, assume always present
       no-sd;                                                --> Avoid to send SD command during initialization
       no-sdio;                                              --> Avoid to send SDIO command during initialization
       st,neg-edge;                                           
       bus-width = <8>;                                    
       vmmc-supply = <&v3v3>;                      
       vqmmc-supply = <&vdd>;
       mmc-ddr-3_3v;                                         --> Host supports e•MMC™ DDR 3.3V                         
       status = "okay";                                     
   };
    以下示例显示了如何配置SDMMC与SDCard连接,使用4bit数据宽度。
 &sdmmc1{                                                  Comments     
       pinctrl-names = "default", "opendrain", "sleep";    
       pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
       pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>;
       pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>;               
       broken-cd;                                            --> use polling mode for card detection
       st,neg-edge;
       st,sig-dir;
       st,use-ckin;                                    
       bus-width = <4>;
       sd-uhs-sdr12;                                         --> sd modes supported [1]
       sd-uhs-sdr25;
       sd-uhs-sdr50;
       sd-uhs-ddr50;
       sd-uhs-sdr104;
       vmmc-supply = <&vdd_sd>;                      
       vqmmc-supply = <&sd_switch>;                          
       status = "okay";                                     
   };
    作者:SteveChen  创建时间:2024-09-18 14:43
最后编辑:SteveChen 更新时间:2024-10-18 15:16
最后编辑:SteveChen 更新时间:2024-10-18 15:16