scybzxl 发表于 2013-10-25 08:49:06

SIM900A的一个BUG

使用SIM900A有一段时间了,在自己产品中进行GPRS传数据,一直都很正常。前天新装一个野外点,发现不能发送数据包,与服务器连接正常。在野外受到工具条件各方面的限制,调了一天以失败告终。在办公室搭建好调试平台,经过反复观察分析,原来数据包里面不能出现“1B”这个字符,1B在ASCII里面是Esc键,SIM900A一旦收到1B就不再发送数据包(估计是退出了)。在这里提醒各位使用SIM900A的注意,同时如果有SIM900A技术服务的看见希望解决这个问题,GPRS在进入到数据传送状态后,除了手册中指定的特殊命令外不应该在响应其他字符,这个问题真有点坑爹。。。。。

ljt80158015 发表于 2013-10-25 08:53:19

都是at命令   不存在吧

子鱼 发表于 2013-10-25 08:53:51

没遇到过这种问题

ARM2012 发表于 2013-12-18 11:03:00

本帖最后由 ARM2012 于 2013-12-18 11:17 编辑

这个问题,刚好遇到,后来知道原因了,出现这个问题可能是因为指令AT+CIPSEND使用了1A作为结束符的发送方式,这样如果在发送16进制数据时,数据中含有1A或者是1B,就会被提前结束或者中断发送。另外有些情况如果是16进制的00,遇到strcat,starcpy,strlen,printf等字符串处理函数也会被提前结束。
======================
遇到16进制00提前结束的解决方法:不使用库函数的字符串处理函数,改用for循环拷贝、添加,这样就不会将16进制的00解释为'\0'
遇到16进制1A或1B,导致提前发送或结束发送的错误,可以参考AT手册上使用限定长度,只要达到指定的长度后,自动发送,而不管是否含有结束符1A。
或者可以限定时间(AT+CIPATS=1,<time>),启用定时自动发送

scybzxl 发表于 2013-12-21 10:40:07

谢谢楼上的发帖。我发现这个问题后已经改为定时发送来避免这个问题。

yj_yulin 发表于 2013-12-21 11:34:06

指定长度不解释,我们用来传送二进制,没发生过问题.
只是有时>号不出来比较扯淡

sbgavin 发表于 2014-4-9 22:49:35

正在学习中{:smile:}
页: [1]
查看完整版本: SIM900A的一个BUG