瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx

上传人:b****8 文档编号:22533964 上传时间:2023-02-04 格式:DOCX 页数:12 大小:1.11MB
下载 相关 举报
瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx_第1页
第1页 / 共12页
瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx_第2页
第2页 / 共12页
瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx_第3页
第3页 / 共12页
瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx_第4页
第4页 / 共12页
瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx

《瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

瑞芯微RK312X上调试WIFI模块Word文档下载推荐.docx

WIFI模组:

CW2455,其内部使用CYW43455,SDIO3.0接口,向后兼容SDIO2.0的。

硬件同事画的WIFI模块原理图如下:

初看原理图,对比SDK里设备树的配置,就质疑原理图存在几个问题:

1、硬件上没有接WL_SDIO_HOSTWAKE(对应设备树里的WIFI,host_wake_irq)。

在和供应商的沟通群中,供应商的硬件支持说WIFI的唤醒信号要加上,软件支持说WL_SDIO_HOSTWAKE脚是唤醒脚,如果用不到这个功能,可以悬空。

从后面的调试情况来看,该脚还是要接的,否则会出现读取寄存器超时错误。

2、24脚没有接32K时钟输入。

24脚是ExternalLowPowerClockinput(32.768KHz)。

理论上,32K输入时钟是为系统低功耗使用的,平时工作的话,还是使用37.4MHz的时钟,但是实际调试过程中发现,假如不接32K时钟输入,会报错如下:

因此,模组的24脚还是要接32K的时钟输入,可以从电源管理芯片的32K输出中引入。

3、BT模块的引脚接线也没引全,42和43脚是控制BT的串口,要有流控。

BT_HOSTWAKE也要接上。

不过,由于没有使用到BT功能,就暂不理会了。

拿到硬件之后,进行SDK配置。

首先打开相应的设备树文件rk3126-linux.dts,在该设备树中已经默认含了一个SDIO节点,是一个网卡设备。

先把相应的reset-gpios按照实际原理图进行管脚配置,其对应wifipower,WIFI模块中的WL_REG_ON。

烧录固件之后,查看/sys/bus/sdio/devices或者/sys/bus/mmc/devices下竟然没有相应的设备信息,意思连SDIO设备都没扫描到。

如果扫不到sdio接口的话,还是要先检查一下硬件。

23脚应该有1.3V电压(WL_REG_ON使能时,用示波器可以看到该脚是一个高频方波,万用表测试等效约1.3V。

如果WL_REG_ON失能,则该脚为低电平,没有电压)。

21脚没电压,说明模块没工作。

CW2455WIFI模块应该支持1.8V和3.3V,SDIO2.0和SDIO3.0都支持。

主控是配置SDIO3.0,VDDIO接1.8V;

SDIO2.0,VDDIO就接3.3V。

手里有一块PX30开发板和,PX30使用的是AP6210模组,将开发板上的AP6210吹下来,直接替换为CW2455,固件都没变,可以直接驱动跑起来,因此确认模组是OK的。

但是PX30使用的是SDIO3.0,为此,再找出自己的一块I.MX6ULL开发板,上面是跑SDIO2.0,飞线接上去也是可以正常扫描检测到SDIO设备的。

经过各项排查及测试,发现硬件有问题。

瑞芯微RK312X系列仅支持SDIO2.0接口的WIFI模组,且在使用SDIO接口的WIFI/BT模组时,由于RK312X系列的SDIO引脚为默认下拉,故需要在外部增加上拉电阻。

推荐10K上拉或者更强的上拉(SDIO_D0~D3和SDIO_CMD需要10K电阻上拉)。

1、原理图中多了个C6电容,导致模组电压异常,主芯片无法扫描到相应的SDIO设备。

去掉C6电容之后,便能检测到相应的SDIO设备。

但是加载WIFI驱动之后,ifconfig命令下并没有出现wlan0。

从打印信息可以看出,应该是有注册wlan0的。

使用ifconfig-a确实显示了wlan0。

但是ifconfigwlan0up不行。

刚开始想是不是哪里占用或者堵塞了,使用rfkillunblockall,发现瑞芯微的SDK居然不支持。

于是使用busybox进行生成rfkill命令(在busybox的menuconfig里选中RFswitchsubsystemsupport,make之后,makeinstallCONFIG_PREFIX,COFIG_PREFIX

指定编译结果的存放目录,即buildroot里的target目录),rfkillunblockall之后还是不行。

通过追加调试代码,一步一步慢慢定位,后面发现瑞芯微RK系列的SDK必须配置WL_SDIO_HOSTWAKE管脚(否则下载固件超时失败)。

WIFI驱动之前并没有接触过,通过这几天调试,收获还是很多的。

1、CW2455使用的是37.4MHz晶振,需要使用示波器确认是否起振。

注意需要在使能WIFI模块后进行确认,也即WL_REG_ON使能。

2、也要注意SDIO电源纹波不能太大。

期间因为测试,使用洞洞板+飞线的方式进行模组的走线,导致纹波有500多mv,然后连chip信息都读不到,后改线降纹波到200多mv,可以读到chi信息了。

纹波大时的打印:

降纹波之后的打印:

3、首先需要确定WIFI模块的上下电是否正常。

通过

echo0>

/sys/class/rkwifi/power//对WIFI模块掉电

echo1>

/sys/class/rkwifi/power//对WIFI模块上电

假如不能正确控制模块的WL_REG_ON脚,需要检查设备树的配置,或者上电、掉电的操作是否反了。

4、SDIO属于高速电路,所以一开始调试时,为了降低电路上的干扰,可以将SDIO的时钟降低(例如调试期间,我只使用1MHz的SDIO时钟而已),并且可以使用单线SDIO模式(bus-width=<

1>

;

)。

由于这边采用的是WIFI模组通过插座的方式与主芯片连接的,所以SDIO时钟并不能太高。

实际测试发现,使用5MHz时钟,每次ifconfigwlan0up每次都能成功;

但是使用10MHz,就出现概率失败了。

况且发现单线模式下,SDIO时钟更容易跑得更高,使用四线模式,就很容易受时钟的影响。

因此对于WIFI模组和主芯片不在同一片PCB上,调试时,可以先使用单线模式进行调试。

时钟过快时的调试打印如下:

正常打印的如下:

最后,使用的设备树SDIO节点配置如下:

sd-uhs-sdr104是SDIO3.0的,其使用1.8V的电压,而RK312X系列只兼容SDIO2.0而已。

WIFI测试:

1、加载驱动:

insmodcywdhd.kofirmware_path=/usr/bin/WIFI/fw_cyw43455.binnvram_path=/usr/bin/WIFI/nvram_azw256.txt

2、开启wlan0:

ifconfigwlan0up

3、Wi-Fi的服务进程启动:

wpa_supplicant-B-iwlan0-Dnl80211-c/etc/wpa_supplicant.conf

3、扫描周边的AP:

扫描:

wpa_cli-iwlan0-p/var/run/wpa_supplicantscan

显示扫描结果:

wpa_cli-iwlan0-p/var/run/wpa_supplicantscan_result

没有天线时的扫描结果如下:

可以看出,不仅扫描出来的热点少,而且信号强度弱。

于是随便找了根天线,虽然不匹配,但有总比没有强。

接上后,扫描结果如下:

热点增多,信号强度也变强了。

4、连接路由器:

sdk集成了wifi_start.sh脚本,可以直接在脚本后面跟ssid和password进行连接:

5、设置无线网卡IP地址,使用udhcpc命令自动给无线网卡分配IP地址:

udhcpc-iwlan0

6、pingAP网关IP:

ping-Iwlan0192.168.31.1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1