rv1126使用sdmmc配置
时间: 2023-10-24 22:58:47 浏览: 358
RV1126是Rockchip公司生产的一款多媒体处理器芯片,集成了SDMMC控制器,可以用于与SD卡进行通信。
要在RV1126上使用SDMMC控制器进行SD卡配置,需要执行以下步骤:
1. 硬件连接:将SD卡插入到RV1126的SDMMC接口上。
2. 时钟配置:根据芯片规格和需求,配置SDMMC控制器的时钟。这包括选择适当的时钟源、设置时钟分频器等。
3. 引脚配置:将SDMMC控制器与芯片引脚进行连接,并配置相应的引脚功能。
4. 电压配置:根据SD卡的电压要求,配置SDMMC控制器的电压。
5. 初始化:对SDMMC控制器进行初始化设置,包括设置数据线数量、总线模式、时钟频率等。
6. SD卡操作:使用SDMMC控制器提供的命令和数据传输接口,进行SD卡的读写操作。这包括发送命令、接收响应、传输数据等。
请注意,具体的配置和操作步骤可能因不同的开发环境、软件框架或操作系统而有所不同。因此,在进行RV1126上的SDMMC配置时,请参考相关的官方文档、参考资料或开发者社区以获取准确的配置指南和示例代码。
相关问题
rv1126EVB板的设备树
rv1126EVB是一款基于瑞芯微rv1126芯片的开发板,设备树文件一般位于 `/arch/arm64/boot/dts/rockchip/` 目录下,名为 `rockchip-rv1126-evb.dts`。
以下是该设备树文件的部分内容:
```
/ {
model = "Rockchip RV1126 EVB Board";
compatible = "rockchip,rv1126-evb", "rockchip,rv1126", "rockchip,rk1808";
chosen {
bootargs = "root=/dev/mmcblk1p2 rw rootwait console=ttyS2,1500000n8 earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 coherent_pool=1m cgroup_enable=memory swapaccount=1 panic=10 consoleblank=0";
stdout-path = "serial@ff1a0000:1500000";
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x0 0x80000000>;
};
chosen {
bootargs = "console=ttyS2,1500000n8 earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 coherent_pool=1m cgroup_enable=memory swapaccount=1 panic=10 consoleblank=0";
};
uart2: serial@ff1a0000 {
status = "okay";
};
mmcblk1: mmc@fe320000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1_pins_a>;
bus-width = <4>;
vmmc-supply = <&vcc_io>;
vqmmc-supply = <&vcc_sd>;
cd-gpios = <&gpio4 0 GPIO_ACTIVE_LOW>;
wp-gpios = <&gpio4 1 GPIO_ACTIVE_LOW>;
max-frequency = <150000000>;
cap-sd-highspeed;
cap-mmc-highspeed;
disable-wp;
assigned-clocks = <&cru SCLK_EMMC>;
assigned-clock-rates = <200000000>;
status = "okay";
};
sound {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "rv1126-evb";
simple-audio-card,bitclock-master = <&i2s1>;
simple-audio-card,frame-master = <&i2s1>;
i2s1: i2s-controller@ff140000 {
compatible = "rockchip,rv1126-i2s";
reg = <0x0 0xff140000 0x0 0x1000>;
rockchip,grf = <&syscon>;
rockchip,audio-codec = <&wm8960>;
#sound-dai-cells = <0>;
#sound-dai-cpu = <&cpu_dai>;
#sound-dai-codec = <&codec_dai>;
};
cpu_dai: simple-audio-card,cpu {
sound-dai-name = "rv1126-i2s-hifi";
sound-dai-codec = <&codec_dai>;
sound-dai-tdm-slot-num = <2>;
sound-dai-tdm-slot-width = <16>;
sound-dai-tdm-slot-offset = <0>;
sound-dai-tdm-slot-out = <1>;
};
codec_dai: simple-audio-card,codec {
sound-dai-name = "wm8960-hifi";
sound-dai-tdm-slot-num = <2>;
sound-dai-tdm-slot-width = <16>;
sound-dai-tdm-slot-offset = <0>;
sound-dai-tdm-slot-in = <1>;
};
wm8960: codec {
compatible = "wlf,wm8960";
reg = <0x1a>;
reset-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
clocking = "mclk";
#sound-dai-cells = <0>;
#sound-dai-codec = <&codec_dai>;
#sound-dai-tdm-slot-num = <2>;
#sound-dai-tdm-slot-width = <16>;
#sound-dai-tdm-slot-offset = <0>;
#sound-dai-tdm-slot-in = <1>;
#sound-dai-tdm-slot-out = <1>;
#sound-dai-bitclock-inversion;
#sound-dai-frame-inversion;
};
};
gpio-keys {
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
autorepeat;
button@1 {
label = "gpio_key1";
gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
linux,code = <116>;
debounce-interval = <30>;
wakeup-source;
};
button@2 {
label = "gpio_key2";
gpios = <&gpio4 3 GPIO_ACTIVE_LOW>;
linux,code = <115>;
debounce-interval = <30>;
wakeup-source;
};
};
};
```
该设备树文件包含了关于该开发板上的各种硬件设备的信息和配置,如串口、MMC、I2S音频、GPIO按键等。
使用cubemx配置sdmmc,初始化代码如下:
SD卡是常用的外部存储设备,为了方便使用,可以使用CubeMX来配置SDMMC模块,下面是初始化代码:
首先需要在CubeMX里面进行SDMMC的配置,点击“Pinout & Configuration”->“Connectivity”->“SDMMC”进行配置,可以设置SD卡的时钟频率、总线宽度等参数。
接着在Main函数中进行初始化,首先需要使能SDMMC模块的时钟,并设置时钟源:
`__HAL_RCC_SDMMC_CLK_ENABLE();`
`RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit = {0};`
`RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SDMMC;`
`RCC_PeriphClkInit.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLLSAI1;`
`HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);`
然后需要进行SDMMC的初始化:
`SD_HandleTypeDef hsd1;`
`hsd1.Instance = SDMMC1;`
`hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;`
`hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;`
`hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;`
`hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;`
`hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;`
`hsd1.Init.ClockDiv = 0;`
`SDMMC_Init(hsd1.Instance, hsd1.Init);`
最后需要进行SD卡的检测,如果正常插入,则进行SD卡的初始化:
`if(HAL_SD_InitCard(&hsd1) == SD_OK)`
`{`
`//SD卡初始化成功`
`}`
以上是使用CubeMX进行SDMMC配置的初始化代码,需要注意的是,在使用SD卡之前,需要检查SD卡是否连接正确并且有数据,否则无法进行初始化。
阅读全文