一个多月前,开始使用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芯片的朋友动手测试一下,来比较一下测试结果,谢谢! |