WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-04-24 22:02:01

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,956

全志芯片主线Linux 启动 eMMC 8-bit 模式测试

https://www.kernel.org/doc/Documentation/devicetree/bindings/mmc/sunxi-mmc.txt

* Allwinner sunxi MMC controller

The highspeed MMC host controller on Allwinner SoCs provides an interface
for MMC, SD and SDIO types of memory cards.

Supported maximum speeds are the ones of the eMMC standard 4.5 as well
as the speed of SD standard 3.0.
Absolute maximum transfer rate is 200MB/s

Required properties:
 - compatible : should be one of:
   * "allwinner,sun4i-a10-mmc"
   * "allwinner,sun5i-a13-mmc"
   * "allwinner,sun7i-a20-mmc"
   * "allwinner,sun8i-a83t-emmc"
   * "allwinner,sun9i-a80-mmc"
   * "allwinner,sun50i-a64-emmc"
   * "allwinner,sun50i-a64-mmc"
   * "allwinner,sun50i-h6-emmc", "allwinner.sun50i-a64-emmc"
   * "allwinner,sun50i-h6-mmc", "allwinner.sun50i-a64-mmc"
 - reg : mmc controller base registers
 - clocks : a list with 4 phandle + clock specifier pairs
 - clock-names : must contain "ahb", "mmc", "output" and "sample"
 - interrupts : mmc controller interrupt

Optional properties:
 - resets : phandle + reset specifier pair
 - reset-names : must contain "ahb"
 - for cd, bus-width and additional generic mmc parameters
   please refer to mmc.txt within this directory

Examples:
	- Within .dtsi:
	mmc0: mmc@1c0f000 {
		compatible = "allwinner,sun5i-a13-mmc";
		reg = <0x01c0f000 0x1000>;
		clocks = <&ahb_gates 8>, <&mmc0_clk>, <&mmc0_output_clk>, <&mmc0_sample_clk>;
		clock-names = "ahb", "mod", "output", "sample";
		interrupts = <0 32 4>;
		status = "disabled";
	};

	- Within dts:
	mmc0: mmc@1c0f000 {
		pinctrl-names = "default", "default";
		pinctrl-0 = <&mmc0_pins_a>;
		pinctrl-1 = <&mmc0_cd_pin_reference_design>;
		bus-width = <4>;
		cd-gpios = <&pio 7 1 0>; /* PH1 */
		cd-inverted;
		status = "okay";
	};

离线

#2 2019-04-24 22:04:53

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,956

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

上面默认是 4bit 模式, 下面试一试把 S3/V3s 的 mmc2 改成 8bit 模式:

sun8i-dtsi 添加:

    mmc2_pins: mmc1-pins {
        pins = "PC0", "PC1", "PC2", "PC3",
               "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10";
        function = "mmc2";
        drive-strength = <30>;
        bias-pull-up;
    };

mmc2 改为:

mmc2: mmc@1c11000 {
            compatible = "allwinner,sun7i-a20-mmc";
            reg = <0x01c11000 0x1000>;
            clocks = <&ccu CLK_BUS_MMC2>,
                 <&ccu CLK_MMC2>,
                 <&ccu CLK_MMC2_OUTPUT>,
                 <&ccu CLK_MMC2_SAMPLE>;
            clock-names = "ahb",
                      "mmc",
                      "output",
                      "sample";
            resets = <&ccu RST_BUS_MMC2>;
            reset-names = "ahb";
            interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
            pinctrl-names = "default", "default";
            pinctrl-0 = <&mmc2_pins>;
            bus-width = <8>;
            status = "disabled";
            #address-cells = <1>;
            #size-cells = <0>;
        };


sun8i-v3s-licheepi-zero.dts 添加:

&mmc2 {
    broken-cd;
    bus-width = <4>;
    vmmc-supply = <&reg_vcc3v3>;
    status = "okay";
};

仅有 PC 这组 MMC 可以运行 8bit模式.

驱动程序: https://github.com/torvalds/linux/blob/master/drivers/mmc/host/sunxi-mmc.c

设备树:
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s.dtsi
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts

离线

#3 2019-05-02 14:47:27

smartcar
会员
注册时间: 2018-02-19
累计积分: 362

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

感谢分享, 看来我应该使用 1bit 模式, 抠出 3个 IO口出来.

离线

#4 2019-05-05 10:14:52

powerpan
会员
注册时间: 2019-05-05
累计积分: 12

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

牛啊。。。正在找这个,谢谢晕哥

离线

#5 2019-05-05 10:49:21

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 126

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

厉害了,感谢分享

离线

#6 2019-05-05 10:55:37

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 89

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

看起来很厉害,留名

离线

#7 2019-05-05 10:56:36

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,956

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

没有测试, 因为我没有 8bit eMMC 的板子
没有测试, 因为我没有 8bit eMMC 的板子
没有测试, 因为我没有 8bit eMMC 的板子

如果哪位测试 OK 了, 麻烦冒个泡泡.

离线

#8 2019-05-05 14:44:26

zhenfanhei
会员
注册时间: 2018-01-18
累计积分: 232
个人网站

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

前面s3的mmc2  4bit sd nand上3.4上有识别到,4.13上好像没有识别到,

离线

#9 2019-05-05 15:04:30

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,956

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

zhenfanhei 说:

前面s3的mmc2  4bit sd nand上3.4上有识别到,4.13上好像没有识别到,

会不会是 IO,寄存器基地址和中断等资源配置不对呢?

离线

#10 2019-05-06 00:19:57

powerpan
会员
注册时间: 2019-05-05
累计积分: 12

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

晕哥 说:

没有测试, 因为我没有 8bit eMMC 的板子
没有测试, 因为我没有 8bit eMMC 的板子
没有测试, 因为我没有 8bit eMMC 的板子

如果哪位测试 OK 了, 麻烦冒个泡泡.



等我先搞定qt的问题,然后测试,必须顶晕哥啊

离线

#11 2019-06-29 13:52:44

powerpan
会员
注册时间: 2019-05-05
累计积分: 12

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

晕哥 说:
zhenfanhei 说:

前面s3的mmc2  4bit sd nand上3.4上有识别到,4.13上好像没有识别到,

会不会是 IO,寄存器基地址和中断等资源配置不对呢?

我们看看是否可以解决这个问题吧
1. 上面有个地方bus_width应该是8的,没改
2. 修改pinctrl-sun8i-v3s.c
   add
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D1 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D2 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D3 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D4 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D5 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D6 */
    SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
          SUNXI_FUNCTION(0x0, "gpio_in"),
          SUNXI_FUNCTION(0x1, "gpio_out"),
          SUNXI_FUNCTION(0x2, "mmc2")),        /* D7 */

但是还不能用,说无法复位,发现在sunxi-mmc.c里面出错
[    2.403310] sunxi-mmc 1c11000.mmc: fatal err reset timeout
[    2.408816] sunxi_mmc_probe  -5
[    2.412372] sunxi-mmc: probe of 1c11000.mmc failed with error -5
因为  0x1c11000 读到的返回值是2,而不是0

但是测试过,所有的管脚配置都是对的,
0x1c20848, 0x1c2084c管脚设置都是2了

而且在用户态写复位也没问题
busybox devmem 0x1c11000 32 7
busybox devmem 0x1c11000 返回低三位0

最近编辑记录 powerpan (2019-06-29 14:41:34)

离线

#12 2019-06-29 15:16:23

aozima
会员
注册时间: 2019-05-25
累计积分: 13

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

还是1bit省IO

离线

#13 2019-06-29 15:23:03

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,956

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

那 4bit 可以用吗? 就是设备树什么都不用改,默认可以作为TF卡使用吗?

离线

#14 2019-06-29 15:39:06

powerpan
会员
注册时间: 2019-05-05
累计积分: 12

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

晕哥 说:

那 4bit 可以用吗? 就是设备树什么都不用改,默认可以作为TF卡使用吗?

复位不成功,其他都是浮云。我测试了去掉了spi了,不是spi引起的冲突,但是肯定有啥冲突。。。否则不会到了用户态复位没问题,只要能正常加载,后面都好办

最近编辑记录 powerpan (2019-06-29 15:39:36)

离线

#15 2019-06-29 16:04:29

smartcar
会员
注册时间: 2018-02-19
累计积分: 362

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

有没有上拉,和这个有没有关系?

离线

#16 2019-07-15 11:42:19

powerpan
会员
注册时间: 2019-05-05
累计积分: 12

Re: 全志芯片主线Linux 启动 eMMC 8-bit 模式测试

问题解决了,感谢 冰淇琳 icenowy 的 patch,

drivers/clk/sunxi-ng/ccu-sun8i-v3s.c

CLK_MMC1下面增加 CLK_MMC2的时钟3行

        [CLK_MMC1]        = &mmc1_clk.common.hw,
        [CLK_MMC1_SAMPLE]    = &mmc1_sample_clk.common.hw,
        [CLK_MMC1_OUTPUT]    = &mmc1_output_clk.common.hw,
        [CLK_MMC2]        = &mmc2_clk.common.hw,
        [CLK_MMC2_SAMPLE]    = &mmc2_sample_clk.common.hw,
        [CLK_MMC2_OUTPUT]    = &mmc2_output_clk.common.hw,

启动能看到
root@LicheePi:~# ls /dev/mmcblk*
/dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk2boot0
/dev/mmcblk0p1  /dev/mmcblk2    /dev/mmcblk2boot1

离线

页脚