工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->仅需3步,轻松实现si446x无线收发器的变长包收发

仅需3步,轻松实现si446x无线收发器的变长包收发

作者:angelazhang时间:2015-08-16

Silicon labs EZRadioPro 系列的si446x 无线收发器,具备高级自动包处理功能。其中可变包长的收发在应用中非常普遍。那么如何轻松快速实现可变包长收发呢?按照下面的步骤,3步便可完成。在开始之前,我们先来介绍一下可变包收发的原理:

在接收端,需要2个field支持,其中一个field保存变长数据的长度,接收器会根据这个字节的具体数值,来决定将要接收的数据个数,当接收到的负载数据个数等于field1 数据长度的值时,就会产生接收完成中断,从而实现变长的接收。例如field1设置为数据长度,field2设置为负载数据。

那么在发射端就要和接收端对应起来,发送数据的时候,把数据长度放在field1中,负载数据填入field2中。例如 前导码+同步字+数据长度(1字节,0x10)+数据(16字节数据)。这个例子说明,TX FIFO中实际填写了17个字节的数据,其中1字节代表长度,剩余的16字节是负载数据。启动发送命令,这17字节的数据就发送出去了。


实战操作3步曲,下面将具体实现代码操作:


第一步:使用WDS配置生成一份双向的可变包长配置头文件备用。如图:

勾选enable variable packet length选项,其余配置按照上图配置,特别说明,field2区域的最大长度尽可能设置大一些,要求大于等于应用中可能的最大数据包长。例如:如果发射端实际发送了40字节,而field2 max length 只设置了20字节,那么接收机只会接收20字节就产生接收完成中断,而后面的20字节就丢弃了,如果field2 max length 设置大于40,那么40个字节的数据便可全部接收完全。具体可以查阅API文档中start RX命令关于length的参数说明。


第二步:把start TX和 start RX命令函数中的length长度设置为“0”

例如:  

void vRadio_StartRX(U8 channel, U8 packetLenght )

si446x_start_tx(channel, 0x80, length);

把start TX和 start RX命令函数中的length长度只能控制1个field的长度,在多个field配置中,每个field的长度由对应的field 

length寄存器来控制,详细可参阅API命令描述文档。


第三步:修改field2 负载数据的长度

由于start TX和 start RX命令中的length长度不再起作用,实际需要收发的数据长度由对应的field length寄存器来控制,field1一直代表数据包的长度,收发都是一个字节来表示长度,因此不需要修改field1 length寄存器。修改field2 length的代码如下:

在发送的状态修改如下:

si446x_set_property(0x12,0x02,0x11,0x00,tx_buf[0]);

tx_buf[0]存放的是数据包的长度,这行代码会自动把需要发送数据包长度写入到field2 length寄存器中。

把需要发送的数据写入FIFO,代码修改如下:

si446x_write_tx_fifo(tx_buf [0]+1, tx_buf);

因为变长包的格式是:0x07,0x01,0x02,0x03,0x04,0x05,0x06,0x07;//第一字节是长度,后面是数据。实际写入到TX FIFO发送的数据是8字节 = 负载数据7字节+数据长度1字节。

在接收状态修改如下:

si446x_set_property(0x12,0x02,0x11,0x00,63);//接收的长度要大于等于发送的长度

数值63代表本次可接收的可变长数据,最长是63字节,如果发送的可能的数据长度大于63,可以设置更大。每个field可设置的最大长度是2的13次方。



评论

技术专区