SDIO设备树配置说明

  • max-frequency = <150000000>;
    • 此项同SD卡的配置,最大运行频率不超过150Mhz;SDIO2.0最大50M,SDIO3.0最大支持150M。
  • supports-SDIO;
    • 此配置标识此插槽为SDIO功能,为必添项。否则无法初始化SDIO外设。
  • bus-width = <4>;
    • 此配置同SD卡功能。
  • cap-sd-highspeed;
    • 此配置同SD卡功能,作为SDIO外设,也有区分是否为highspeed的SDIO外设。
  • cap-sdio-irq;
    • 此配置标识该SDIO外设(通常是Wi-Fi)是否支持sdio中断,如果你的外设是OOB中断, 请不要加入此项。支持哪种类型的中断请联系Wi-Fi原厂确定。
  • keep-power-in-suspend;
    • 此配置表示是否支持睡眠不断电,请默认加入该选项。Wi-Fi一般都有深度唤醒的要求。
  • mmc-pwrseq = <&sdio_pwrseq>;
    • 此项是SDIO外设(一般是 Wi-Fi)的电源控制。为必须项,否则Wi-Fi无法上电工作。请参考下面的例子,晶振时钟和复位-使能的GPIO的选择按照实际板级硬件要求进行配置。

  • non-removable;
    • 此项表示该插槽为不可移动设备且此项为SDIO设备必须添加项。
  • num-slots = <4>;
    • 此项同SD卡的配置。
  • sd-uhs-sdr104;
    • 此项配置决定该SDIO设备是否支持SDIO3.0模式。前提是需要Wi-Fi的IO电压为1.8v。

参考资料:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RK3308 SoC 支持SDIO接口,可以通过SDIO接口连接SD卡。下面是SDIO SD卡设备树配置和驱动配置的步骤: 1. 设备树配置设备树中添加SDIO节点,配置SDIO相关的属性。例如: ``` sdmmc: sdmmc@ff140000 { compatible = "rockchip,rk3308-sdmmc"; reg = <0x0 0xff140000 0x0 0x10000>; interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru SCLK_SDMMC>; clock-names = "clk_sdmmc"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4 &sdmmc_bus8>; pinctrl-1 = <&sdmmc_clk_sleep &sdmmc_cmd_sleep &sdmmc_bus4_sleep &sdmmc_bus8_sleep>; bus-width = <4>; status = "okay"; }; ``` 其中,`compatible`属性是设备树中的兼容性属性,`reg`属性是SDIO控制器的寄存器地址和大小,`interrupts`属性是中断号,`clocks`属性是时钟节点,`pinctrl-names`和`pinctrl-0`属性是管脚配置,`bus-width`属性是总线宽度,`status`属性是设备状态,这里设置为"okay"表示设备可用。 2. 驱动配置 在内核中添加SDIO驱动,并配置SDIO控制器和SD卡之间的通信。例如: ``` static struct sdhci_pltfm_data rk3308_sdhci_pdata = { .ops = &rk3308_sdhci_ops, .clk = RK3308_SDMMC_CLK, .cd_gpio = -1, .cd_inverted = true, }; static const struct sdhci_ops rk3308_sdhci_ops = { .set_clock = rk3308_sdhci_set_clock, .set_bus_width = rk3308_sdhci_set_bus_width, .set_uhs_signaling = rk3308_sdhci_set_uhs_signaling, .send_command = rk3308_sdhci_send_command, .reset = rk3308_sdhci_reset, .get_ro = rk3308_sdhci_get_ro, }; static const struct of_device_id rk3308_sdhci_of_match[] = { { .compatible = "rockchip,rk3308-sdmmc" }, {} }; MODULE_DEVICE_TABLE(of, rk3308_sdhci_of_match); static struct platform_driver rk3308_sdhci_driver = { .driver = { .name = "rk3308-sdhci", .of_match_table = rk3308_sdhci_of_match, }, .probe = rk3308_sdhci_probe, .remove = rk3308_sdhci_remove, }; static int __init rk3308_sdhci_init(void) { return platform_driver_register(&rk3308_sdhci_driver); } static void __exit rk3308_sdhci_exit(void) { platform_driver_unregister(&rk3308_sdhci_driver); } module_init(rk3308_sdhci_init); module_exit(rk3308_sdhci_exit); ``` 其中,`sdhci_pltfm_data`结构体是SDHCI平台数据,`sdhci_ops`结构体是SDHCI操作函数,`of_device_id`结构体是设备树匹配信息,`platform_driver`结构体是平台驱动,`rk3308_sdhci_init`和`rk3308_sdhci_exit`是驱动初始化和卸载函数。具体实现可以参考内核源码中的SDHCI驱动实现。 以上是SDIO SD卡设备树配置和驱动配置的基本步骤,需要根据具体的系统和硬件进行适当调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值