|
历史情况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
|