1. 程式人生 > >迅為iTOP4412開發板上如何移植SDIO介面WIFI

迅為iTOP4412開發板上如何移植SDIO介面WIFI

近期需要把WiFi無線網路功能移植到在iTOP4412 開發平臺,查閱了相關資料,經過一段時間的研究、除錯,終於成功,將WiFi功能移植到了開發板上面,這裡筆者記錄移植過程及注意事項,方便以後工作需要。
    iTOP4412開發板的WiFi模組與板卡之間的連線採用SDIO介面,WiFi硬體模組使用的是MTK的MT6620晶片,MTK提供了Android4.0及Android4.4的driver, Porting Guid,有了這些就為我們的移植工作做了總體性的指導。

但是僅僅有MTK提供的文件還是遠遠不夠的,畢竟硬體介面定義不同,kernel版本也不同,Android層與MTK提供的程式碼也有差異,這就需要我們在MTK文件的指導下, Step  by Step 進行 Porting 工作.



移植環境:
    1  iTOP4412 精英版 +  MT6620 WiFi模組
    2  kernel  3.0.15  version
    3  Android4.4.4  
4  Ubuntu12.04  64BIt 開發環境


1.2  硬體相關部分
 下圖為WiFi模組與開發板連線的引腳定義,通過該介面可以看出WiFi模組與CPU的互動介面.



    檢視WiFi模組的原理圖可知,WiFi模組與CPU之間採用SDIO介面進行資料和命令的互動工作,Pin1,2,3,5,6,7 為SDIO介面,另外還需要Pin8,Pin10 UART 串列埠, 另外Pin18,Pin17用於串列埠流控,實際是可以不使用流控功能。 MT6620晶片是複合晶片,除了具備WiFi功能以後,還支援藍芽,FM,GPS功能,他們與CPU之間的通訊需要串列埠,另外MT6620韌體補丁的下載也是通過串列埠進行的,所以說串列埠是必不可少的硬體介面,即使您只使用該晶片的WiFi功能。


   除了SDIO介面,UART口以外,還需要與CPU進行互動的介面包括Pin16  PMU_EN ,使能引腳,預設低電平狀態,高電平有效。
  Pin15  WiFI_RESET引腳,預設低電平狀態,高電平有效,用於復位WiFi晶片; 
  Pin 13  WiFi INT  WiFI的中斷引腳,用於告知CPU有資料來了;


   以上這些引腳需要在BSP中配置,WiFI的驅動會通過這些引腳與MT6620晶片進行通訊;
另外需要強調的是WiFi模組佔用CPU的MMC3埠, 也可以說就是SDIO匯流排,關於MMC,SD,SDIO匯流排的來歷這裡不再描述,下圖為核心板WiFi相關部分:



    在iTOP4412 精英版中 mmc0,mmc1匯流排用於eMMC,mmc2用於TF卡,mmc3用於SDIO WiFi,關於wifi的其他硬體連線比如串列埠,使能(GPIO),復位(GPIO),中斷(GPIO)這裡不再貼出,具體的請檢視開發板的原理圖。


    這裡重點強調一下 HUB_CONNECT,也就是上圖中的L5 引腳,該引腳複用為mmc匯流排的CD引腳,也就是Card Detect引腳,用於告知MMC3控制器有裝置插入,屬於中斷引腳,我們需要把引腳與CPU的 某GPIO引腳連線:



    以上為iTOP4412 底板原理圖WiFi介面部分,請注意HUB_CONNECT引腳通過0歐電阻與6060_GPIO2進行了連線,6060_GPIO2為核心板GPIO引腳。

    這樣連線的目的是通過軟體輸出6060_GPIO2低電平,從而HUB_CONNECT引腳為低電平輸入狀態,MMC3控制認為有裝置插入到了MMC3總線上面,原理同TF卡,SD卡的檢測。

   以上為進行Porting前的準備工作,當然需要萬用表,示波器工具進行輔助的檢測,檢視WiFi模組的工作電壓是否正常,GPIO的當前狀態,MMC總線上面的時鐘及是否有資料從MMC3控制器輸出等等.

1.3  Kernel
1.3.1 概述
    iTOP4412開發板採用的是Linux 3.0.15 版本,MTK官方給的移植Porting沒有說明針對具體的 kernel版本,由於是Android4.4,所以kernel應該是3.0以後的版本或者更高支援;

   首先按照PoringGuid的指導說明,把New和Modify資料夾下面關於kernel部分的修改放到我們的kernel程式碼裡面,MT6620的驅動分兩個部分, 一部分放在driver/misc/目錄下面,資料夾名稱 mediatek,裡面存放的是WMT,既wireless manage tools, 裡面提供了與MT6620  download  firmware patch ,enable /disable WIFi晶片,power on, power off操作的相關驅動部分, 及SDIO匯流排裝置介面驅動Host Interface drivers,這些驅動工作正常後才開始載入WiFi 網路相關驅動。

   我們以驅動庫 .ko 的形式編譯驅動模組,driver/misc/mediatek/ 庫檔案與WiFi網路庫檔案 列表如下::

mtk_hif_sdio.ko ----mmc匯流排相關介面,mmc匯流排發現SDIO裝置,分配匯流排地址後,會與該驅動進行適配.適配成功後該驅動會呼叫WiFi網路驅動;
mtk_stp_uart.ko-----串列埠相關驅動,通過串列埠下載韌體補丁,設定晶片引數;
mtk_stp_wmt.ko-----core 部分,提供WiFi上電,斷電等等相關操作;
mtk_wmt_wifi.ko ----字元裝置驅動,建立裝置節點用於與使用者空間互動; 
wlan_mt6620.ko -- -- WiFi網路相關驅動,不需要我們進行修改;


另外這裡附一張MMC驅動框架圖:

   因為我們的MT6620模組掛載到了MMC總線上面,屬於MMC子系統的工作例項,我們非常有必要熟悉一下mmc驅動架構,是我們移植工作的非常重要的一部分,關於MMC子系統的詳細介紹這裡不再說明.




1.3.2 程式碼修改

1  根據硬體連線情況配置必要的平臺資源

 修改檔案:  kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

 關鍵函式1: 該函式配置WiFi相關的GPIO引腳為初始化輸出狀態,或者配置為中斷狀態
            WIFI驅動會改變這些引腳的狀態,這裡僅僅是初始化.


   static void __init mtk_combo_init(void)
    {

        //MT66XX PMUEN
        if(gpio_request(EXYNOS4_GPC1(0), "GPC1_0"))
        {
                printk(KERN_ERR "failed to request GPC1_0 for MT6620  PMUEN control\n");
        }
        //MT66XX SYSRST
        if(gpio_request(EXYNOS4_GPC1(1), "GPC1_1"))
        {
       printk(KERN_ERR "failed to request GPC1_1 for MT6620  SYSRST control\n");

        }
        s3c_gpio_cfgpin(EXYNOS4_GPC1(0), S3C_GPIO_OUTPUT);
        s3c_gpio_cfgpin(EXYNOS4_GPC1(1), S3C_GPIO_OUTPUT);

        gpio_direction_output(EXYNOS4_GPC1(0), 0);
        gpio_direction_output(EXYNOS4_GPC1(1), 0);


        gpio_free(EXYNOS4_GPC1(0));
        gpio_free(EXYNOS4_GPC1(1));

        mdelay(5);

        //need config eint models for Wifi & BGA Interupt
        if (gpio_request(EXYNOS4_GPX2(5), "WiFi INT"))
                printk(KERN_WARNING "MT6620 WiFi INT(GPX2.5) Port request error!!!\n");
        else    {
                s3c_gpio_setpull(EXYNOS4_GPX2(5), S3C_GPIO_PULL_NONE);
                s3c_gpio_cfgpin(EXYNOS4_GPX2(5), S3C_GPIO_SFN(0xF));
                gpio_free(EXYNOS4_GPX2(5));
        }

        if (gpio_request(EXYNOS4_GPX2(4), "BGF INT"))
                printk(KERN_WARNING "MT6620 BGA INT(GPX2.4) Port request error!!!\n");
        else    {
                s3c_gpio_setpull(EXYNOS4_GPX2(4), S3C_GPIO_PULL_NONE);
                s3c_gpio_cfgpin(EXYNOS4_GPX2(4), S3C_GPIO_SFN(0xF));
                gpio_free(EXYNOS4_GPX2(4));
        }

        //normal it is high level
        if (gpio_request(EXYNOS4_GPX3(2),  "6260_GPIO2")!=0) {
             printk("[mt6620] ERROR:Cannot request 6260_GPIO2\n");
         } else {
             gpio_direction_output(EXYNOS4_GPX3(2), 1);/* WLAN_CHIP_PWD */
             gpio_set_value(EXYNOS4_GPX3(2), 1);
             mdelay(100);
             gpio_free(EXYNOS4_GPX3(2));
}

    return; }



關鍵函式2: setup_mt6620_wlan_power_for_onoff

    該函式為匯出函式,WIFi驅動會呼叫該函式,該函式關鍵地方是讓MMC控制器驅動掃描MMC總線上面的裝置,MMC掃描到了WiFI模組才會載入相應的WiFi驅動,這裡是主動讓MMC掃描,我們的SD卡是採用中斷觸發的方式掃描,他們本質上都是掃描MMC總線上面的新裝置,然後載入對應的裝置驅動,具體的可以看一下MMC子系統相關內容.

函式所屬檔案: kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

void setup_mt6620_wlan_power_for_onoff(int on)
{
    int chip_pwd_low_val;
    int outValue;

    printk("[mt6620] +++ %s : wlan power %s\n",__func__, on?"on":"off");

#if 1
    if (on) {
         outValue = 0;
    } else {
        outValue = 1;
    }

   if (gpio_request(EXYNOS4_GPX3(2),  "6260_GPIO2")!=0) {
        printk("[mt6620] ERROR:Cannot request 6260_GPIO2\n");
    } else {
        gpio_direction_output(EXYNOS4_GPX3(2), 1);/* WLAN_CHIP_PWD */
        gpio_set_value(EXYNOS4_GPX3(2), outValue);
        mdelay(100);
        gpio_free(EXYNOS4_GPX3(2));
   }

    if(on)
    {
     //need reset on mt6620 ? need test......
    }
#endif

    extern void sdhci_s3c_sdio_card_detect(struct platform_device *pdev);

   // mdelay(200);

   //need sdhc controler check wifi catd states......
   sdhci_s3c_sdio_card_detect(&s3c_device_hsmmc3);

   printk("[mt6620] --- %s\n",__func__);

}
EXPORT_SYMBOL(setup_mt6620_wlan_power_for_onoff);


關鍵結構體: 該結構體告訴WiFi驅動相關部分使用了平臺的哪些GPIO資源.
結構體所屬檔案: kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

  static struct mtk_wmt_platform_data mtk_wmt_pdata = {
        .pmu =EXYNOS4_GPC1(0), //RK30SDK_WIFI_GPIO_POWER_N,//RK30_PIN0_PB5, //MUST set to pin num in target system
        .rst = EXYNOS4_GPC1(1),//RK30SDK_WIFI_GPIO_RESET_N,//RK30_PIN3_PD0, //MUST set to pin num in target system
        .bgf_int=EXYNOS4_GPX2(4), //IRQ_EINT(20),//RK30SDK_WIFI_GPIO_BGF_INT_B,//RK30_PIN0_PA5,//MUST set to pin num in target system if use UART interface.
        .urt_cts = -EINVAL, // set it to the correct GPIO num if use common SDIO, otherwise set it to -EINVAL.
        .rtc = -EINVAL, //Optipnal. refer to HW design.
        .gps_sync = -EINVAL, //Optional. refer to HW design.
        .gps_lna = -EINVAL, //Optional. refer to HW design.
    };
    static struct mtk_sdio_eint_platform_data mtk_sdio_eint_pdata = {
        .sdio_eint = EXYNOS4_GPX2(5),//IRQ_EINT(21) ,//RK30SDK_WIFI_GPIO_WIFI_INT_B,//53, //MUST set pin num in target system.
    };
    static struct platform_device mtk_wmt_dev = {
        .name = "mtk_wmt",
        .id = 1,
        .dev = {
        .platform_data = &mtk_wmt_pdata,
        },
    };
    static struct platform_device mtk_sdio_eint_dev = {
        .name = "mtk_sdio_eint",
        .id = 1,
        .dev = {
        .platform_data = &mtk_sdio_eint_pdata,

相關推薦

購買開發後在iTOP4412開發移植SDIO介面WIFI方法

       近期需要把WiFi無線網路功能移植到在iTOP4412 開發平臺,查閱了相關資料,經過一段時間的研究、除錯,終於成功,將WiFi功能移植到了開發板上面,這裡筆者記錄移植過程及注意事項,方便以後工作需要。     iTOP4412開發板的WiFi模組與板卡之間

iTOP4412開發如何移植SDIO介面WIFI

近期需要把WiFi無線網路功能移植到在iTOP4412 開發平臺,查閱了相關資料,經過一段時間的研究、除錯,終於成功,將WiFi功能移植到了開發板上面,這裡筆者記錄移植過程及注意事項,方便以後工作需要。    iTOP4412開發板的WiFi模組與板卡之間的連線採用SDIO

【分享】iTOP4412開發-Android系統屏幕旋轉設置

原生 android4 代碼 豎屏 == watermark ont 分辨率 軟件 1.1概述 Android4.0,Androd4.4源代碼能夠編譯成手機模式和平板模式,訊為iTop4412 開發平臺 的Android系統默認編譯為平板模式。客戶須要依據自己的產品

4412開發sqlite3移植

1 sqlite3原始碼下載 2 sqlite3原始碼編譯 $ tar -zxvf sqlite-autoconf-3250200.tar.gz $ cd sqlite-autoconf-3250200 $ touch build.sh 內容如下: ./con

【分享】iTOP4412開發-Android系統螢幕旋轉設定

1.1概述 Android4.0,Androd4.4原始碼可以編譯成手機模式和平板模式,訊為iTop4412 開發平臺 的Android系統預設編譯為平板模式。客戶需要根據自己的產品設計及應用環境,切換螢幕 的顯示方向,或者固定好一個顯示方向,例如產品中使用不同解析度的顯

JLINKv9在iTop4412精英的應用

很多人買迅為iTop4412精英板,在Android或Linux+Qt跑起來後學習開發除錯應用程式或驅動,但在linux核心執行前發生了什麼?能進行什麼開發工作?並沒有完整資料。其實,只要一根百元價位的JLINKv9,就可以搭建一個實用的boot階段程式開發環境,使我們可以

[學習開發怎麽選]4412開發幫你入門嵌入式

電源管理 host 支持 href taobao dip 串口 reset 完整版 豐富選配模塊 入門視頻教程(購買後提供完整版高清教程)部分視頻觀看地址: 【視頻教程】iTOP-4412開發板之學習方法--致初學者 http://v.youku.co

嵌入式開發平臺 6818開發接口詳解

嵌入式開發 6818開發板 接口介紹 迅為八核iTOP-6818開發板接口詳解:iTOP-4418接口圖:iTOP-6818核心板:iTOP-6818開發板接口詳解:1.POWER電源接口電源輸入為5V/2A+,給核心板AXP228電源管理芯片提供5V電源,給底板供電。2. SWITCH電源開關輕

IMX6開發-imx6開發 Cortex A9四核 硬件介紹

imx6摘要: 處理器:Freescale Cortex-A9四核 i.MX6Q主頻 1 GHz 核心板配置:2GB DDR3內存 16GB EMMC存儲 擴展引腳多大320個 運行溫度-20°到+80°之間 豐富接口:支持全網通4G模塊、GPS模塊、WIFI藍牙、SATA接口、千兆以太網、CAN總線、CAM

嵌入式開發ARM開發-4418開發接口基本介紹

4418開發板 接口介紹 迅為4418開發板無縫兼容6818平臺,是北京迅為電子有限公司研發設計的一款開發板平臺,核心板尺寸小,引出腳多,能夠幫助工程師們快速開發新產品。行業應用:iTOP-4418開發板/6818開發板可廣泛適用於工控、智能家居、醫療、多媒體、安防、車載、金融、消費電子、手持設備、顯

iMX6開發支持單核,雙核,四核處理器,客戶產品選擇提供靈活性

操作 數據 https 默認 大內存 介紹 采購 用戶需求 tope 本文轉自迅為:http://topeetboard.com 店鋪:https://arm-board.taobao.com 處理器:Freescale Cortex-A9 四核 i.MX6Q 主頻 1.2

恩智浦IMX6開發選哪家?imx6開發平臺運行怎麽樣?

https tao androi 打開 加速度 觸控 平板電腦 需要 燒寫 iTOP-i.MX6 開發板預裝 Android4.4 系統,采用 9.7 寸(或者 7 寸或者 4.3 寸)IPS 屏 幕,至少 5 點以上觸控,操作流暢,無論是高清視頻、遊戲等都會有上佳的表現,

4418開發/6818開發教你如何修改屏幕

mov null pda 暫時 down ide layer 開發平臺 圖1 開發平臺:迅為iTOP-4418/6818開發板 4418&6818屏幕修改分別需要修改uboot和內核,首先是修改uboot。 1.首先進入到android源碼目錄下: 圖1 4

圍觀IMX6開發QT下LVDS和HDMI如何雙屏異顯的

graphics item 環境 width 開始 blog 雙屏 dmi ats 首先將迅為-IMX6開發板分別連接9.7寸屏和HDMI顯示器 然後使用MfgTool工具燒寫QT系統 然後撥碼開關設置成從emmc啟動 在uboot命令行下設置開發板為9.7寸屏顯示(這樣也

iMX6UL開發多路串口開發接口詳解

硬件 實時時鐘 3.3 cde 開發 bcf bsp com one 迅為iMX6UL開發板 一.底板硬件描述: 1. POWER 電源接口 電源輸入為5V/2A+,給核心板提供5V電源,給底板供電。 原理圖部分如下圖所示。 電源接口位置如下圖所示。

-IMX6開發十層PCB制造,24小時開機測試,滿負荷測試運行倆天,沒有死機

pow 接口 sca 加速度 AD 按鍵 gps AC 更多 迅為-IMX6開發板——工業主板的優勢 1、元器件 IMX6工業主板選料,選用經過長時間、高要求驗證元器件,保證產品在復雜條件下,耐高溫、抗潮濕等工業場合的需求。 2、PCB設計 IMX6工業主板采用的是10層

關於訊iTop4412開發燒錄Ubuntu的問題解決辦法

為了開發需要,專門在ARM9裡面想燒錄Ubuntu系統,發現官方給的文件會出現各種各樣的問題,經過一個禮拜的探究,也換了很多張TF卡(2G、4G、8G、16G)燒錄,最後找到問題的根源:Uboot映象大小的問題。 選擇514KB的映象檔案,不要選用444KB的映象檔案,不要問為什麼(因為燒錄很

6818開發Ubuntu系統下CAN 測試使用文檔

.com watermark network color arm 燒寫 控制 com mod 平臺:iTOP-6818開發板系統:Ubuntu12.04主要是在 Ubuntu 系統環境下 iTOP-4418 和 6818 的 CAN 實驗調試步驟。給用戶提供了“can_li

CortexA7工業級-iMX6UL開發硬體和資料介紹

CortexA7工業級迅為-iMX6UL開發板硬體和資料介紹 商業級核心板 ARM Cortex-A7架構 主頻高達528 MHz 核心板512M DDR記憶體 8G EMMC 儲存 執行溫度:-20℃ ~ +80℃ CPU整合電源管理 核心板尺寸僅:42mm*3

【資料分享】4412開發核心的4.3寸螢幕logo修改方法

平臺: iTOP-4412開發板+4.3寸螢幕 問題:4.3寸螢幕-logo修改   本文件主要介紹 iTOP-4412 開發板,4.3 寸螢幕,核心 logo 修改過程。預設的映象,在 4.3 寸螢幕上是不顯示核心 logo 的。 本文件需要用到的工具包可以