当前位置:网站首页>si446使用记录(三):MATCH功能
si446使用记录(三):MATCH功能
2022-07-17 20:46:00 【何事误红尘】
一、概述
本文就是记录下自己目前对于MATCH功能的理解,主要参考文档《AN625: Si446x API Descriptions》。有些地方难免理解有误,有了新的理解,再进行修改。
MATCH的中文意思是匹配。开启MATCH功能,就是根据设置的规则,对频段内的数据帧进行过滤,只接收符合匹配规则的数据。所以无论是点对点通信,还是一对多通信,都难免要使用si4463的MATCH功能。
我的应用场景为一对多设备通信,最终实现网关依次轮询每个设备节点。通过MATCH功能,使得每个设备拥有自己的ID。相比于自定义一个软件协议,MATCH功能开启后,网关发送数据时包含A节点的ID,其他设备根本不会产生接收中断。
MATCH功能通过命令0x11设置属性来进行配置,从属性表找到相关部分:
从属性表上可以看出,Match功能分为4组进行设置,每组有VALUE、MASK、CTRL三个配置项。简单理解为有四个字节用于过滤,也就是ID占用四个字节。
二、设置寄存器
2.1 VALUE
首先看下VALUE的描述:
四组的VALUE是一样的,在这里写入要过滤的值,即我需要的32位ID::ID>>24、ID>>16、ID>>8、ID。当然我的节点没有那么多,可能只需要一个VALUE做ID,也是可以的。
这里提到更详细的信息可以查看《AN626: Packet Handler Operation for Si446x RFICs》文档。也就是的4.4. Match (Header Check) Functionality一节。详细说明了MATCH功能,这里就不展开了。
发送FIFO有64字节,发送数据时,设置的4个VALUE每次要填充在这64字节中。所以ID占用的字节多了,有效数据的长度就会减少。
2.2 MASK
MASK的描述如下:
四组的MASK也是一样的。根据MASK的含义,很容易理解,这个寄存器存在的意义就是,可以只匹配VALUE值的某几位。比如只匹配高四位–1111 xxxx(b)
,那么就写入0xF0。我的目的是为节点分配唯一的ID,需要完全匹配,MASK就都写成0xFF。
2.3 CTRL
四组CLTR的定义是不一致的,分为两种:
2.3.1 CTRL_1
描述如下:
POLARITY:写为0,则VALUE与MASK匹配后,结果为1;写为1,则VALUE与MASK不匹配时,结果才为1,相当于不接收指定帧的作用。
MATCH_EN:控制着是否开启MATCH功能,只有这个bit为1,其他的设置才会有意义。
OFFSET:这个偏移量表示了VALUE在64字节中的位置。
这个寄存器默认值为00,也就是不启用MATCH功能。
2.3.2 CTRL_2/3/4
描述如下:
POLARITY和OFFSET与CTRL_1是相同的,区别在于LOGIC。
LOGIC:写为0,
MATCH功能分为四组,根据VALUE和MASK匹配结果,会依次得到result1、result2、result3、result4。最终MATCH的结果是4个结果的总和,LOGIC的存在,允许自定义是result1&&result2&&result3&&result4
,还是result1||result2||result3||result4
,或者其他的组合方式。比如我的目的是为节点分配唯一的ID,需要4组全部匹配,所以是AND关系,这一位使用默认值0。
三、设置代码
看完寄存器描述,再看下设置代码,对比理解下:
int8_t siSetMatchID(uint32_t ID) {
abApi_Write[0] = 0x11;
abApi_Write[1] = 0x30;
abApi_Write[2] = 0x0C;
abApi_Write[3] = 0x00;
abApi_Write[4] = (uint8_t)((ID >> 24) & 0x000000ff);
abApi_Write[5] = 0xFF;
abApi_Write[6] = 0x40;
abApi_Write[7] = (uint8_t)((ID >> 16) & 0x000000ff);
abApi_Write[8] = 0xFF;
abApi_Write[9] = 0x01;
abApi_Write[10] = (uint8_t)((ID >> 8) & 0x000000ff);
abApi_Write[11] = 0xFF;
abApi_Write[12] = 0x02;
abApi_Write[13] = (uint8_t)(ID & 0x000000ff);
abApi_Write[14] = 0xFF;
abApi_Write[15] = 0x03;
siSendData(abApi_Write, 16);
siWaitForCTS();
return 0;
}
含义如下:
11 命令:设置属性
30 设置属性归属的组
0C 设置属性要写入的长度
00 设置属性起始地址
剩下12个字节,依次为VALUEx、MASKx、CTRLx。从这里可以看出,设置ID1、ID2、ID3、ID4分别在64字节FIFO的第一个字节、第二个字节、第三个字节、第四个字节,要求全部匹配才会产生接收中断。
四、只用一个VALUE
前面提到,只使用一个VALUE作为ID也是可以的:
int8_t siSetMatchID(uint32_t ID) {
abApi_Write[0] = 0x11;
abApi_Write[1] = 0x30;
abApi_Write[2] = 0x0C;
abApi_Write[3] = 0x00;
abApi_Write[4] = (uint8_t)((ID >> 24) & 0x000000ff);
abApi_Write[5] = 0xFF;
abApi_Write[6] = 0x40;
abApi_Write[7] = (uint8_t)((ID >> 16) & 0x000000ff);
abApi_Write[8] = 0xFF;
abApi_Write[9] = 0x41;
abApi_Write[10] = (uint8_t)((ID >> 8) & 0x000000ff);
abApi_Write[11] = 0xFF;
abApi_Write[12] = 0x42;
abApi_Write[13] = (uint8_t)(ID & 0x000000ff);
abApi_Write[14] = 0x00;
abApi_Write[15] = 0x43;
siSendData(abApi_Write, 16);
siWaitForCTS();
return 0;
}
不难看出,这段代码同样设置ID1、ID2、ID3、ID4分别在64字节FIFO的第一个字节、第二个字节、第三个字节、第四个字节,并且要求全部匹配。但是CTRL字节的LOGIC设置为了OR,也就是只要第一个VALUE匹配成功,后三组VALUE是否匹配,都不会影响最终的MATCH结果。这样接收端读出64字节以后,从第二个字节都作为有效数据即可。
可以想象,这种情况下,后面三组的POLARITY和OFFSET以及MASK设置成什么,都已经没有影响了。
五、结论
- 默认是关闭MATCH功能的,此时会接收当前频段的所有的数据,非常适用于广播。
- CTRL的设置是很重要的。
边栏推荐
- 坐标模拟矩阵旋转的公式
- STL string find substring
- A review of classical must see for Nonconvex Optimization Problems "from symmetry to geometry", University of Rochester, et al
- [7.14] code source - [open box] [XOR inverse] [continuous subsequence] [trigonometric fruit count]
- Some puzzles about data dictionary
- Overview report of Chinese AI medical imaging industry in 2022
- [7.15] code source - [neat array 2] [ternary cycle] [reverse pair on tree] [sequence of cochlea]
- 【ACWing】2492. HH的项链
- Go-Excelize API源码阅读(三)——OpenReader()
- 关于数据字典的一些解惑
猜你喜欢
Homework on the first day of summer rhcsa training
[acwing] solution of the 60th weekly match
A review of classical must see for Nonconvex Optimization Problems "from symmetry to geometry", University of Rochester, et al
No.2 compilation preliminary
96. Different binary search trees
腾讯云对象存储操作流程
Okaleido or get out of the NFT siege, are you optimistic about it?
Installation of Topy Library (topology optimization software)
Colliding Mice碰撞老鼠工程分析
Redis源码与设计剖析 -- 4.跳跃表
随机推荐
BiShe - online reservation and registration system based on SSM
Colliding Mice碰撞老鼠工程分析
AcWing 134. 双端队列
非凸優化問題經典必看綜述“從對稱性到幾何性”,羅切斯特大學等
关于数据字典的一些解惑
00 后博士获聘南大特任副研究员,曾 4 岁上小学,14 岁考入南大!
2022年中国AI医学影像行业概览报告
Huawei Technologies:Jonatan Krolikowski | 从设计到部署零接触深度强化学习WLANs
AcWing 134. Double ended queue
[C language] introduction and implementation of mine sweeping [array and function]
Robotics at Google:Laura Graesser | i-Sim2Real:在紧密的人机交互循环中强化学习机器人策略
TKE跨云联网挂载CFS
版本通告|Apache Doris 1.1 Release 版本正式发布!
asterisk:No compatible codecs, not accepting this offer!
暑期rhcsa培训第三天作业
非凸优化问题经典必看综述“从对称性到几何性”,罗切斯特大学等
uniapp 高德地图定位功能
Introduction:Multiple DataFrames
Okaleido或杀出NFT重围,你看好它吗?
陶博士月线反转6.0