SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式

代码工程的GITHUB连接:点进进入GITHUB仓库
https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi


点击购买Marvell8801开发板

Marvell自己实现驱动系列文章分为几篇介绍:
SDIO wifi Marvell8801/Marvell88w8801 介绍(一) ---- 芯片介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(二) ---- SDIO协议介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(三) ---- 寄存器介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- 命令/事件/数据格式
SDIO wifi Marvell8801/Marvell88w8801 介绍(五) ---- TLV
SDIO wifi Marvell8801/Marvell88w8801 介绍(六) ---- 实现初始化功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(七) ---- 实现搜索功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(八) ---- 实现STA功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- 实现AP功能
SDIO wifi Marvell8801/Marvell88w8801 介绍(十) ---- 移植TCP/IP协议栈LWIP
SDIO wifi Marvell8801/Marvell88w8801 介绍(十一) ---- 自己编写LWIP没有的DHCP server
SDIO wifi Marvell8801/Marvell88w8801 介绍(十二) ---- MQTT介绍
SDIO wifi Marvell8801/Marvell88w8801 介绍(十三) ---- 百度云操作说明
SDIO wifi Marvell8801/Marvell88w8801 介绍(十四) ---- 上位机STA操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十五) ---- 上位机AP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十六) ---- 上位机UDP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十七) ---- 上位机TCP操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十八) ---- 上位机PING操作/代码
SDIO wifi Marvell8801/Marvell88w8801 介绍(十九) ---- 上位机云服务器(百度云)操作/代码

每篇更新打开专栏可以看到打开Marvell8801/Marvell8801 专栏

1. SDIO header介绍

Marvell一共有三种类型的数据:
1)命令(command)/命令响应(command response):其中command用于host -> card,也就是wifi驱动给wifi芯片下发命令,比如搜索,连接之类的,command responses是
Host <- card,也就是wifi芯片收到wifi驱动下发的命令的响应动作,command和command reponse的格式是相同的,在2.3小节介绍
2)事件(event):方向是host <- card,也就是发生了一些特定的事情,芯片以事件的方式主动告知wifi驱动,比如AP关掉了之类的
3)数据(data):TCP/IP数据, host <–> card
所以Marvell针对以上三种做了4个byte的SDIO header,来驱动,并且告知数据包的大小,如图
在这里插入图片描述
再罗嗦几句:
command/command response的数据类型为0x01
event的数据类型为0x03
data的数据类型为0x00

2. 命令格式介绍

Command/command resonse的格式如下
在这里插入图片描述
其中command ID在fireware V14文档中有说明,在这个小节的最后会列出comand list,下面只是看下一个具体的command
在这里插入图片描述
再来个command response部分
在这里插入图片描述
由于牵扯到的command众多,后续分析Linux驱动和自己写驱动的时候会慢慢涉及到,这里你只需要知道command/command response的类型就行

最后列下command list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 事件格式介绍

Event的格式只有前三个filed是确定的,其他都不确定(除了wifi direct,wifi direct暂时不做考虑范围内)
在这里插入图片描述
那一个命令举例
在这里插入图片描述
其中最后一个就是TLV(type-len-value)会在2.6小节介绍
最后列出event list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 数据格式介绍

在type数据就是tcp/ip的数据,其中TX,RX的格式还有点差异,我们先从TX说起,先来看下数据格式

4.1 TX数据

在这里插入图片描述
Flags如下
在这里插入图片描述
其中此部分处理有点小苗,牵扯到一个offset问题,我们先拿一个raw data分析下,正好也对前面的sdio header温故下,看下面的raw data
00000000h:42 00 00 00 01 00 2a 00 14 00 00 00 00 00 00 00
00000010h:00 00 00 00 00 00 00 00 ff ff ff ff ff ff 68 3e
00000020h:34 1d ec 3b 08 06 00 01 08 00 06 04 00 01 68 3e
00000030h:34 1d ec 3b c0 a8 01 64 00 00 00 00 00 00 c0 a8
00000040h:01 01
其中SDIO header为42 00 00 00,所以len为0x42=66个byte,type为0,代表data,也就是tcp/ip数据
往后的16byte,也就是TX的header为01 00 2a 00 14 00 00 00 00 00 00 00 00 00 00 00
01代表uap,也就是说我们是作为AP角色的
00 代表bss num为0
2a 00 代表tx payload len 0x2a=42,看到这里你可能有一个疑问,为什么是42呢,别急,配合下一个filed分析
14 00代表tx pkt offset,0x14=20,这个的意思是从header 便宜20个byte才是真正的tcp/ip数据,也就是从 ff ff ff ff ff ff之后,那么回过头,看下tx payload len你可能已经预感到什么了吧,没错,就是从 ff ff ff ff ff ff开始到最后的数据,刚好是42个byte
其他的filed就自行分析吧,所以这里就存在一个问题,就是这个封包中中间有4个byte的多余数据
剩下的从 ff ff ff ff ff ff就是tcp/ip数据,在后面自己写驱动的时候我们会了解到这个ethernet的header
在这里插入图片描述
6个全f,是代表dest mac,也就是广播地址,68 3e 34 1d ec 3b source mac,也就是我们本地的mac,08 06也就是ARP封包的type,好啦,就到这里吧,TCP/IP的东西后面会介绍

4.2 RX数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同样来个raw data分析下,一切明了
00000000h:6c 00 00 00 01 00 2a 00 3e 00 02 00 0e 00 00 07
00000010h:36 53 01 11 24 98 77 11 70 20 00 93 00 00 00 00
00000020h:00 00 00 00 84 00 88 41 30 00 e0 b9 4d 21 f1 2c
00000030h:68 3e 34 1d ec 3b ff ff ff ff ff ff e0 00 00 00
00000040h:00 00 ff ff ff ff ff ff 68 3e 34 1d ec 3b 08 06
00000050h:00 01 08 00 06 04 00 01 68 3e 34 1d ec 3b c0 a8
00000060h:01 64 00 00 00 00 00 00 c0 a8 01 01
其中SDIO header为6c 00 00 00,所以len为0x6c=108个byte,type为0,代表data,也就是tcp/ip数据
往后的15byte,也就是RX的header为01 00 2a 00 3e 00 02 00 0e 00 00 07 36 53 01
01代表uap
00 代表bss num为0
2a 00 代表rx_pkt_len 0x2a=42,看到这里你可能有一个疑问,相信看了上面tx,你就知道这个意思了,就在自动找offset了
3e 00代表rx pkt offset,0x3e=62,这个的意思是从header 便宜62个byte才是真正的tcp/ip数据,也就是从 40h开始的ff ff ff ff ff ff之后的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wireless_Link

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值