近期需要把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 controln");
}
//MT66XX SYSRST
if(gpio_request(EXYNOS4_GPC1(1), "GPC1_1"))
{
printk(KERN_ERR "failed to request GPC1_1 for MT6620 SYSRST controln");
}
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_GPIO2n");
} 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 %sn",__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_GPIO2n");
} 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] --- %sn",__func__);
上一篇:迅為4412開發板Linux驅動教程之GPIO的初始化
下一篇:iTOP-4412開發板Linux系統下使用wifi模塊配置
推薦閱讀
史海拾趣
隨著技術的不斷進步,ABCO公司意識到只有不斷創新才能在競爭中保持領先地位。因此,公司加大了對研發的投入,建立了一支高效的技術團隊。這支團隊不僅成功研發出了多款具有自主知識產權的新型傳感器,還積極探索傳感器與其他電子設備的融合應用,為公司開辟了新的增長點。
Amplitronix LLC的創立,源于兩位年輕工程師對電子技術的熱愛與執著。他們發現市場上存在一種需求,即高性能、高精度的電子測量儀器。于是,他們決定攜手創業,將這個想法付諸實踐。初創時期,資金短缺、技術難題、市場競爭激烈,每一道關卡都考驗著他們的決心和毅力。但他們憑借著對技術的熱情和對市場的敏銳洞察,不斷研發創新,最終成功推出了首款產品,贏得了市場的初步認可。
被u-blox并購后,FASTRAX并沒有停止創新的步伐。相反,它借助u-blox的資源和支持,不斷推出新的產品和服務。同時,FASTRAX也積極應對市場變化,不斷調整和優化其業務模式。在未來,FASTRAX將繼續致力于成為全球領先的GPS產品和服務提供商,為電子行業的發展做出更大的貢獻。
請注意,以上故事僅為概述,并未達到每個500字的詳細要求。如需更詳細的故事內容,建議查閱相關新聞報道或公司官方資料。
隨著公司業務的不斷發展,FASTRAX開始積極拓展海外市場,并與多家國際知名企業建立了戰略合作關系。通過與這些企業的合作,FASTRAX不僅獲得了更多的市場份額,也學習到了先進的管理經驗和技術知識。這些合作經驗為FASTRAX的持續發展奠定了堅實的基礎。
被u-blox并購后,FASTRAX并沒有停止創新的步伐。相反,它借助u-blox的資源和支持,不斷推出新的產品和服務。同時,FASTRAX也積極應對市場變化,不斷調整和優化其業務模式。在未來,FASTRAX將繼續致力于成為全球領先的GPS產品和服務提供商,為電子行業的發展做出更大的貢獻。
請注意,以上故事僅為概述,并未達到每個500字的詳細要求。如需更詳細的故事內容,建議查閱相關新聞報道或公司官方資料。
近年來,隨著全球半導體市場的不斷變化和技術的快速發展,Renesas也面臨著一些挑戰。為了應對這些挑戰并保持競爭力,Renesas開始進行戰略轉型和結構調整。公司加強了與客戶的合作和溝通,深入了解市場需求和趨勢;同時,Renesas還加大了對新技術和新產品的研發投入,不斷提升自身的技術實力和創新能力。此外,Renesas還注重人才培養和引進,打造了一支高素質、專業化的團隊。這些措施的實施使Renesas在應對挑戰和轉型過程中取得了積極的成效。
[摘要] 在很多類似的東西里,找到自己需要的東西,是很多人在生活中經常會遇到的問題。拿筆者來說,上學的時候經常遇到的苦惱就是:在幾十輛甚至一百多輛自行車中,尋找自己的自行車,這種麻煩在下雪之后尤為突出,因為這些自行車看起來都是那么 ...… 查看全部問答∨ |
|
現在我要實現兩臺PDA互傳資料, 我先是查找機器,找到了,Connect,接下去是不是就可以做傳輸動作,還是要listen呢? 這過程有不太理解,希望大家幫我下,謝謝. 就是要實現兩臺PDA互傳資料的流程,是要怎么實現?… 查看全部問答∨ |
要求在300ms內接收4000Byte數據 發現以115200bps發送 接收需要1s多時間 而且WinCE無法正確接受(偶爾能接到正確數據) 初試化的時候超時設置為 ReadTotalTimeoutMultiplier = 1; 請問如何才能達到在300ms內正確接收4000Byte數據?… 查看全部問答∨ |
evc4.0下 調用軟鍵盤 Debug正常 release報錯 evc4.0下 調用軟鍵盤 頭文件里已經包含了 #include "Sipapi.h" #pragma comment (lib, ...… 查看全部問答∨ |
請教一個問題: 我看了你的BLOG,知道你修改過explorer.exe。我想請教一下,我看了一些資料, 當然只是初步的了解,感覺用自己的程序替換explorer.exe不是很難,可以完全 自己實現類似于explorer.exe的功能,而界面可以完全自己設計。請問你當時 ...… 查看全部問答∨ |
--------------------Configuration: Start - Win32 Checked------------------- Linking... LINK : fatal error LNK1181: cannot open input file "C:\\PROGRA~1\\NuMega\\DRIVER~1\\DRIVER~3\\lib\\I386\\checked\\vdw_wdm.lib" 執行 link ...… 查看全部問答∨ |