如何解决fcc认证usb fail问题

在手机送FCC认证中,经常有项目会报出usb fail项,造成认证测试不过。
本文旨在提出一种fix 该测试项失败的方法。并不代表是唯一可行方案。

1.FCC认证测试

1.1. 步骤:

把手机当作U盘,与电脑互传数据

1.2 测试结果

FAIL:
FCC认证测试USB FAIL,连接电脑时,传输数据辐射值超标

1.3 测试结果报告

举例如下:
如何解决fcc认证usb fail问题_第1张图片
如何解决fcc认证usb fail问题_第2张图片
如何解决fcc认证usb fail问题_第3张图片

2. Debug过程

对于更换usb线仍然测试结果fail的情况。
一般可以调整手机的usb DP/DM的驱动能力来解决这个问题。
如下以sprd 9832平台为例,说明如何fix 该usb fcc认证失败问题。

查看spec中 usb controller的phy寄存器
如何解决fcc认证usb fail问题_第4张图片
如何解决fcc认证usb fail问题_第5张图片
对于sprd 9832平台来说,如下命令确认一下默认软件版本的usb controller寄存器0x20e0302c返回的数值。
lookat -l 4 0x20e0302c
[I] nword = 0x4
ADDRESS | VALUE
-----------±----------
0x20e0302c | 0x15100001
0x20e03030 | 0x00101ea8
0x20e03034 | 0x00000000
0x20e03038 | 0x00000000
如上结果可知0x20e0302c寄存器默认软件版本的配置数值即为0x15100001。得知28:27bit的数值为10,对应驱动能力为2.6mA。
通常硬件测试工程师会要求降低或者提高这个驱动能力以解决这个问题。
可以参考如下修改usb 驱动code。如下修改是降低dp/dm的驱动能力,把28:27bit的10修改为01

3. solution

修改代码如下

@bjand01:~/code/4-sprdroid8.1/kernel$ git diff
diff --git a/drivers/usb/phy/phy-sprd-musb.c b/drivers/usb/phy/phy-sprd-mu
index 85a5623..3a10ef9 100644
--- a/drivers/usb/phy/phy-sprd-musb.c
+++ b/drivers/usb/phy/phy-sprd-musb.c
@@ -202,8 +202,9 @@ static int sprd_hsphy_init(struct usb_phy *x)
        writel_relaxed(reg1, PHY_REG_BASE + REG_AP_AHB_OTG_PHY_CTRL);

        reg1 = readl_relaxed(PHY_REG_BASE + REG_AP_AHB_OTG_CTRL0);
-       reg1 &= ~BIT_AP_AHB_USB20_TUNEHSAMP(3);
-       reg1 |= BIT_AP_AHB_USB20_TUNEHSAMP(2);
+       //reg1 &= ~BIT_AP_AHB_USB20_TUNEHSAMP(3);
+       //reg1 |= BIT_AP_AHB_USB20_TUNEHSAMP(2);
+  reg1 = 0x0D100001;
        writel_relaxed(reg1, PHY_REG_BASE + REG_AP_AHB_OTG_CTRL0);

你可能感兴趣的:(技术总结)