проблема у него на 100% не в типе микроконтроллера...
правильно подмечено -- у меня нет задачи массового производства, поэтому с учетом имеющихся у меня в шкафу нескольких разных микроконтроллеров 8051 от STC и парочки stm32f030 и stm32f042, вопрос цены совершенно не актуален для меня. Главное понять, как правильно решить задачу и потом ее решить успешно...
Сутки экспериментов позволили выяснить следующее:
1) похоже, что все-таки система команд разных GSM-модулей как-то стандартизована и обмен команд полностью текстовый;
2) у этого китайского устройства заложен алгоритм работы с двумя модулями через один UART-порт и сначала идет опрос обоих, а после получения ответа далее идет обмен путем инкапсуляции обычных текстовых команд GSM-модулей внутрь бинарных пакетов
Работает в итоге так:
1) сначала контроллер посылает 9 байтов запроса первому модулю 0x55,0xA5,0x2E,0x03,0x3F,0x0D,0x0A,0xD3,0xAA и ждет от него ответ в течение порядка 100мсек, но ответа не приходит, т.к. такого модуля нет;
2) далее контроллер посылает 9 байтов запроса второму модулю 0xAA,0x5A,0xFD,0x03,0x3F,0x0D,0x0A,0x4F,0x55, где
0xAA -- начальный байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают;
0x5A -- тоже начальный байт, но его уже включают в контрольную сумму этой посылки;
0xFD -- тоже начальный байт, который также включается в контрольную сумму;
0x03 -- длина текстовой посылки, вероятно, предназначающийся модулю;
0x3F -- как я понял, команда запроса модуля ("?");
0x0D,0x0A -- завершение текстовой строки;
0x4F -- контрольная сумма байтов 0x5A,0xFD,0x03,0x3F,0x0D,0x0A, но инверсная (xor 0xFF);
0x55 -- завершающий байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают
3) модуль сразу отвечает ему посылкой из 12 байтов 0xAA,0x82,0xFD,0x06,0x4F,0x4B,0x38,0x32,0x0D,0x0A,0x5F,0x55, где
0xAA -- начальный байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают;
0x82 -- тоже начальный байт, но его уже включают в контрольную сумму этой посылки;
0xFD -- тоже начальный байт, который также включается в контрольную сумму;
0x06 -- длина текстовой посылки;
0x4F,0x4B,0x38,0x32 -- как я понял, команда ответа модуля ("OK82");
0x0D,0x0A -- завершение текстовой строки;
0x5F -- контрольная сумма байтов 0x82,0xFD,0x06,0x4F,0x4B,0x38,0x32,0x0D,0x0A, но инверсная (xor 0xFF);
0x55 -- завершающий байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают
4) далее контроллер отправляет команду инициализации из 11 байтов 0xAA,0x5A,0xFD,0x05,0x41,0x54,0x5A,0x0D,0x0A,0x9D,0x55, где
0xAA -- начальный байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают;
0x5A -- тоже начальный байт, но его уже включают в контрольную сумму этой посылки;
0xFD -- тоже начальный байт, который также включается в контрольную сумму;
0x05 -- длина текстовой посылки, вероятно, предназначающийся модулю;
0x41,0x54,0x5A -- как я понял, команда запроса модуля ("ATZ");
0x0D,0x0A -- завершение текстовой строки;
0x9D -- контрольная сумма байтов 0x5A,0xFD,0x05,0x41,0x54,0x5A,0x0D,0x0A, но инверсная (xor 0xFF);
0x55 -- завершающий байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают
5) модуль сразу отвечает ему посылкой из 10 байтов 0xAA,0x82,0xFD,0x04,0x4F,0x4B,0x0D,0x0A,0xCB,0x55, где
0xAA -- начальный байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают;
0x82 -- тоже начальный байт, но его уже включают в контрольную сумму этой посылки;
0xFD -- тоже начальный байт, который также включается в контрольную сумму;
0x04 -- длина текстовой посылки;
0x4F,0x4B -- как я понял, команда ответа модуля ("OK");
0x0D,0x0A -- завершение текстовой строки;
0xCB -- контрольная сумма байтов 0x82,0xFD,0x06,0x4F,0x4B,0x0D,0x0A, но инверсная (xor 0xFF);
0x55 -- завершающий байт, вероятно для синхронизации или чего-то такого, т.к. в контрольную сумму его не включают
и т.д. и внутри этих посылок находятся текстовые команды, соответственно, мне нужно принимать команды от контроллера и вычленять из них только текстовую команду, которую отправлять wismo228 с учетом его специфики, а обратно принимать тестовые команды от wismo228 и перед отправкой в сторону контроллера "упаковывать" их согласно описанного выше.