rt-thread AP6212 wifi驱动框架
2021-07-19 09:34:09 0 举报
AI智能生成
rt-thread ap6212 wifi框架
作者其他创作
大纲/内容
1.__rt_init_lwip_system_init
2.__rt_init_rt_wlan_lwip_init
3.__rt_init_rt_wlan_init
4.__rt_init_rt_wlan_workqueue_init
5.__rt_init_rt_mmcsd_core_init
6.__rt_init_rt_hw_sdio_init
7.__rt_init_ap6212_init
8.__rt_init_wifi_hw_init(ap6212库初始化)
9.__rt_init_rt_hw_wlan_init
WLAN 管理层<br>wlan_mgnt.c<br>wlan_mgnt.h
数据结构
structrt_wlan_mgnt_des<br>wlan管理结构体
structrt_wlan_scan_result<br>扫描的wifi信息
函数
intrt_wlan_init(void)<br>管理层初始化函数
staticvoidrt_wlan_cyclic_check(void*parameter)<br>定时处理回调函数
staticvoidrt_wlan_auto_connect_run(structrt_work*work,void*parameter)<br>wifi自动重连函数
WLAN config层<br>wlan_cfg.c<br>wlan_cfg.h
数据结构
structrt_wlan_cfg_info<br>wlan配置信息
structrt_wlan_infoinfo;<br>WIFI的信息
structrt_wlan_keykey;<br>WIFI密码的信息
函数
voidrt_wlan_cfg_set_ops(conststructrt_wlan_cfg_ops*ops);<br>向WLAN配置管理层提供访问Flash的接口函数<br>
WLNA 协议层与Lwip协议适配<br>wlan_lwip.c
数据结构
structlwip_prot_des
structrt_wlan_protprot<br>wlan层的设备
structeth_deviceeth;<br>网卡设备
structrt_timertimer<br>定时器
structrt_workwork;
函数
intrt_wlan_lwip_init(void)
rt_err_trt_wlan_prot_regisetr(structrt_wlan_prot*prot)<br>像wlan协议层注册port
rt_err_trt_wlan_prot_regisetr(structrt_wlan_prot*prot)<br>像wlan协议层注册事件处理函数
WLAN协议层<br>wlan_prot.c<br>wlan_prot.h
数据结构
structrt_wlan_prot
charname[RT_WLAN_PROT_NAME_LEN];<br>协议名
rt_uint32_tid;<br>协议id
conststructrt_wlan_prot_ops*ops;<br>操作函数
函数
rt_err_trt_wlan_prot_attach(constchar*dev_name,constchar*prot_name)<br>找到wlan 设备 并绑定协议 wlan 设备事件注册
staticvoidrt_wlan_prot_event_handle(structrt_wlan_device*wlan,rt_wlan_dev_event_tevent,structrt_wlan_buff*buff,void*parameter)<br>wlan设备层产生的事件处理函数
WLAN DEVICE 层<br>wlan_dev.c<br>wlan_dev.h
数据结构
rt_wlan_device<br>wifi 设备
conststructrt_wlan_dev_ops*ops<br>wifi操作函数
函数
rt_err_trt_wlan_dev_register(structrt_wlan_device*wlan,constchar*name,conststructrt_wlan_dev_ops*ops,rt_uint32_tflag,void*user_data)<br>wlan 设备注册至设备管理层
staticrt_err_t_rt_wlan_dev_init(rt_device_tdev)<br>wlan 设备初始化
staticrt_err_t_rt_wlan_dev_control(rt_device_tdev,intcmd,void*args)<br>wlan 操作函数
bcm_wlan_init() <br>博通提供的wifi库里的函数
WLAN 固件层(黑盒)<br>drv_wlan.c
线程
staticvoidwifi_init_thread_entry(void*parameter)<br>wifi 初始化线程
wifi_hw_init();<br>调用库的wifi初始化函数
rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME,RT_WLAN_STATION);<br>设置wifi工作模式为station模式
函数
intwiced_platform_resource_size(intresource)<br>获取wifi 固件的大小
intwiced_platform_resource_read(intresource,uint32_toffset,void*buffer,uint32_tbuffer_size)<br>读取wifi固件
wlan 与 sdio 层的连接关系是黑盒子 使用固件库
SDIO BUS 协议层<br>mm_csd_core.c SDIO BUS<br>mm_csd_core.h SDIO BUS<br><br>sd.c //sd卡协议<br>sdio.c //sdio卡协议<br>mmc.c //mmc卡协议
数据结构
rt_mmcsd_req (SDIO 请求)<br>一个完整的SDIO请求一般包含<br>1.启动命令 2.数据 3.结束命令
1.struct rt_mmcsd_data *data(数据)
2.struct rt_mmcsd_cmd *cmd(启始命令)
3.struct rt_mmcsd_cmd *stop(结束命令)
线程
void mmcsd_detect(void *param)<br>SDIO 设备探测线程(循环探测)
1.SDIO Card 插入
1.static void mmcsd_power_up(struct rt_mmcsd_host *host)<br>上电
2.rt_int32_t mmcsd_go_idle(struct rt_mmcsd_host *host)<br>卡识别模式 发送cmd0
3.rt_err_t mmcsd_send_if_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>卡识别模式 发送cmd8
4.是什么卡
SDIO 卡
1.rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host,<br> rt_uint32_t ocr,<br> rt_uint32_t *cmd5_resp)<br>发送cmd5 查询IO card 信息
2.rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>SDIO card 设备初始化
1.rt_uint32_t mmcsd_select_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>设置SDIO卡工作电压
2.static rt_int32_t sdio_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>SDIO卡设备初始化
1.rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host,<br> rt_uint32_t ocr,<br> rt_uint32_t *cmd5_resp) <br>发送cmd5
2.rt_err_t mmcsd_get_card_addr(struct rt_mmcsd_host *host, rt_uint32_t *rca)<br>发送cmd3 进入数据传输模式
3.rt_int32_t mmcsd_select_card(struct rt_mmcsd_card *card)<br>发送cmd7
4.static rt_int32_t sdio_read_cccr(struct rt_mmcsd_card *card)<br>发送cmd52 读取sdio卡cccr寄存器信息
5.static rt_int32_t sdio_read_cis(struct rt_sdio_function *func)<br>发送cmd52 读取sdio卡的cis寄存器信息
6.static rt_int32_t sdio_set_highspeed(struct rt_mmcsd_card *card)<br>发送cmd52命令设置sdio卡的工作速度
7.static rt_int32_t sdio_set_bus_wide(struct rt_mmcsd_card *card)<br>发送cmd52命令设置sdio数据线位宽
8.static rt_int32_t sdio_initialize_function(struct rt_mmcsd_card *card,<br> rt_uint32_t func_num)<br>发送cmd52命令获取sdio卡的FBR信息
9.static rt_int32_t sdio_register_card(struct rt_mmcsd_card *card)<br>注册SDIO卡
rt_inlinert_int32_tsdio_match_card(structrt_mmcsd_card*card,<br>conststructrt_sdio_device_id*id)<br><br>
SD卡
1.rt_err_t mmcsd_send_app_op_cond(struct rt_mmcsd_host *host,<br> rt_uint32_t ocr,<br> rt_uint32_t *rocr)<br>发送ACMD41 获取SD card 信息
2.rt_int32_t init_sd(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>SD card 初始化
MMC卡
1.rt_err_t mmc_send_op_cond(struct rt_mmcsd_host *host, <br> rt_uint32_t ocr, rt_uint32_t *rocr)<br>发送CMD1 识别MMC卡信息
2.rt_int32_t init_mmc(struct rt_mmcsd_host *host, rt_uint32_t ocr)<br>MMC卡初始化
2.SDIO Card 移除
对外接口
int rt_mmcsd_core_init(void)<br>创建mmcsd_detect_thread 线程来探测是否有SDIO外设存在
底层 SDIO硬件接口<br>drv_sdio.c<br>drv_sdio.h
数据结构
底层数据结构(实际传输使用)
sdio_pkg(SDIO数据包结构)
1.rt_mmcsd_cmd *cmd(SDIO命令和响应)
2.void *buff(发送或接收的数据)
stm32_sdio_des
1.struct stm32_sdio *hw_sdio(stm32 sdio 相关寄存器)
2.SD_HandleTypeDef hsd(stm32 sdio 句柄)
对外数据结构
stm32_sdio_class
1.stm32_sdio_des *des
2.stm32_sdio_config *cfg
3.rt_mmcsd_host host
rthw_sdio
1.rt_mmcsd_host *host
2.stm32_sdio_des sdio_des(硬件相关信息)
3.sdio_pkg *pkg(SDIO 数据包)
函数
实际传输函数
static void rthw_sdio_send_command(struct rthw_sdio *sdio, struct sdio_pkg *pkg)<br>发送命令
static void rthw_sdio_wait_completed(struct rthw_sdio *sdio)<br>等待sdio cmd完成
对实际传输函数的进一步封装
static void rthw_sdio_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req)<br>sdio 命令和数据的封装 兼容上层接口
static void rthw_sdio_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg)<br>对io 时钟的配置 兼容上层接口
对外的接口
struct rt_mmcsd_host *sdio_host_create(struct stm32_sdio_des *sdio_des)<br>创建 rt_mmcsd_host *host和 rthw_sdio *sdio 在此函数将封装好的传输函数注册进去给上一层用<br>并且在这里通知上层有SDIO设备存在
int rt_hw_sdio_init(void)<br>sdio接口硬件初始化(自动初始化)
0 条评论
下一页