|
一个多月前,开始使用STM8L151 +SI4432无线模块做一个温度采集的实验,使用3.3v电池供电。
基本功能完成后,待机电流3.8uA。所以开始下工夫优化程序,逐步降低发射时的电流消耗,于是就产生了一下问题。。。
按照SI4432的描述和一般的经验,无线发射一个数据报的时间,从启动芯片发射到SI4432芯片nIRQ返回给STM8L单片机下降沿中断, 应该和数据报的长短和发射速率(flying speed)有关,
理论上应该是: TX_time = 所有数据位的数量 / TX_speed; 例如发射100bit时, 如果 TX_speed =10Kbps. 则需要耗时10ms;
我做了以下测试:
电路板上有一个LED指示灯,我在程序中:
点亮LED指示灯,此时控制脚(示波器通道1输入低电平0V);
单片机控制无线模块发送数据报,等待发送完成(由SI4432的nIRQ引脚下降沿来触发CPU的外部中断);
熄灭LED指示灯,此时控制脚(示波器通道1输入高电平3.3V)
使用示波器查看LED控制引脚的低电平宽度, 就可以认为这个时间是数据报的发射时间!
到这里,我想大家可以理解,这些都没有问题吧?!
继续:
为了省电,又为了兼顾接收灵敏度,我测试不同发射速率下,同一数据报的发射时间, 就是测量LED控制引脚的低电平时间。
测试前提,使用同一个程序,不同次测试中,仅仅更改一个参数,就是发射速率,当然,涉及的寄存器还是比较多的,反正按照SI4432芯片的自动参数设置文档生成的寄存器参数来设置,相信这个大家都知道!
测试结果: 【为了描述简洁,这里仅仅列出2种速率的测试结果,我时间测试了1.2K、2.4K, 4.8K. 9.6K. 19.2K, ... 250K所有的速率】
我的应用数据报文的长度是 51字节;
实际发射数据 5字节引导码 +2字节同步 +4字节帧头 +1字节长度 +51字节数据 +2字节CRC =65字节
SI4432发射速率 实际测量发射需要时间 芯片发射时间理论值 实际测量时间值 和 理论值的差值
25 Kbps 27.0ms 65字节 *8bit /25Kbps =20.8ms 27.0-20.8 =6.2ms
125 Kbps 5.88ms 65字节 *8bit /125Kbps =4.16ms 5.88 -4.16 =1.72ms
这里问题开始显现! 为何25Kbps 和 125Kbps 下 实际发射测量时间 和 理论发射时间的 差值不一样呢?
由于使用同一个程序,都是中断等待发射完成的,所以这个差值应该一样啊!? 这个差值是啥呢? 程序的延时, 测量的误差,芯片发射前的启动时间? ....
不管这个差值是如何由于我的测量的不完备性导致的, 但是有一点是肯定的, 这个时间不应该和发射速率有关, 在相同测试条件下,应该是一个常数! 对吗?
我在多次测量和分析的基础上,提出一个假设: SI4432芯片在发射数据报文时, 还附带发射了124bit左右的“冗余位”!
验证我的假设:
如果芯片存在124bit(具体多少位不定?这里假设124) "冗余位",则芯片发射时间计算值:
25K发射 (65字节 *8bit +124bit) /25K = (520+124)bit /25kbps =25.76ms
125K发射 (65字节 *8bit +124bit) /125K = (520+124)bit /125kbps =5.152ms
这样,实际测量时间值 和 理论值的差值 :
25Kbos 27.0 - 25.76 =1.24ms ;测量误差 1.24-0.728 大约0.5ms
125kbps 5.88 - 5.15w =0.728ms
现在按照冗余位存在124bit的情况分析测量结果,测量误差 0.5ms , 考虑到两次测量时间时,示波器分度值设置不同,
25Kbps下使用5ms, 125Kbps下使用1ms, 在5ms分度下0.5ms测量误差是合理的!
反证:
按照厂家说明,不存在"冗余位"发射时,测量发射时间的理论值应该是:
25Kbps 20.8ms +程序延时时间t, 测量值27.0ms =20.8ms + t(6.2ms) 【1】
125bps 4.16ms +程序延时时间t, 测量值5.88ms =4.16ms + t(6.2ms左右)【2】
如果【1】式成立,可以明显看出【2】式不能成立,这样也反证厂家说明不成立!
以上问题已经和上海和新华龙的FAE交流过了,但是他们都认为是我的问题,理由很充分:
“我们从没有接到该问题的报告”
“SI4432芯片出货几百K了,有这个问题,咋可能。。。”
。。。。
到此,有的朋友会说,这个不是大问题,即使如我所说的那样,反正不影响使用!
我不这样认为,理由如下:
如果存在“冗余”发射时间的话,问题很严重!
我们都知道,传输效率 = 有效数据长度 /无线传输总长度;
SI4432芯片的FIFO最大64字节,则有效载荷最大64字节, 则:
发射64字节时, 效率 =64 /(64 +5字节引导码 +2字节同步 +4字节帧头 +1字节长度 +2字节CRC +124bit/8bit) =64 / (64 +13 +15.5) =69.1%
发射32字节时, 效率 =32/(32 +13 +15.5) = 52.8%
发射16字节时, 效率 =16/(16 +13 +15.5) = 35.9%
也许你反驳,你可以减少帧头长度,不使用CRC来减少发射时间, 降低功耗 !!
那如果数据报文长度8~16字节(平均12字节),这个是一般温湿度采集常用的数据长度, 不使用帧头,报文长度和CRC,
则效率 = 12 / (12 + 5字节引导码 +2字节同步 124bit/8bit) =12/(12 +7 +15.5) = 34.8%
如果没有冗余位, 则效率 =12 /(12 +7) = 63.15%
这下你应该惊讶了吧! 如果有冗余位,我的电池耗电量要增加多少?!
以12字节有效数据为例, 原来要发送 19字节, 现在要发送 34.5字节, 耗电量增加 15.5/19 = 81.6% ! 相当于几乎多耗费了一倍的电量!
最后说明:
以上我的假设,希望大家拍砖和讨论! 更希望有SI4432芯片的朋友动手测试一下,来比较一下测试结果,谢谢!
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|