MTK6577+Android之MT6620移植到MT6628
先来看MT6577系统方框图:
图1
我们这里选择MT6628,这是WIFI、bluetooth、GPS和FM 四合一的模块,它通过UART/SDIO/PCM/I2C接口和MT6577通讯,其中WIFI和bluetooth共用天线。
1. MT6628原理图设计
图2
1.1 MT6628电压控制
图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电源连接图
图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欧阻抗匹配,如下图:
图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引脚的功能,先来看数据手册给出的引脚说明:
图7
可以看出ANESETL0~2是多功能复用引脚,这里的PD是指pull down,strap pin我的理解是通过外部硬件连接不同的输入电平,来选择内部多功能选择的目的。这类pin往往有丰富的复用功能,比如在上电复位期间选择某种功能,但正常工作时又定义为其他用法。为了更好理解,我们给出数据手册中strap pin的说明:
图8
结合图6,可知ANTSEL1连接AVDD28_TLDO_SW(2.8V),所以决定了MT6288采用XTAL(外部晶振)。ANTSEL2悬空,但是因为ANTSEL2内部下拉,默认选择的是SDIO,UART_RTS我们的设计是通过一个电阻接到GND,所以为0,也就是说WIFI采用SDIO接口,蓝牙采用UART接口。
(2) 数据和控制接口部分
图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的数据手册说明:
图10
根据图10又有PCM和DAI接口之分,再来MTK6577中这部分接口定义:
图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天线部分
图12
原来的原理图采用BGU7005,新设计改为MAX2659,SHDN引脚由TDD_AFC_SW (GPIO112)改为MSDC2_DAT2(GPIO185),低电平disable。
(2) GPS数据及控制引脚部分
图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特征,设置界面如下:
图14
(3) Wi-FiTethring(共享)
我们可以通过修改\mediatek\config\prj\ ProjectConfig.mk的
MTK_WIFI_HOTSPOT_SUPPORT=yes来支持WIFI网络共享,如果为no,则关闭WIFI共享,如下图:
图15
(4) WIFI DirectSetting
我们可以通过设置\mediatek\config\prj\ ProjectConfig.mk的
MTK_WIFI_P2P_SUPPORT=yes来支持WIFI Direct设置界面,如果为no,则关闭WIFI Direct的支持,如下图:
图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