查看: 6136|回复: 8

2530裸奔串口之波特率问题浅析

[复制链接]
lhdzwkk 发表于 2011-10-21 13:42:55 | 显示全部楼层 |阅读模式

历史情况1:
很多人可能一拿到2530的模块会跑个串口程序看看,我也是一样
115200波特率,两线串口,n,8,1最普通的,程序写成收什么返回什么
结果我发现了这样的一个情况:
[13:14:52 ---] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
[13:14:52   0] 00 01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 17 18 19 20
丢了一个字节!!!!
然后我在2530的文档中找到这么一句话:
Known Issues:
- SerialApp is not reliable when used for high-speed, large file transfers -
   the receiving application occasionally drops a byte.

这意思是用高波特率接收会丢字节

当我用带协议栈的程序跑的时候就没这个问题,我想当然的认为,这个是因为用了DMA传输的缘故,串口的BUG本身是存在的
//----------
历史情况2:
做了个串口底板,用的是FT232RL的usb转串口芯片
一测试发现:在电脑的串口打印正常,在这个usb转串口打印全错!!!!!!

然后同样原理的程序我用2430跑,一点问题都没有!!

FT232?还是CC2530不行!!!!!!!!!!!???????????????????????????

多番测试,(换底板,换2530,换usb线,换电脑)都不行!!
但我发现用带协议栈的程序2530在usb转串口打印居然没问题!!!!

难道历史情况1的问题在作怪????
//-------------
索性我强烈怀疑2530的芯片设计问题,于是我这么做了:
216        12        230468.75        230400        0.03%
216        11        115234.375        115200        0.03%
59        11        76904.29688        76800        0.14%
216        10        57617.1875        57600        0.03%
59        10        38452.14844        38400        0.14%
216        9        28808.59375        28800        0.03%
59        9        19226.07422        19200        0.14%
216        8        14404.29688        14400        0.03%
59        8        9613.037109        9600        0.14%
59        7        4806.518555        4800        0.14%
59        6        2403.259277        2400        0.14%
这个大家知道是什么意思,然后我就在115200这个波特率上测试,只改变第一个参数:
最后有:
pc原始串口:200-244
pci转串口:189-239
usb转串口:220-248
!!!!!!!!!!!!!!!!!!!!!!!!!!
看见没 ti数据说明书中说的216正好出了usb转串口的范围!这不坑爹嘛!!!!!!!!!!!!!
我已经不想多说什么了
我也不知道在今后的测试中如何去避免这种情况了,我只能低调的重复测试,试图得出一个最佳值
//------------------
于是呼,历史情况1会不会师波特率累计误差导致丢包????????
改呗,最后发现果然如此!!!

[13:35:31 579] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
[13:35:31    2]   00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
不丢字节了!!!
但是如果发的数据再多一点呢?
[13:36:17 ---] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
[13:36:17   0] 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 00 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
果断又丢了!!!!
好吧,你知道怎么回事了,尽量避免吧
大家可以总结下

谁能告诉我这个寂寞的程序员,为什么TI犯的错,要我来花时间,

大家自己小心吧
从2430升级到2530,这个串口我是怕了!

对了 协议栈中的串口到底和裸奔有什么区别这个待有心人发觉吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| lhdzwkk 发表于 2011-10-21 13:45:52 | 显示全部楼层
2430的裸奔程序用IAR730,2530的裸奔程序用IAR760
pnm_0881 发表于 2011-10-29 20:26:22 | 显示全部楼层
我遇到的波特率问题是选择的是32M晶振,但实际却是16M,估计是我的晶振有问题吧??????
高兴就好 发表于 2011-11-3 18:00:33 | 显示全部楼层
用2530
每个分包32字节
暂时没发现丢数据

楼主一般用多少个包?
409458627 发表于 2012-4-16 21:40:44 | 显示全部楼层
您好,请问下2430的程序怎么移植到2530 上,好像关于2530的资料比较少啊,2430的开发板我没有 我就有个2530的开发板,我是不是和商家换个2430 的开发板 商家同意给换 谢谢您的回答啊
lizheng86312 发表于 2012-8-29 12:32:09 | 显示全部楼层
学到东西了。顶。。。
lizheng86312 发表于 2012-8-29 12:32:28 | 显示全部楼层
学到东西了。顶。。。
小猴子872 发表于 2014-3-1 12:47:39 | 显示全部楼层
高波特率 大数据量发送数据 每隔一段时间总是丢一个字节,导致解包失败,想了很久都想不出为什么会丢一个字节,一直以为是其他中断导致的,由此看来很有可能是波特率的问题,采用DMA方式就没有这个情况了,而协议栈默认采用DMA方式,并且DMA方式优先于ISR方式,如果把DMA去掉则编译出现问题,所以这个ISR如果不改协议栈基本上用不到,通过修改协议栈使用ISR方式同样产生丢包现象。。。真的很无语啊
Hugo801122 发表于 2014-3-12 21:34:05 | 显示全部楼层
学到东西了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表