SIM900A的一个BUG
使用SIM900A有一段时间了,在自己产品中进行GPRS传数据,一直都很正常。前天新装一个野外点,发现不能发送数据包,与服务器连接正常。在野外受到工具条件各方面的限制,调了一天以失败告终。在办公室搭建好调试平台,经过反复观察分析,原来数据包里面不能出现“1B”这个字符,1B在ASCII里面是Esc键,SIM900A一旦收到1B就不再发送数据包(估计是退出了)。在这里提醒各位使用SIM900A的注意,同时如果有SIM900A技术服务的看见希望解决这个问题,GPRS在进入到数据传送状态后,除了手册中指定的特殊命令外不应该在响应其他字符,这个问题真有点坑爹。。。。。 都是at命令 不存在吧 没遇到过这种问题 本帖最后由 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>),启用定时自动发送 谢谢楼上的发帖。我发现这个问题后已经改为定时发送来避免这个问题。 指定长度不解释,我们用来传送二进制,没发生过问题.
只是有时>号不出来比较扯淡 正在学习中{:smile:}
页:
[1]