迅為iTOP4412開發板上如何移植SDIO介面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 的。 本文件需要用到的工具包可以