完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简介
网络管理层 W800驱动 WIFI设置 简介 CH2601开发板中集成有W800 wifi芯片,这颗芯片是套完整的mcu芯片。理论上是不需要ch2601主芯片操心网络通讯方面的事情的,只要向w800发送指令和数据就可以。CH2601用过SPI总线与W800芯片交互使用AT指令通讯。CH2601芯片的系统为了整合多种网络设备,采用分层的方式与系统应用通讯。 从图上可以看出:为支持不同的网络连接芯片类型和多元的应用场景,YoC平台提供一套完善的网络框架。该框架主要分为四层架构,分别为网络应用层、网络接口层、网络芯片驱动层和底层外设驱动层。 网络管理层 网络接口层主要分为两个通道。一是数据通道,其负责网络数据的发送和接收。其可通过调用套接字适配层SAL或LWIP接口来实现,并对上层提供一组标准的 BSD 套接字 API。二是管理通道,即网络管理器netmgr,其负责所有网络的联网、连接、管理、状态查询等功能。 当前YoC平台支持多种不同的网络芯片类型,如esp8266、rtl8723ds、GPRS等。网络芯片驱动层提供了具体芯片的网络层、链路层及驱动相关的接口对接,以满足网络接口层的需求。 网络芯片可能是通过SDIO、AT等接口外接的。底层外设驱动层用于实现主控芯片和外接网络芯片的数据交互需求。 这其中的网络管理器就是wifi连接和管理的核心(netmgr),网络管理器负责所有网络的联网管理功能,具体如下:
W800驱动 为了能够使用wifi联网就需要调用netmgr的API,下面我就此过程进行测试: 1、首先需要初始化w800网络连接 2、管理连接,注册事件。 3、进行网络通讯 如何初始化W800芯片,我参考了web播放器的例程代码。 #include #include netmgr_hdl_t app_netmgr_hdl; static void network_init() { w800_wifi_param_t w800_param; /* init wifi driver and network */ w800_param.reset_pin = PA21; w800_param.baud = 1*1000000; w800_param.cs_pin = PA15; w800_param.wakeup_pin = PA25; w800_param.int_pin = PA22; w800_param.channel_id = 0; w800_param.buffer_size = 4*1024; wifi_w800_register(NULL, &w800_param); app_netmgr_hdl = netmgr_dev_wifi_init(); if (app_netmgr_hdl) { utask_t *task = utask_new("netmgr", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI); netmgr_service_init(task); netmgr_config_wifi(app_netmgr_hdl, "test", 4, "test123456", 10); netmgr_start(app_netmgr_hdl); } } 注意其中的include文件,在官方的资料中的例程很多都没有介绍如何引用。 netmgr_config_wifi(app_netmgr_hdl, "test", 4, "test123456", 10); 其中的被注释的语句就是wifi的ssid和联网密码。只要调用该函数就可以连接到网络上了。此时就可以ping通网络了。 如何管理连接也是十分重要的程序,如果连接断网或是出现什么情况需要重连等等处理,如何管理就需要使用系统事件了。 /* network event callback */ void user_local_event_cb(uint32_t event_id, const void *param, void *context) { char url[128]; if (event_id == EVENT_NETMGR_GOT_IP) { // 网络连接成功 printf("Net up"); } else if (event_id == EVENT_NETMGR_NET_DISCON) { if ((int)param == NET_DISCON_REASON_DHCP_ERROR) { printf("Net down"); netmgr_reset(netmgr_get_handle("wifi"), 30); // 本次网络连接失败,30s后自动重连 } } } int main(void) { board_yoc_init(); event_service_init(NULL); // 发布订阅服务初始化 LOGD(TAG, "%sn", aos_get_app_version()); oled_init(); network_init(); /* Subscribe */ event_subscribe(EVENT_NETMGR_GOT_IP, user_local_event_cb, NULL); // 订阅网络连接成功事件 event_subscribe(EVENT_NETMGR_NET_DISCON, user_local_event_cb, NULL); // 订阅网络连接失败事件 while (1) { LOGD(TAG, "Hello world! YoC"); aos_msleep(1000); } return 0; } wifi设置 上面的代码不复杂,主要就是三点, 1、构造一个事件函数,处理事件 2、注册事件函数,event_subscribe(EVENT_NETMGR_GOT_IP, user_local_event_cb, NULL); // 订阅网络连接成功事件 3、初始化事件函数,event_service_init(NULL); // 发布订阅服务初始化 这句很重要,如果没有整个系统就会停滞,系统也会不运行。 整个联网过程就此完成。后面我会测试如何使用网络高层接口编写应用。 可以看到网络启动的事件消息,"Net up"和IP地址“192.168.1.104” 文章转载自:平头哥芯片开放社区 作者:bigbat |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15706 浏览 1 评论
13761 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19682 浏览 2 评论
59126 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88185 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
787浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
684浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:21 , Processed in 0.726116 second(s), Total 63, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号