WP7607 SDIO voltage levels

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?

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”);

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,

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

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,

4.5 Better consult the wifi vendor

  1. If i remember correctly, the default voltage for sd is 3V
  1. Another method is to use level shifter, you can refer to the mangoh schematic

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

Do you use level shifter?

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

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.

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

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");