Наблюдается странное поведение, когда обмен между SIM900 и микроконтроллером встает. В процессе разбирательств сделали такой трюк, с помощью диодов и одного pull-uр резистора объединили RX и TX по И и вывели на RX-овый вход USB-UART мостика (CP2103). И тоге имеем в гипертерминале протокол обмена модуля и контроллера. Поскольку в основном обмен полудуплексный то все достаточно наглядно. Этим методом изучали, где затыкается.
Так вот, обнаружили что: 1) Затыкается не в определенном конкретно месте, а блуждает по разным командам. 2) С очень высокой вероятностью на сбойной команде видно мусор в терминале, что говорит об одновременной активности RX и TX. Но иногда мусора нет. 3) Остановка обмена выглядит так, мы туда что-то послали (например, AT+CPIN=0000), а в ответ тишина, ну то есть вообще ничего, ни OK, ни ERROR.
Из фактов пока все.
Пока что решили увеличить задержки между командами. И теперь все работает вроде, хотя и медленно.
Но ведь раньше их тоже не то чтобы слали без разбору. Ждали OK или таймаут. А оно все равно умирает. Ну была гипотеза, что нельзя до прихода OK начинать слать следующую команду, и при неправильном таймауте оно может не дожидаться ОК, и слать следующую команду. Но тогда странно другое: 1) Ну и что такого, что команда идет до OK, она же в буфер идет? И будет обработана второй. 2) Мы видели зависание команд, которые в логе вполне чистые, то есть нет наложений на предыдущий ОК. 3) Допустим, что при приеме команды и до выдачи ОК модуль вообще RX выключает. Допустим, что он пропустит начало следующей команды и примет только конец, тогда он должен выдать ERROR. Но вот ERROR мы никогда не видели от него. Получается, что мы как-бы вообще всю команду послали в закрытый RX ему. Странно.
Да, эхо у нас выключено, и падать начинает сильно после его выключения.
|