打印

串口通信一帧可以传多少字节?

[复制链接]
18880|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fke_mmm|  楼主 | 2008-8-1 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dld2| | 2008-8-1 14:57 | 只看该作者

100个汉字都可以

使用特权

评论回复
板凳
guosr| | 2008-8-1 20:09 | 只看该作者

主要考虑重传概率、协议等待时间、缓冲区大小

     假设你的串口正常使用时,误码率为万分之一,那么如果一帧数据传10字节,总共就是100比特,这帧数据发生错误的概率就大约是1%。那就意味着每传输100帧数据,就有一帧因为发生错误而要重传。这在一般的系统中还是可以接受的。
     如果万分之一的误码率之下,你硬要一帧数据传400字节,那就是4000比特,那么这帧数据发生错误的概率就高达33%,就意味着每三帧数据,就有一帧需要重传,而重传也存在较高的再次发生错误的概率。
     除了误码导致重传,还要考虑一帧数据的交互耗费的时间,数据帧越大,这帧数据传输耗费的时间越长,通信的实时性就越差。同样,双方的CPU耗费的缓冲区资源就越大。潜在的稳定性就越差。

使用特权

评论回复
地板
fke_mmm|  楼主 | 2008-8-2 12:04 | 只看该作者

谢谢3楼,说的很详细.

使用特权

评论回复
5
huangqi412| | 2008-8-2 22:16 | 只看该作者

串口通信中一帧可以传多少字节?

你可以在程序中用个while(1) 不断电,发到地球末日,异步话误差不积累的.

使用特权

评论回复
6
dsz| | 2008-8-4 14:20 | 只看该作者

while(1) 不断电,发到地球末日

while(1); 不断电,发到地球末日

使用特权

评论回复
7
chunyang| | 2008-8-4 19:12 | 只看该作者

huangqi412说的正确,突发误差是不会积累的

3楼算法有误。突发错误可以通过侦错重发机制解决,过大的帧长度会使该机制的代价明显上升,但不会因此增加错误发生的概率。

使用特权

评论回复
8
Wxy8030| | 2008-8-4 21:11 | 只看该作者

3楼的算法具体细节不谈,大方向没错——

比如一个字节的失败率是千分之一,那么成功率=999/1000
那么连续传输100个字节的成功率=(999/1000)*(999/1000)*(999/1000)*.....乘100次,大约等于0.9
那么连续传1000个字节的成功率=0.999的1000次方......约等于0.37

毫无疑问一帧数据越多,这一帧数据的成功率就越低!一帧数据怎么能随便多少就是多少呢?

使用特权

评论回复
9
chunyang| | 2008-8-4 22:40 | 只看该作者

千分之一的误码率指传1K字节可能出现1字节的误码

成功率是0.999,楼上算法则是0.37,呵呵,天地之差啊。
如果传1K字节必出现1字节的误码,那么连续传1K字节的成功率则是0。
定义问题。

使用特权

评论回复
10
Wxy8030| | 2008-8-4 22:55 | 只看该作者

......

嘿嘿,春阳兄,请问怎么计算如果一帧就是1000字节,通信一次的成功率是多少呢?

或者举个通俗的例子,我发送了1000次,有500个误码,请问每个字节的成功率是多少呢?

再简单点,我扔了1000次硬币,500次是反面,请问每次正面的几率是多少呢?

这个时候再反过来计算,发送1000次,有1个误码,每个字节的成功率是多少呢?

使用特权

评论回复
11
chunyang| | 2008-8-5 10:26 | 只看该作者

前面已经说过是定义问题

误码率为千分之一的话,连续传1K字节的成功率是0.999,传一字节的成功率是0.999开1000次方,你的概率算法没错,但定义引用错了。

使用特权

评论回复
12
Wxy8030| | 2008-8-5 10:50 | 只看该作者

......

误码率=传输中的误码/所传输的总码数*100%

使用特权

评论回复
13
chunyang| | 2008-8-5 15:39 | 只看该作者

误码率不能这么定义

    如果在技术上避免误差的积累(这很容易),那么误码的产生就仅由外部环境的影响而突发产生,考虑一般普适的环境条件下外部各种因素的变化对通讯的影响,从而得出一个平均出错概率,这个概率才是真正的误码率,换句话说,误码率是要讲前提条件的。如果去除外部环境的影响,比如在恒温、恒湿的电磁暗室中,供电也是用恒定的无噪声电源,那么不论多大的数据包传多久误码也不会出现,也就是说,误码率是个概率值而且还是个条件概率值。如果照楼上的定义,那其实是隐含了一个条件,也就是说误码是必然出现的,对此我在前帖中已经提到:“如果传1K字节必出现1字节的误码,那么连续传1K字节的成功率则是0”,这个“误码率”已经不再是概率值了。
    工程条件下,误码率确实可以用楼上的方法来简单表述,这属工程近似法,但不能据此引用概率乘法,否则由此得出的结论就离实际结果十万八千里了。

使用特权

评论回复
14
guosr| | 2008-8-6 20:46 | 只看该作者

好,我来做个总结,但愿可以就此封帖

    应该说大家讨论这个问题都是站在自己预设的条件之下,因此都有各自的道理。
    我是按照一般的串口通信的设置,8个数据位、1个起始位、1个停止位,无奇/偶校验,此时单个字节的错误无法通过重发机制得到纠正,因此只能在一帧数据的末尾加上校验和,那么误码率(说准确点,是误比特率)就是个要考虑的问题。不论是突发误码还是随机误码,一旦发生,就要重传。如果是随机误码,按照经典概率论计算误帧率是没有问题的。即便是突发误码,长长的一帧数据,仅仅因为一个比特的误码而要重传,信道资源被白白浪费了,不划算。当然,帧长度太短也不划算,帧头、校验、协议开销占的份额太大了,信道利用率也不高。
    如果串口设置成奇/偶校验,那么每个字节的错误可以立即被纠正,那么理论上帧长度可以很长(从某种意义上讲,这实际上相当于一帧数据只有8+1比特)。但是,即便如此,帧的长度也不能太长,这还收到通信协议的制约,如果在某时段内出现较多的突发误码,导致收发双方频繁重传,甚至重传超过N次,引起一方退出通信,这仍然是通信失败。这就是chunyang说的“过大的帧长度会使该机制的代价明显上升”。
    至于如何计算帧错误概率,那都无关紧要,我相信chunyang兄和Wxy8030面临一个具体问题的时候都能算得明明白白。这里关键是要说明:通信中,帧长必须适度,不可太长。

使用特权

评论回复
15
chunyang| | 2008-8-6 21:47 | 只看该作者

不错,兼顾效率的话,帧长度不能过长也不能过短

    多数通讯应用需要也应该加入协议,但协议的加入会增加帧长度,有效数据越少效率就随之越低,所以大数据量通讯时帧不能太短,而帧过长则容易遭受突发干扰,在没有纠错或纠错无效时,一个bit错整个数据包就完了,所以帧长度太长反而会降低实际效率。至于帧长度多少合适,那要看具体应用,环境不同、通讯载体不同,采用的技术不同等等最佳帧长度就不同,同时还要兼顾系统资源,资源不够,即使完全无误码时也没用。
    多数情况下,有线通讯的最佳帧长度要远远大于无线通讯,因为采取适当手段就可以大幅度降低突发干扰的程度,特别是在短距普通环境中,这时的瓶颈往往是系统资源,特别是在资源相对贫乏的嵌入式系统中。

使用特权

评论回复
16
four_sea| | 2008-8-16 20:50 | 只看该作者

异步通讯

异步通讯每贞(8-11BIT)都有其始位同步,你说的10字节应该指的是数据包。
如果波特率误差小,基本不会出现错误,理论上可以一直传输。

使用特权

评论回复
17
E007| | 2008-8-28 00:07 | 只看该作者

误码分析

我的看法:
串口通信的同步是在一个字节(启始位,数据7或8位,可选校验位,停止位)内进行同步的,所允许的同步误差可以达到20%以上(具体多少我记不清了),所以不管你的帧有多长,同步误差会在下一个字节的启动位进行校正,不会积累,因而如果没有干扰,你尽可以发到地球末日而不会因为同步误差而导致出错,导致出错的只会是干扰。要想消除干扰引起的误差,就要从线路板及线缆的抗干扰设计以及纠错上下功夫,而无需考虑位同步问题。

使用特权

评论回复
18
soho| | 2008-8-30 03:27 | 只看该作者

guosr讲奇偶校验可以纠错

实质还是侦错。它只是侦出1位出错的情况,并不知道错在那一位。

使用特权

评论回复
19
soho| | 2008-8-30 03:31 | 只看该作者

如果出错率是千分之一

是指字节出错率还是帧出错率?
如果是字节出错率,1000字节长的帧成功率应该接近0的。
如果是帧出错率,那么一个字节的成功率,是远远高于0.999的。

使用特权

评论回复
20
hch| | 2008-8-30 23:31 | 只看该作者

我支持chunyang

做无线的人最清楚 异步通讯的效率误码率 这些关系了。我们天天计较的就是这些,太长了 丢了一个bits 没有办法恢复就得重传 ,太短了 加上导频 同步头  划不来啊 ,FIFO 多用了 就是为了这些问题

使用特权

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

本版积分规则

5

主题

14

帖子

0

粉丝