MTK6577+Android之MT6620移植到MT6628

MTK6577+Android之MT6620移植到MT6628

 

先来看MT6577系统方框图:

MTK6577+Android之MT6620移植到MT6628_第1张图片

图1

我们这里选择MT6628,这是WIFI、bluetooth、GPS和FM 四合一的模块,它通过UART/SDIO/PCM/I2C接口和MT6577通讯,其中WIFI和bluetooth共用天线。

 

1.     MT6628原理图设计

 

图2

1.1  MT6628电压控制

 MTK6577+Android之MT6620移植到MT6628_第2张图片

图3

 

MT6628引脚

描述

GPIO187--->PMU_EN

PMU enable

PMU_DSB

Disable PMU deep sleep mode(高电平关闭吗)

AVDD55_MISC

VBAT for internal circuit

AVDD55_SMPS

Battery voltage

VDD25_V2P5

Internal 2.5 power

VDD25_V2P5NA

Internal 2.5 power

AVDD28_PLL

2.8V PLL power

AVDD28_TLDO

2.8V TCXO(温补晶振) LDO ouput

AVDD28_TLDO_SW

Power source for TCXO

LXBK

Switching node of buck(降压的开关节点)

AVDD17_CLDO_IN

1.7V CLDO input

CLDO

1.2V core power LDO output

WFLDO

3.3V WIFI LDO output

 

之前PMU_EN是连接到TDD_TIMINGSYNC,是BPI的一个引脚,新设计PMU_EN连接到MSDC2_DAT1(GPIO187)

 

为了更好理解图3,我们给出MT6628的PMU电源连接图

MTK6577+Android之MT6620移植到MT6628_第3张图片

图4

推荐使用一般模式(normal mode)和低功耗模式(low-power mode),在一般模式下,RF和digital core LDO的电压源由直流变换器(DC-DC converter)提供,PA和TCXO (温补晶振)/XTAL(晶振) LDO直接有VBAT(电池电压)提供,1.8V或是2.8V的IO电压由host端提供,图4就是一般模式的电源连接关系图。

 

在系统睡眠模式下,PA LDO和TXCO/XTAL LDO被关闭,digital core LDO的电压由直流变换器切换到IO电压,直流变换器这时也被关闭。

 

1.2  MT6628的WIFI和bluetooth部分

 

(1)  天线部分

WIFI和bluetooth是共用同一个天线的,且天线要求是50欧阻抗匹配,如下图:

MTK6577+Android之MT6620移植到MT6628_第4张图片

图5

接着看天线相关原理图的另外一部分:

MTK6577+Android之MT6620移植到MT6628_第5张图片

图6

MT6628引脚

描述

AVDD33_TX_WBT

WIFI/BT power

AVDD16_TRX_WBT

WIFI/BT power

AVDD16_SX_WBT

WIFI/BT power

AVDD16_LF_WBT

WIFI/BT power

这里重点说明下ANTSEL0~2引脚的功能,先来看数据手册给出的引脚说明:

MTK6577+Android之MT6620移植到MT6628_第6张图片

图7

可以看出ANESETL0~2是多功能复用引脚,这里的PD是指pull down,strap pin我的理解是通过外部硬件连接不同的输入电平,来选择内部多功能选择的目的。这类pin往往有丰富的复用功能,比如在上电复位期间选择某种功能,但正常工作时又定义为其他用法。为了更好理解,我们给出数据手册中strap pin的说明:

MTK6577+Android之MT6620移植到MT6628_第7张图片

图8

结合图6,可知ANTSEL1连接AVDD28_TLDO_SW(2.8V),所以决定了MT6288采用XTAL(外部晶振)。ANTSEL2悬空,但是因为ANTSEL2内部下拉,默认选择的是SDIO,UART_RTS我们的设计是通过一个电阻接到GND,所以为0,也就是说WIFI采用SDIO接口,蓝牙采用UART接口。

 

(2)  数据和控制接口部分

 MTK6577+Android之MT6620移植到MT6628_第8张图片

图9

MTK6577引脚

MT6628引脚

描述

 

CLDO-->DVDD

1.2v core power

DVDD18_MIPITX

DVDDIO

I/O power(1.8V)

PMIC的VIO28

DVDDIO_SDIO

SDIO I/O power(2.8V)

32K_OUT

RTCCLK

RTC 32kHz clock input

 

备用电池正极--->VCCRTC

RTC power

DAICLK/GPIO63

PCM_CLK

见图10

DAIPCMIN/GPIO64

PCM_OUT

见图10

BTSYNC/GPIO65

PCM_SYNC

见图10

DAIPCMOUT/GPIO62

PCM_IN

见图10

LWRB(GPIO15/EINT18)

WIFI_INT_B

 

LPCE1B(GPIO13/EINT14)

BGF_INT_B

 

SYSRST_B

SYSRST_B

External system reset active low

MSDC3_CMD(GPIO91)

SDIO_CMD

SDIO interface command pin

MSDC3_CLK(GPIO92)

SDIO_CLK

SDIO interface clock pin

MSDC3_DAT0(GPIO94)

SDIO_DATA0

SDIO interface DATA0 pin

MSDC3_DAT1(GPIO90)

SDIO_DATA1

SDIO interface DATA1 pin

MSDC3_DAT2(GPIO89)

SDIO_DATA2

SDIO interface DATA2 pin

MSDC3_DAT3(GPIO93)

SDIO_DATA3

SDIO interface DATA3 pin

 

 

 

DAI:Digital AudioInterfaces,这是linux内核文档全称,目前支持的3种DAI接口有AC97、I2S和PCM,具体可参考\kernel\Documentation\sound\alsa\soc\DAI.txt文件,但是根据MT6288的数据手册说明:

MTK6577+Android之MT6620移植到MT6628_第9张图片

图10

根据图10又有PCM和DAI接口之分,再来MTK6577中这部分接口定义:

MTK6577+Android之MT6620移植到MT6628_第10张图片

图11

先说明BTSYNC的BT是指bit,下面从DAI.txt摘出关于PCM的一小部分:

PCM is another 4wire interface, very similar to I2S, which can support a more

flexible protocol.It has bit clock (BCLK) and sync (SYNC) lines that are used

to synchronise thelink whilst the Tx and Rx lines are used to transmit and

receive the audiodata. Bit clock usually varies depending on sample rate

whilst sync runsat the sample rate.

结合这些信息,我的理解就是AC97、I2S和PCM都是DAI接口,但不知道为什么MT6628这里(图10)却有DAI和PCM接口之分。

 

(3)   

 

1.3  MT6628的GPS部分

(1)  GPS天线部分

MTK6577+Android之MT6620移植到MT6628_第11张图片

图12

 

原来的原理图采用BGU7005,新设计改为MAX2659,SHDN引脚由TDD_AFC_SW (GPIO112)改为MSDC2_DAT2(GPIO185),低电平disable。

 

(2)  GPS数据及控制引脚部分

MTK6577+Android之MT6620移植到MT6628_第12张图片

图13

之前的设计BPI_GPS连接NLD8(GPIO206),现改为BPI_BUS8(GPIO118),记得选择为GPS_SYNC模式

 

 

 

 

2.     驱动修改

 

2.1  MT6620升级为MT6628的修改

 

2.1.1       ProjectConfiguration(项目配置)

 

确保\mediatek\config\prj\ProjectConfig.mk下面的配置项设置为相应的值,如下:

CUSTOM_HAL_COMBO=mt6628

CUSTOM_HAL_FMRADIO=mt6628(之前为空)

CUSTOM_HAL_ANT= mt6628_ant_m1(之前为mt6628_ant_m3经过测试都OK)

CUSTOM_KERNEL_FM=mt6628

MTK_BT_CHIP=MTK_MT6628

MTK_FM_CHIP=MT6628_FM

MTK_WLAN_CHIP=MT6628

MTK_COMBO_CHIP=MT6628

MTK_COMBO_CORE_DUMP_SUPPORT=yes(之前为no)

MTK_COMBO_QUICK_SLEEP_SUPPORT=yes(之前为no)

MTK_GPS_CHIP=MTK_GPS_MT6628

MTK_BT_FM_OVER_BT_VIA_CONTROLLER=no(之前为yes)

 

2.1.2       KernelConfigure(内核配置)

\mediatek\config\prj\autoconfig\kconfig\project

Config Items

MT6620

MT6628

CONFIG_MTK_COMBO_WIFI

CONFIG_MTK_COMBO_FM=m

#CONFIG_MTK_COMBO_FM=m is no set

CONFIG_MTK_MT6628_FM

#CONFIG_MTK_MT6628_FM is not set

CONFIG_MTK_MT6628_FM=m

 

 

2.1.3       SystemInit Script(系统初始化脚本)

除了上面项目配置和内核配置之外,还有一些地方需要修改

 

2.1.3.1 Steps(步骤)

找出所有带有MT6620的item地方,相应的MT6628的item,然后删除掉6620的,下面是带有6620 item的目录,但本人认为不需要删除。

\mediatek\source\external\mtk_wifi

\mediatek\custom\common\hal\combo

\mediatek\custom\common\hal\fmradio

\mediatek\custom\common\kernel\fm

\mediatek\source\kernel\drivers\fmradio

\mediatek\custom\common\hal\ant

\mediatek\source\kernel\drivers\combo\drv_wlan

\mediatek\source\kernel\drivers\fmradio\cust

 

 

2.1.3.2 FileLocation(文件位置,for normal mode and EM mode)

\mediatek\config\prj\init.project.rc文件

(1)  KernelModules(内核模块)

Config Items

MT6620

MT6628

FM kernel module

insmod /system/lib/modules/mt6620_fm_drv.ko

insmod /system/lib/modules/mtk_fm_priv.ko

insmod /system/lib/modules/mtk_fm_drv.ko—新增

insmod /system/lib/modules/mtk_fm_priv.ko

 

(2)  Servicerelated(服务相关的)

MT6620

service 6620_launcher /system/bin/6620_launcher 4000000 /system/etc/firmware/mt6620_patch_hdr.bin

    user system

    group system

    class core

MT6628

service 6620_launcher /system/bin/6620_launcher -m 1 -b 4000000 -p /system/etc/firmware/ -d /dev/ttyMT2

    user system

    group system

    class core

 

 

2.1.3.3 FileLocation(For Meta mode and Factory mode)

\mediatek\config\prj\meta_init.rc文件

\mediatek\custom\prj\factory\init.rc

(1)    KernelModules(内核模块)

Config Items

MT6620

MT6628

FM kernel module

insmod /system/lib/modules/mt6620_fm_drv.ko

insmod /system/lib/modules/mtk_fm_priv.ko

insmod /system/lib/modules/mtk_fm_drv.ko—新增

insmod /system/lib/modules/mtk_fm_priv.ko

 

(2)    Servicerelated(服务相关的)

MT6620

service 6620_launcher /system/bin/6620_launcher 4000000 /system/etc/firmware/mt6620_patch_hdr.bin

user system

group system

oneshot

MT6628

service 6620_launcher /system/bin/6620_launcher -m 1 -b 4000000 -p /system/etc/firmware/ -d /dev/ttyMT2

       user root

       group root

       上面这里为system或是root都OK

service stp_dump /system/bin/stp_dump3

       user root

       group root

 

 

2.2  WIFI

 

2.2.1       WIFI特征配置

 

(1)  WAPI

WAPI:Wireless Authentication PrivacyInfrastructure

我们可以通过修改\mediatek\config\prj\ ProjectConfig.mk的

MTK_WAPI_SUPPORT=yes来使能WAPI特征。

定义MTK_WAPI_SUPPORT=no,则关闭了WAPI特征。

 

(2)  WPS

WPS:Wi-Fi Protected Setup(Name of Certificate)

用户可以通过设置\mediatek\config\prj\system.prop下的ro.mediatek.wlan.wsc=1来支持WPS特征。如果不支持WPS特征,设置界面如下:

MTK6577+Android之MT6620移植到MT6628_第13张图片

图14

 

(3)  Wi-FiTethring(共享)

我们可以通过修改\mediatek\config\prj\ ProjectConfig.mk的

MTK_WIFI_HOTSPOT_SUPPORT=yes来支持WIFI网络共享,如果为no,则关闭WIFI共享,如下图:

MTK6577+Android之MT6620移植到MT6628_第14张图片

图15

 

(4)  WIFI DirectSetting

我们可以通过设置\mediatek\config\prj\ ProjectConfig.mk的

MTK_WIFI_P2P_SUPPORT=yes来支持WIFI Direct设置界面,如果为no,则关闭WIFI Direct的支持,如下图:

MTK6577+Android之MT6620移植到MT6628_第15张图片

图16

 

2.2.2       WIFI源代码结构和文件描述

(1)  \mediatek\source\kernel\drivers\combo\drv_wlan

这是WIFI驱动的source file(源文件),包含有mt6220和mt6628文件夹。

 

(2)  \mediatek\config\mt6577\autoconfig\kconfig

有一个platform文件,定义了内核默认的配置选项。

 

(3)  \mediatek\config\prj\autoconfig\kconfig

有个project文件,定义了和具体项目相关的内核配置选项。

 

(4)  \mediatek\config\common

有个ProjectConfig.mk,定义了默认的项目配置

 

(5)  \mediatek\config\prj

System.prop:默认的系统属性

Boardconfig.mk:板级相关的配置文件

Projectconfig.mk:和具体项目相关的配置文件

 

 

2.2.3       Build option(构建选项)

(1)  \mediatek\config\prj\autoconfig\kconfig\project

确保CONFIG_MTK_COMBO_WIFI=m,是为了使能MT6620/6628。

 

(2)  \mediatek\config\mt6577\autoconfig\kconfig\platform

CONFIG_WIRELESS_EXT=y

CONFIG_CFG80211=y(之前为m,这里我改为所要求的y)

 

(3)  \mediatek\config\prj\system.prop

确保安装下面正确的配置:

wifi.interface=wlan0

wifi.tethering.interface=ap0

wifi.direct.interface=p2p0

ro.mediatek.wlan.wsc=1

ro.mediatek.wlan.p2p=1(mtk官方文档给的是ro.mediatek.p2p=1,应该是笔误)

(4)  \mediatek\config\prj\BoardConfig.mk

BOARD_WPA_SUPPLICANT_DRIVER:= WEXT

BOARD_P2P_SUPPLICANT_DRIVER:= NL80211

HAVE_CUSTOM_WIFI_DRIVER_2:= true

HAVE_INTERNAL_WPA_SUPPLICANT_CONF:= true

HAVE_CUSTOM_WIFI_HAL:= mediatek

WPA_SUPPLICANT_VERSION:= VER_0_6_X

P2P_SUPPLICANT_VERSION:= VER_0_8_X

 

(5)  \mediatek\config\prj\ProjectConfig.mk

MTK_WLAN_SUPPORT=yes

MTK_WLAN_CHIP=MT6628

MTK_WIFI_P2P_SUPPORT=yes

 

(6)  \mediatek\config\common\ProjectConfig.mk

确保MTK_WIFI_HOTSPOT_SUPPORT = yes

 

mediatek\custom\common\kernel\wifi\mt592x\dummy.c

 

 

2.3  蓝牙

参考《Bluetooth_Driver_Customer_Document_MT6577_4.0》文档

mediatek\custom\common\kernel\btwlanem\btwlanem\btwlanem.c

 

2.4  GPS

参考《GPS_Driver_Customer_Document_MT6577_4.0》文档

 

3.     编译

 

./mk r k

make[4]: ***[silentoldconfig] Error 1

make[3]: ***[silentoldconfig] Error 2

make[2]: ***[sub-make] Error 2

make[5]: ***[silentoldconfig] Error 1

make[4]: ***[silentoldconfig] Error 2

make[3]: *** Norule to make target `include/config/auto.conf', needed by`include/config/kernel.release'.  Stop.

make[2]: ***[sub-make] Error 2

没有规则可以创建include/config/auto.conf,需要include/config/kernel.release

 

产品此问题atek\config\hsimobile77_ics2\autoconfig\kconfig\project如下:

 

#CONFIG_MTK_COMBO_FM=m------------------------这样引起编译问题

改为下面OK:

#CONFIG_MTK_COMBO_FM is not set--------------这样是OK的

 

但是我另一个同事在ubuntu10.04上就OK,我的是VM10+ubuntu14.04的,至于为什么会这样,我也说不清楚。

 

而且做了上面一些修改后,./mk n编译了之后WIFI、蓝牙和GPS功能都OK了,但由于我们产品没有FM,暂时无法验证。其他的编译似乎不行。

 

 

 

 

参考:

《ALPS_MT6620_MT6628_SW_Switch_SOP》

《YuSu_MT6620_Wi-Fi_driver_Customer_Document_4_0》

MTK Android 之MT6577驱动笔记

http://blog.csdn.net/cbk861110/article/details/9385439

 

kernel 编译错误修改贴

http://blog.csdn.net/angle_birds/article/details/19486523

 

编译内核出现:没有规则可以创建kernel.release需要的目标include/config/auto.conf

http://blog.csdn.net/hanmengaidudu/article/details/9492579

 

你可能感兴趣的:(MTK6577+Android之MT6620移植到MT6628)