AM335x添加WiFi模块WILC1000

本文档详细介绍了如何在TI处理器SDK Linux AM335x EVM 06.03.00.106上移植和测试Microchip WILC1000 Wi-Fi驱动。内容包括硬件连接、驱动库准备、Wi-Fi固件拷贝、配置修改、编译和驱动安装,以及WIFI功能的测试步骤。在驱动安装过程中遇到了依赖问题,通过modprobe解决了这个问题,并成功启动了Wi-Fi网卡。然而,在Station模式下,尽管可以ping通局域网内的设备,但无法ping通外网。最后,提供了TCP服务器和客户端的测试代码。

基于TI 的PSDK的linux和文件系统添加wilc1000。sdk版本:ti-processor-sdk-linux-am335x-evm-06.03.00.106。

1.硬件连接

wilc1000    ----------------  am335x

RESET_N   --------------  GPMC_A6------------- gpio1_22

WAKE ----------------------GPMC_BEN1 ----------gpio1_28

IRQN -----------------------GPMC_CSN0 ----------gpio1_29

SDCLK---------------------MMC0_CLK

SD_CMD------------------MMC0_CMD

SD_DATA0-3-------------MMC0_DATA0-3

SDIO_SPI_CFG ----------接地 (P10的配置引脚,固定接地为SDIO通迅模式)

2.驱动库准备

基于linux内核4.xx.xx版本的源码:

Microchip ATWILC Wireless Devices · GitHubResources for using Microchip ATWILC Wireless Devices on Linux - Microchip ATWILC Wireless Deviceshttps://github.com/linux4wilc2.1 驱动源码添加

从上述源码仓库中下载Driver项目目录下的源码包并解压。

2.1.1 源码拷贝

将文件夹:wilc整个拷贝至linux源码目录中:ti-processor-sdk-linux-am335x-evm-06.03.00.106/board-support/linux-4.19.94+gitAUTOINC+be5389fd85-gbe5389fd85/drivers/staging

保留原wilc1000目录不去动它,两个平级。

2.1.2 修改MakeFile

修改staging目录下的MakeFile文件:

将  obj-$(CONFIG_WILC)        += wilc1000/ 改成 :obj-$(CONFIG_WILC)        += wilc/

2.1.3 修改Kconfig

修改staging目录下的Kconfig文件:

将source "drivers/staging/wilc1000/Kconfig"   改成:source "drivers/staging/wilc/Kconfig"

2.2 wifi固件拷贝

下载源码仓库中firmware项目目录的内容,并解压。

将mhcp文件夹拷贝至ti-processor-sdk-linux-am335x-evm-06.03.00.106/board-support/linux-4.19.94+gitAUTOINC+be5389fd85-gbe5389fd85/firmware。这步可能不需要,主要是看到wilc的驱动说明里说,新版本WIFI固件会编译进内核,所以先拷贝(其实最终,WIFI测试的时候,WIFI固件还是在测试时间动态发送给wifi模块然后再运行的)。

同时,将mhcp文件夹拷贝至根文件系统中:lib/firmware/

2.3 添加config配置

 我使用的是修改Ti的tisdk_am335x-evm_defconfig  文件,因为Ti的sdk编译使用menuconfig界面配置无效,最终会被内核编译时,make linux时,使用tisdk_am335x-evm_defconfig 内容替换。

 添加如下

CONFIG_WLAN_VENDOR_MCHP=y
CONFIG_WILC=m
CONFIG_WILC_SDIO=m

以上配置,参考WILC的驱动移植说明文档,在git里有下载链接。从后续测试情况看,CONFIG_WILC应该是y就行了,因为m也无法产生.ko模块。

其中WILC_SDIO依赖CFG80211 && INET && MMC,而所依赖的几项,原来已经配置过了。注意CFG80211,在WIFI测试的时候会讲。

2.4 添加设置树

添加如下:

mmc1_pins: pinmux_mmc1_pins {
		pinctrl-single,pins = <
			/* AM33XX_IOPAD(0x960, PIN_INPUT | MUX_MODE7)	*/ 	/* spio0_cs1.gpio0_6 */
			AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat0.mmc0_dat0 */
			AM33XX_IOPAD(0x8f8, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat1.mmc0_dat1 */
			AM33XX_IOPAD(0x8f4, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat2.mmc0_dat2 */
			AM33XX_IOPAD(0x8f0, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat3.mmc0_dat3 */
			AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_cmd.mmc0_cmd */
			AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_clk.mmc0_clk */

			AM33XX_IOPAD(0x858, PIN_OUTPUT_PULLUP | MUX_MODE7)	/* gpmc_a6   reset*/
		    	AM33XX_IOPAD(0x878, PIN_OUTPUT_PULLUP | MUX_MODE7) 	/* gpmc_ben1 chipen*/
		    	AM33XX_IOPAD(0x87c, PIN_INPUT_PULLUP | MUX_MODE7) 	/* gpmc_csn0 irq*/
		>;
	};


&mmc1 {
	vmmc-supply = <&vmmcsd_fixed>;
	pinctrl-names = "default";
	pinctrl-0 = <&mmc1_pins>;
	// non-removable;
	bus-width = <4>;
	status = "okay";

	wilc_sdio@0 {
		compatible = "microchip,wilc1000", "microchip,wilc3000";
		irq-gpios = <&gpio1 29 0>;
		reset-gpios = <&gpio1 22 1>;  //<&gpio1 22 GPIO_ACTIVE_LOW>;
		chip_en-gpios = <&gpio1 28 1>;
		interrupt-parent = <&gpio1>;
		interrupts = <29 0x2>; /* Falling edge only */
		// clocks = <&pck1>;
		// clock-names = "rtc_clk";
		// assigned-clocks = <&pck1>;
		// assigned-clock-rates = <32768>;
		status = "okay";
		reg = <0>;
		bus-width = <4>;
	};
};

2.5 编译

shell中cd到sdk根目录ti-processor-sdk-linux-am335x-evm-06.03.00.106/。

make linux-clear
make linux

编译驱动没有报错,设备树配置容易出错。最终得到wilc-sdio.ko模块。再三确认,没有wilc.ko模块。因为测试时,按atmel文档是先安装wilc.ko模块。忽略不用管便可。

注:源码包里的设备树配置,reset,en有效都是0,如下

        reset-gpios = <&gpio1 22 0>;  //<&gpio1 22 GPIO_ACTIVE_LOW>;
        chip_en-gpios = <&gpio1 28 0>;

虽然能用,但是用示波器量,en引脚的电平并没有反向,还是一样的,但低电平脉宽不正常。这部分参考了网友的设置:

AM335X BeagleBoneBlack wilc3000蓝牙wifi驱动移植_MC_J的博客-优快云博客

3. WIFI测试

3.1 驱动模块安装

将wilc-sdio.ko拷贝至/lib/modules/4.19.94-gbe5389fd85/kernel/drivers/staging/wilc

确保之前WIFI固件已拷贝至lib/firmware/。2.2节有描述。

在wilc-sdio.ko目录下,执行  insmod wilc-sdio.ko。但会出错,如下。

/wilc# insmod wilc-sdio.ko
[   88.260186] wilc_sdio: module is from the staging directory, the quality is unknown, you have been warned.
[   88.274813] wilc_sdio: Unknown symbol cfg80211_inform_bss_frame_data (err -2)
[   88.283120] wilc_sdio: Unknown symbol cfg80211_scan_done (err -2)
[   88.291112] wilc_sdio: Unknown symbol cfg80211_remain_on_channel_expired (err -2)
[   88.299387] wilc_sdio: Unknown symbol cfg80211_ref_bss (err -2)
[   88.305453] wilc_sdio: Unknown symbol cfg80211_find_ie_match (err -2)
[   88.313364] wilc_sdio: Unknown symbol cfg80211_disconnected (err -2)
[   88.320555] wilc_sdio: Unknown symbol wiphy_new_nm (err -2)
[   88.326216] wilc_sdio: Unknown symbol cfg80211_ready_on_channel (err -2)
[   88.333931] wilc_sdio: Unknown symbol wiphy_register (err -2)
[   88.340321] wilc_sdio: Unknown symbol cfg80211_put_bss (err -2)
[   88.346476] wilc_sdio: Unknown symbol ieee80211_get_channel (err -2)
[   88.353796] wilc_sdio: Unknown symbol wiphy_unregister (err -2)
[   88.360765] wilc_sdio: Unknown symbol cfg80211_get_bss (err -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值