# WP7607 SDIO voltage levels

**URL:** <https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206>\
**Category:** Uncategorized\
**Created:** [May 22, 2020, 9:52pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206 "2020-05-22T21:52:36Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [May 22, 2020, 9:52pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/1 "2020-05-22T21:52:36Z")

</div>

The SDIO data lines voltage is specified in the datasheet to have two levels 1.8V/2.85V

Is there a way to tell the WP7607 to use SDIO data signals at 1.8V and if yes how?

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/jyijyi/32/822_2.png) [@jyijyi](https://forum.legato.io/u/jyijyi)\
**Post date:** [May 23, 2020, 4:06am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/2 "2020-05-23T04:06:33Z")

</div>

Seems this is controlled by protocol negotiation.

I saw the folowing in yocto source about mmc card which seems can set the voltage, you can give a try:

/kernel/driver/mmc/core/core.c, in function mmc\_power\_up(),

mmc\_set\_ios(host);  
/\* Try to set signal voltage to 3.3V but fall back to 1.8v or 1.2v \*/  
// if (\_\_mmc\_set\_signal\_voltage(host, MMC\_SIGNAL\_VOLTAGE\_330) == 0)  
// dev\_dbg(mmc\_dev(host), “Initial signal voltage of 3.3v\n”);  
// else if (\_\_mmc\_set\_signal\_voltage(host, MMC\_SIGNAL\_VOLTAGE\_180) == 0)  
if (\_\_mmc\_set\_signal\_voltage(host, MMC\_SIGNAL\_VOLTAGE\_180) == 0)  
dev\_dbg(mmc\_dev(host), “Initial signal voltage of 1.8v\n”);  
else if (\_\_mmc\_set\_signal\_voltage(host, MMC\_SIGNAL\_VOLTAGE\_120) == 0)  
dev\_dbg(mmc\_dev(host), “Initial signal voltage of 1.2v\n”);

---

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [May 30, 2020, 8:46am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/3 "2020-05-30T08:46:52Z")

</div>

Thanks for the info, this solved part of the problem

Our application is battery operated and as such the Wi-Fi module is switched off until it is needed  
We see that on power up the WP7607 tries to access the SDIO bus in 1.8V and then in 2.85V and then it decides that there is no SDIO user.  
1 - is it possible to stop the WP7607 from searching SDIO device on power up?  
2 - is there a HW siganl that the WP7607 is checking to decide if to start negotiations on the SDIO bus?  
3 - How to restart the SDIO bus negotiation on demand (after Wi-Fi module power up) and to ensure it does the negotiations only at 1.8V?  
4 - is there a special procedure to do before disconnecting the communication with the Wi-Fi module so it can be switched off?  
5 - Is it possible to save last session parameters in order to reestablish connection with the Wi-Fi module faster next time the Wi-Fi module is powered?

Thanks,

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/jyijyi/32/822_2.png) [@jyijyi](https://forum.legato.io/u/jyijyi)\
**Post date:** [May 30, 2020, 9:41am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/4 "2020-05-30T09:41:33Z")

</div>

1. Have you tried the sd card detect pin?
2. Better consult the wifi vendor

---

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [May 30, 2020, 10:10am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/5 "2020-05-30T10:10:32Z")

</div>

Thanks for the prompt response

Please answer on points 1, 4 & 5  
point 3 - I found a possible answer in StackExchange Linux forum, I’ll try it

Thanks,

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/jyijyi/32/822_2.png) [@jyijyi](https://forum.legato.io/u/jyijyi)\
**Post date:** [May 30, 2020, 12:24pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/6 "2020-05-30T12:24:38Z")

</div>

4.5 Better consult the wifi vendor

1. If i remember correctly, the default voltage for sd is 3V

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/jyijyi/32/822_2.png) [@jyijyi](https://forum.legato.io/u/jyijyi)\
**Post date:** [June 1, 2020, 12:05am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/7 "2020-06-01T00:05:39Z")

</div>

1. Another method is to use level shifter, you can refer to the mangoh schematic

---

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [June 1, 2020, 1:42pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/8 "2020-06-01T13:42:50Z")

</div>

Thanks,  
We managed to make the WP7607 work only at 1.8V SDIO signal levels

---

<div class="post-metadata">

**Author:** ![jyijyi](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/jyijyi/32/822_2.png) [@jyijyi](https://forum.legato.io/u/jyijyi)\
**Post date:** [June 1, 2020, 2:14pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/9 "2020-06-01T14:14:18Z")

</div>

Do you use level shifter?

---

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [June 1, 2020, 2:26pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/10 "2020-06-01T14:26:19Z")

</div>

No, we managed to find the place in the SDIO driver and modify it to work only at 1.8V

---

<div class="post-metadata">

**Author:** ![tjayaprakash](https://avatars.discourse-cdn.com/v4/letter/t/958977/32.png) [@tjayaprakash](https://forum.legato.io/u/tjayaprakash)\
**Post date:** [August 12, 2020, 9:47am UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/11 "2020-08-12T09:47:24Z")

</div>

Hi Ymark,

Can you let us know where in the SDIO driver the value of 3V was changed to 1.8V.

Currently, we have a custom board, where we r using WP7606 and Talon Wifi wl18xx module connected to SDIO lines.  
As in the MangoH red board, we do not have a level translator to 3V.

Your solution might help in getting this working.

---

<div class="post-metadata">

**Author:** ![TalonCom](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.legato.io/taloncom/32/997_2.png) [@TalonCom](https://forum.legato.io/u/TalonCom)\
**Post date:** [August 25, 2020, 5:20pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/12 "2020-08-25T17:20:08Z")

</div>

The Mirage WiFi WL18 card uses 1.8v for all interface lines.

---

<div class="post-metadata">

**Author:** ![Ymark](https://avatars.discourse-cdn.com/v4/letter/y/0ea827/32.png) [@Ymark](https://forum.legato.io/u/Ymark)\
**Post date:** [September 6, 2020, 3:31pm UTC](https://forum.legato.io/t/wp7607-sdio-voltage-levels/5206/13 "2020-09-06T15:31:41Z")

</div>

Hi,

Below is the code I received from our software engineer  
Hope this will help you

BR  
Yehuda

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c  
index 367f3b225f11…ed81829ce685 100644  
— a/drivers/mmc/core/core.c  
+++ b/drivers/mmc/core/core.c  
@@ -2699,11 +2699,11 @@ void mmc\_power\_up(struct mmc\_host \*host, u32 ocr)  
host-\>ios.timing = MMC\_TIMING\_LEGACY;  
mmc\_set\_ios(host);

- 

```
  /* Try to set signal voltage to 3.3V but fall back to 1.8v or 1.2v */

```

- 

```
  if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330) == 0)

```

- 

```
  /* Try to set signal voltage to 1.8V but fall back to 3.3v or 1.2v */

```

- 

```
  if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180) == 0)

```

- 

```
           dev_dbg(mmc_dev(host), "Initial signal voltage of 1.8v\n");

```

- 

```
  else if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330) == 0)
          dev_dbg(mmc_dev(host), "Initial signal voltage of 3.3v\n");

```

- 

```
  else if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180) == 0)

```

- 

```
          dev_dbg(mmc_dev(host), "Initial signal voltage of 1.8v\n");
  else if (__mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120) == 0)
          dev_dbg(mmc_dev(host), "Initial signal voltage of 1.2v\n");

```
