cancel
Showing results for 
Search instead for 
Did you mean: 

Error initializing wifi module with SDIO and voltage translation

DmnSd
Associate III

Hello all,

I'm getting following error on our custom board while initializing sdmmc3 as wifi module with SDIO:

~# dmesg | grep -i sdio -B 1
[    3.410271] mmci-pl18x 48004000.sdmmc: no support for card's volts
[    3.415001] mmc0: error -22 whilst initialising SDIO card
--
[    5.298030] mmci-pl18x 48004000.sdmmc: no support for card's volts
[    5.302938] mmc0: error -22 whilst initialising SDIO card
--
[    7.140215] mmci-pl18x 48004000.sdmmc: no support for card's volts
[    7.144982] mmc0: error -22 whilst initialising SDIO card
--
[    8.930932] mmci-pl18x 48004000.sdmmc: no support for card's volts
[    8.935676] mmc0: error -22 whilst initialising SDIO card

Wifi module is a ST60-2230C (https://www.lairdconnect.com/documentation/datasheet-st60-2230c) with I/O signalling voltage 1V8.

Between STM32MP and ST60 module there are three voltage translators which translate 3V3 (STM32MP) to 1V8 (ST-60). See attached schematics snippet.

This is device tree configuration:

&sdmmc3{
	arm,primecell-periphid = <0x10153180>;
	pinctrl-names = "default", "opendrain", "sleep";
	pinctrl-0 = <&sdmmc3_pins_mx>;
	pinctrl-1 = <&sdmmc3_opendrain_pins_mx>;
	pinctrl-2 = <&sdmmc3_sleep_pins_mx>;
	non-removable;
	st,neg-edge;
	st,use-ckin;
	bus-width = <4>;
	vmmc-supply = <&v3v3>;
	mmc-pwrseq = <&wifi_pwrseq>;
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";
 
	brcmf: bcrmf@1 {
		reg = <1>;
		compatible = "brcm,bcm4329-fmac";
	};
};
 
wifi_pwrseq: wifi-pwrseq {
	compatible = "mmc-pwrseq-simple";
	/* reset-gpios = <&gpioe 2 GPIO_ACTIVE_LOW>; */
	post-power-on-delay-ms = <100>;
	power-off-delay-us = <200000>;
};

and pin definition:

sdmmc3_pins_mx: sdmmc3_mx-0 {
	pins1 {
		pinmux = <STM32_PINMUX('D', 0, AF10)>; /* SDMMC3_CMD */
		bias-pull-down;
		drive-push-pull;
		slew-rate = <1>;
	};
	pins2 {
		pinmux = <STM32_PINMUX('D', 1, AF10)>, /* SDMMC3_D0 */
				 <STM32_PINMUX('D', 4, AF10)>, /* SDMMC3_D1 */
				 <STM32_PINMUX('D', 7, AF10)>, /* SDMMC3_D3 */
				 <STM32_PINMUX('F', 1, AF10)>, /* SDMMC3_CDIR */
				 <STM32_PINMUX('F', 2, AF10)>, /* SDMMC3_D0DIR */
				 <STM32_PINMUX('F', 4, AF10)>, /* SDMMC3_D123DIR */
				 <STM32_PINMUX('F', 5, AF9)>; /* SDMMC3_D2 */
		bias-disable;
		drive-push-pull;
		slew-rate = <1>;
	};
	pins3 {
		pinmux = <STM32_PINMUX('F', 0, AF10)>; /* SDMMC3_CKIN */
		bias-disable;
	};
	pins4 {
		pinmux = <STM32_PINMUX('G', 15, AF10)>; /* SDMMC3_CK */
		bias-disable;
		drive-push-pull;
		slew-rate = <3>;
	};
};

Can I configure STM32MP to use 1V8 I/O signalling? Or any other solutions?

Thanks for help!

Kind regards

Dmn

1 ACCEPTED SOLUTION

Accepted Solutions
PatrickF
ST Employee

Hi,

I'm not sure this setting will work, I'm not expert of this driver, but I hope driver is generic enough.

Did you cross check the level translator you used are using correct _DIR defaut polarity, i.e. 0 = Card -> MPU input , 1 = MPU output -> Card.

Check if this is missing

       st,sig-dir;

not sure if also

vqmmc-supply = <&xxxx>;

is required in your case.

see https://wiki.st.com/stm32mpu/wiki/SDMMC_device_tree_configuration

Regards,

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

View solution in original post

2 REPLIES 2
PatrickF
ST Employee

Hi,

I'm not sure this setting will work, I'm not expert of this driver, but I hope driver is generic enough.

Did you cross check the level translator you used are using correct _DIR defaut polarity, i.e. 0 = Card -> MPU input , 1 = MPU output -> Card.

Check if this is missing

       st,sig-dir;

not sure if also

vqmmc-supply = <&xxxx>;

is required in your case.

see https://wiki.st.com/stm32mpu/wiki/SDMMC_device_tree_configuration

Regards,

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

Thanks @PatrickF​ .

st,sig-dir;

did the trick.

My wifi module works!

Many thanks for fast & good answer!