打印

SI4432发射时间的问题,请大家讨论,谢谢!

[复制链接]
13966|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zb213015|  楼主 | 2012-5-30 23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个多月前,开始使用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芯片的朋友动手测试一下,来比较一下测试结果,谢谢!

相关帖子

沙发
suse-lj| | 2012-5-31 13:36 | 只看该作者
时间,我到没有测试过。我很感兴趣LZ的3uA的待机电流是怎么做出来的啊。
能否交个朋友,聊一小。我QQ:595736746

使用特权

评论回复
板凳
zb213015|  楼主 | 2012-5-31 14:56 | 只看该作者
只要将STM8L151进入halt即可,
因为我的板子上只有一个无线模块和一个DS18B20, 并且无线模块的供电是通过功率管关断的,所以电流就比较小。那个都是单片机低功耗性能好的缘故而已

使用特权

评论回复
地板
zb213015|  楼主 | 2012-5-31 15:14 | 只看该作者
当然,如果你是MP430的话,待机电流可以更低的

使用特权

评论回复
5
似水无痕| | 2012-5-31 17:16 | 只看该作者
楼主能交流一下吗,我的也是STM151 SI4432 ,目前已经量产了
QQ 1603528373

使用特权

评论回复
6
zhya666| | 2012-6-2 22:26 | 只看该作者
应该是你那里设置错误,这样的问题不应该存在。

使用特权

评论回复
7
NE5532| | 2012-6-3 15:10 | 只看该作者
楼主,你高级货用太多了,没搞懂无线是怎么传输的。你算SPI接口填充FIFO的时间和中断响应时间木有?你应该测SPDT控制端的信号宽度,差不多就是PA打开的时间长度了。

无线通讯最后要发几个bit的空码,才能让最后输入的数据发送完成,多是多这几个BIT的时间(SI4432没有明确说明发了多少,但是肯定是发了的)

ps:从CC1020玩过来的苦B才把这些东西弄懂了……………………:'(

使用特权

评论回复
8
hwk612167| | 2012-6-3 23:52 | 只看该作者
LZ有没有再测试过呢?
我测了没你那么大的时间差,4字节引导码+2字节同步码+57字节数据+2字节CRC=65字节
波特率      测量值      理论计算值    时间差      时间差合算成BIT
1.2kbps      445.25      433.33          12ms          14.4
9.6             55.82         54.17            1.65ms       15.8
25              22.03         20.8              1.17           29.3
125            2.84           2.08              0.76           190
可以看出,就算有多发BIT,最多不超过14个bit。

使用特权

评论回复
9
hwk612167| | 2012-6-3 23:54 | 只看该作者
无线通讯最后要发几个bit的空码,才能让最后输入的数据发送完成
NE5532,你好。请问你说的这句话什么意思呢,能不能解释下?谢谢 7# NE5532

使用特权

评论回复
10
NE5532| | 2012-6-4 17:06 | 只看该作者
编码器最后几个BIT是编码不了的,所以要多送一段进去“喂”他,就像你不能用手往绞肉机里送肉,要找跟棒子捅一样。详情请看CC1020的数据手册,编码发送部分。

使用特权

评论回复
11
hwk612167| | 2012-6-4 17:28 | 只看该作者
具体几个有说吗,我去下来看看
我另外用cc1100 e试了下1.2kbps发送共57+8字节数据,时间与理论计算值只差1.7ms不到,只够1个bit,难道是就多发了1个BIT吗?我在cc1100 e手册没有找到相关部分。 10# NE5532

使用特权

评论回复
12
hwk612167| | 2012-6-4 17:30 | 只看该作者
补充一下,曼彻斯特编码 FEC都没开启。 10# NE5532

使用特权

评论回复
13
NE5532| | 2012-6-4 22:38 | 只看该作者
CC1020是发4个,这个曼彻斯特不曼彻斯特无关,但是曼彻斯特是不是会延长我就没有研究过了。

使用特权

评论回复
14
hwk612167| | 2012-6-5 09:26 | 只看该作者
把1020手册翻了下,没找到有讲多发4bit的,英文看多了是在头痛的很,能不能告知页码? 13# NE5532

cc1020.pdf

1.63 MB

使用特权

评论回复
15
hwk612167| | 2012-6-5 10:44 | 只看该作者
难道是附图这个?发送延迟是什么意思呢?
我在CC1100E手册上看到发送延迟8BIT,那8bit占用时间不少啊,我测试的结果最多只可能多1bit,怎么回事呢。
求NE5532大哥指教!谢谢 13# NE5532

1.JPG (24.59 KB )

1.JPG

使用特权

评论回复
16
NE5532| | 2012-6-5 18:30 | 只看该作者
是这个,看来我记成4个了。各家实现可能不同,除非Siliconlab提供细节,不然只能靠猜测。楼主这么在乎这个时间是干嘛呢?

使用特权

评论回复
17
sedatefire| | 2012-6-6 15:33 | 只看该作者
是这个,看来我记成4个了。各家实现可能不同,除非Siliconlab提供细节,不然只能靠猜测。楼主这么在乎这个时间是干嘛呢?
NE5532 发表于 2012-6-5 18:30
楼主要省电,大哥,省电很重要的。楼主数据量太少,所以这个问题就凸显出来了。

使用特权

评论回复
18
sedatefire| | 2012-6-6 15:35 | 只看该作者
楼主,你高级货用太多了,没搞懂无线是怎么传输的。你算SPI接口填充FIFO的时间和中断响应时间木有?你应该测SPDT控制端的信号宽度,差不多就是PA打开的时间长度了。

无线通讯最后要发几个bit的空码,才能让最后输 ...
NE5532 发表于 2012-6-3 15:10


你算SPI接口填充FIFO的时间和中断响应时间木有? 这个在理,且是主因。
你应该在启动发送函数的出口翻转LED,这样再看看。

使用特权

评论回复
19
NE5532| | 2012-6-6 23:01 | 只看该作者
楼主要省电,大哥,省电很重要的。楼主数据量太少,所以这个问题就凸显出来了。
sedatefire 发表于 2012-6-6 15:33


那你还能改芯片不成?人家设计成这个样子,你就只有这个样子用,要不就换一个,你可以控制最短发送时间的?

使用特权

评论回复
20
edward_peng| | 2012-6-7 14:23 | 只看该作者
随着大家对SILABS的了解,和对SI4432的兴趣,特拿出一些开发时注意的地方告诉大家,以免大家在开发过程中在犯错。
  一、在开发硬件时:
      1、布线尽量均匀,按照50欧姆的要求去画,
      2、记得过孔、铺地。
      3、亏电电路尽量小,
  二、软件调试:
      1、按照原长的例程去修改,不要自己来设置寄存器,
      2、原长会有寄存器设置工具
      3、做简单的硬件测试和软件判断
      4、确认需要修改的寄存器值是否是正确的,
  三、注意问题:
      1、晶体的精度可能导致你接收不到信号
      2、发射和接收的频率是否一致
   发射机是否正常
(1)看频谱
(2)设置中断
(3)测量电流是否是在正常工作的值
(4)采用内置PN9做信号源
接收机是否正常
(1)采用信号发生器
(2)设置中断
(3)测量电流
还有一些,后续加上。
  有其他问题希望交流!!QQ:113714426
附加一些:
元器件放置以及布线注意事项:
芯片是4.0mm*4.0mm,20脚QFN封装,底部为地。必须通过一些过孔将芯片的地与pcb板的地很好的结合起来;
为了减少不必要的耦合,尽量避免一些较敏感的数字(和MCU相通信的网络),
射频走线平行,芯片底部不能走线。同样是为了尽量减少耦合,确保相同网络的走线线宽要相同,以及在空间允许的范围内敏感走线间距离至少为线宽的3倍;
在射频前端电路,相邻电感成相互垂直状放置,以较少耦合;
发射电路和接收电路中间留下足够大的地,避免相互间的耦合;
偏置电路中的扼流电感尽量靠近TX脚,减少发射对接收电路的影响;
射频电路中的元器件,尽量靠拢并使用较小封装的元器件,减少寄生电容的产生或影响;
在空间允许的情况下,尽量保持射频走线和地之间的距离,最好大于0.5mm;
射频电路中,元器件接地的脚周围放置尽量多的过孔来减少寄生电感及其影响;
电源滤波电路中的电路应该尽量靠近vdd脚,以确保滤波电容和VDD间的环路面积最小;(要强调一点,参考电路中的电源滤波电容一个都不能少,每个电容都有其作用。此前有过,因为少了某个电容致使模块工作不正常,死机的现象发生)
晶振尽量靠近芯片减少寄生电容的产生,寄生电容过多容易产生频率漂移,晶体下面不要走任何线,特别是电源线;
射频前段电路放置尽量大的地和足够多的过孔,射频走线下面(BOTTOM 面)尽量不要走线或走过长的线,这样可以避免信号通过它们辐射出去;
射频线宽尽量粗,pcb板近量薄。 交流QQ113714426

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

1

粉丝