In recent project, I was assigned a task to bring up Wi-Fi and Bluetooth. We used WL1835MOD combo module from TI to implement these two wireless features. After porting kernel drivers and application software, I found both features were malfunctioning. So I started checking the hardware.
Here’s the WLAN power-up sequence from WL1835MOD datasheet:
I probed the pads in the same order showing on the power-up sequence. VBAT
looked good and SLOWCLK
(aka EXT_32K
) was a perfect 32KHz slow clock. But WL_EN
(aka WLAN_EN
) seemed abnormal.
On WL1835MOD datasheet, voltage level of both WLAN_EN
and BT_EN
should be 1.8V:
As WLAN_EN
pin was controlled by kernel driver, for the sake of convenience of debugging, I exported WLAN_EN
pin as an independent GPIO and toggled it between low and high, and found the voltage level was only 0.9V when set as high. So I checked the schematics along the circuit path of WLAN_EN
from WL1835MOD to host CPU and found this part:
The voltage level before R89
(WIFI_EN_1V8
from host CPU) was 1.8V, but after R89
(at test point TP18
) was only 0.9V. Same behavior was observed for BLUETOOTH_EN_1V8
and TP22
.
It’s a bit weird that there’s a voltage divider here. After consulting hardware engineer, I got the answer. On our previous product, the input voltage level was 3.3V, so we used a voltage divider to lower the voltage to 1.8V for WLAN_EN
and BT_EN
. On this new product, the voltage level from host CPU is already 1.8V, so we don’t need this voltage divider any more, but hardware engineer forgot to remove it.
After replacing R89
with direct connection, Wi-Fi worked properly, but Bluetooth didn’t. But that’s another topic. I’ll describe it in a new post.
Hardware engineer will remove the voltage divider in next build.