请选择 进入手机版 | 继续访问电脑版
查看: 1312|回复: 0

[技术交流] usb接口wifi驱动程序--usb的的理解1

[复制链接]

185

主题

204

帖子

596

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
596
发表于 2019-4-28 19:44:42 | 显示全部楼层 |阅读模式
1、首先需要明确wifi模块是USB设备,主控(CPU)端是USB主机;
  2、USB主机若需要对wifi模块进行数据的读写时,就必须经过USB接口;
   3、既然涉及到数据的读写操作,必然要用相应的读写函数,那么usb_read_port()和usb_write_port()即是它们的读写函数。
        我们先从读数据开始进行分析,在分析之前,我们必须了解USB设备驱动的读数据过程。USB读取数据操作流程如下:
        (1)通过usb_alloc_urb()函数创建并分配一个URB,作为传输USB数据的载体;
        (2)创建并分配DMA缓冲区,以DMA方式快速传输数据;
        (3)初始化URB,根据wifi的传输数据量,我们需要初始化为批量URB,相应操作函数为usb_fill_bulk_urb();
        (4)将URB提交到USB核心;
        (5)提交成功后,URB的完成函数将被USB核心调用。
        现在我们一步步地详细分析整个过程,所谓的创建和分配,实质上是对内存的分配,必须了解Linux内存管理相关知识及合理使用内存。
当wifi模块有数据可读时,主控端才能成功地读取数据。那么wifi模块什么时候有数据可读呢?wifi模块通过RF端接收到无线网络数据,然后缓存到wifi芯片的RAM中,此时,wifi模块就有数据可读了。
wifi模块的接收函数中
1、usb_alloc_urb()创建一个中断URB
2、在rtw_os_recvbuf_resource_alloc函数中,创建一个批量URB和一个DMA缓冲区
3、在usb_read_port()函数中,通过usb_fill_bulk_urb()初始化批量URB,并且提交给USB核心,也即USB读取数据操作流程的第3、4步。在usb_fill_bulk_urb()函数中,初始化URB的完成函数usb_read_port_complete(),只有当URB提交完成后,函数usb_read_port_complete()将被调用。
通过上面我们可以得知在wifi模块为接收数据做初始化准备时,分配了URB和DMA缓冲区。而在usb_read_port()函数中初始化URB和提交URB。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表