Я бы посоветовал еще раз ВНИМАТЕЛЬНО прочитать.
AT+IPR=0 setting to auto-bauding will take effect after module resets. If user wants to change DTE baud rate during module is running, i.e. from 57600 to 4800, DTR shall be used to urge auto-bauding progress. DTR shall be pulled up to invalid state at least 2 seconds by DTE and then pulled down to valid state. The step will urge auto-bauding progress and DCE will synchronize its baud rate after it receives data from the serial port.
При помощи DTR можно изменить скорость только если IPR=0 - то есть автоопределение.
Тогда, если модуль изначально допустим засинхронизировался на 19200 а надо перейти на 9600, мы тянем на 2 сек. DTR и модуль опять начнет процесс синхронизации автоскорости.
Если же вы установите фиксированную скорость, то дергание DTR будет как мертвому припарка.
А потому вывод - все работает как и написано.
Кроме того по нашей просьбе после 06 версии переделан алгоритм работы DTR. Окончательно это описано в SIM900_Serial Port_Application Note_V1.02.pdf Обратите внимание что DTE и DCE это не выводы, а устройства.
NOTE: The DTR signal must pulled to low level voltage when DTE is sending data to module. If DTR does not connect with DTE, DTR must be connected to GND via a 10K resistor.
6.3 DTR Module will automatically go into SLEEP mode (set AT+CSCLK=1) if DTR is set to high level and there is no on air and no hardware interrupt (such as GPIO interrupt or data on serial port). In this case, the current consumption of module will reduce to the minimal level. During SLEEP mode, the module can still receive paging message and SMS from the system normally. If DTR Pin is pulled down to a low level, this signal will wake up module from SLEEP mode. The serial port will be active after DTR changes to low level about 50ms. DTR must be held low during the call. The AT command ”AT&D” can be used to set DTR function mode. When it is set to ”AT&D0”, TA ignores status on DTR. When it is set to ”AT&D1”, ON (low)->OFF (high) on DTR: module will be changed to command mode when the connected call is remained.. When it is set to ”AT&D2”, ON->OFF on DTR: call is disconnected, module is changed to Command mode. During state DTR = OFF, it is auto-answer off. TCP/IP applications only support AT&D1 and AT&D0. In TCP/IP application (for more detail, please refer to TCP/IP application NOTE), DTR line of serial port can also be used to switch from data mode to command mode. To use this method, AT&D1 should be set firstly. Pull DTR line to ground for at least 1 second and then pull up, the module will switch from data mode to command mode and OK will be returned which indicates the module is in command mode.
>>>>Не отключать autobauding тоже дурная идея, ибо глючит. На длинных последовательностях передаваемых данных собственно данные искажаются.
Бывает только если скорость обмена находится на грани точности. Например наблюдалось на AVR с кварцем 20 мегагерц. Тогда точность частоты составляет почти 2% что уже не допустимо. При переходе на "модемный кварц" 18.432 мегагерца, рассинхронизация составляет менее 0.5% и ошибок не бывает. Как пример могу привести что у меня при точности 0.5% автоопределение стабильно работает даже на 115200, что уже не есть гарантированым согласно документации. И кроме того сам производитель настоятельно рекомендует работать на фиксированой скорости.
Думаю что стоит один раз продумать алгоритм инициализации - например как раньше в обычных модемах было - с перебором скоростей. Это потом убережет от любых непоняток и гарантировано позволит определять нужную скорость.
--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
|