Вожусь уже который день пытаясь заставить SIM808 хоть как-то передавать по Bluetooth через SPP.
Но блуждания по граблям уже просто достали! Просто не понимаю - где они (SIMCOM) берут настолько безмозглых быдлокодеров???!!
Хочу просто элементарно передать с устройства на комп по Bluetooth поток данных. Ну и принять небольшой поток в обратном направлении.
Вроде казалось: бы чего может быть проще? Это же базовая вещь - должно работать как часы. Ага - как же!
Первый сюрприз был в том, что оказывается режим автоматического приёма (AT+BTSPPGET=0 - дефолтный) работает как звёзды сложатся - данные могут прийти, а могут и потеряться (видимо если в этот момент идёт передача (командой AT+BTSPPSEND) - то не судьба; видимо быдлокодеров из SIMCOM никто не предупредил, что UART - это оказывается полно-дуплексный интерфейс).
Ну ладно - обойдёмся и без автоматического режима. Переписываю всё на мануальный режим. Ну и в нём конечно же уже ожидаемо не работает уведомление о пришедших данных (+BTSPPMAN) видимо всё по той же причине (может прийти, а может не прийти). Ну в этом режиме хоть данные не теряются, а мирно лежат в буфере в SIM808.
Переписываю драйвер на периодический поллинг (командой AT+BTSPPGET=3,...) приёмного буфера SIM808. Что поделать - приходится пользовать то го#%о, что имеется.
Ладно - приём через пень-колоду заработал.
Дальше дело пошло смешнее - передача.
Если просто передать одиночный блок данных AT+BTSPPSEND, то он доходит до терминалки на компе.
Но если попытаться передавать поток данных (за первой AT+BTSPPSEND сразу вторую AT+BTSPPSEND и третью и так далее) начинаются чудеса чудесатые!
Сначала неприятным сюрпризом явилось то, что если вот так слать данные блок за блоком (даже небольшими блоками по 10 байт - без разницы), то на очередной команде после выдачи приглашения к вводу данных "> " и отправки мной этих данных модулю, он тупо зависает. И зависает намертво - пока с ноги RESET ему пендаля не дашь. Зависает - в смысле просто молчит и ничего не отвечает хоть минуту хоть 10. И ни на какие данные более не реагирует (думал - может у меня где-то косяк и какие-то символы не досылаются - переключал провода на переходник USB-UART и вручную с терминалки пытался добить ему данных - без толку).
На прошивке, что была в модуле изначально (1418B02SIM808M32_BT_EAT) зависание случалось обычно уже буквально секунд через 2...5 после начала потока. Перешил на 1418B03SIM808M32_BT_EAT - стал виснуть уже позже - успевал проработать иногда даже полминуты, но один фиг! Что ещё интересно - ещё при этом на новой прошивке и скорость выросла - с максимум ~20КБ/сек до ~29КБ/сек (460800 бод).
Аппаратный flow control включен - без толку за всё время тестов CTS ни разу не шевельнулся (быдлокодеры SIMCOM в курсе, что у них в даташите написано про flow control?).
Да даже без FC в команде AT+BTSPPSEND уже есть свои возможности по управлению потоком (если вдруг вх.буфера не хватает): можно приглашение "> " выдать когда место в буфере освободится, можно "SEND OK" в конце отправки задержать также до момента освобождения буфера. Даже CTS то собственно и не нужен.
Так нет же - лучше просто тупо повиснуть!
Ладно - решил попробовать сразу после AT+BTSPPSEND слать какую-нить другую команду, запрос статуса например AT+BTSTATUS? - может она мозги прочистит модулю? (хотя надо их прочистить тем, кто писал прошивку для него). Так теперь иногда стал на эту команду (AT+BTSTATUS?) получать "SEND OK" Приехали!!!
Т.е. - отправил данные AT+BTSPPSEND, получил в конце "SEND OK", после этого сразу запросил статус AT+BTSTATUS? и опять в ответ - "SEND OK". А вот если сделать паузу между командами, то этого "SEND OK" уже нет. Ну это уже ни в какие ворота не лезет!!! Там похоже внутри не ПО, а какое-то недоразумение.
И это ещё не говоря о том, что иногда модуль ни с того ни с сего вдруг вообще может прислать какой-нить левый символ. Ну т.е. - установлено соединение, приёма/передачи нет, 10 минут нет, 15 нет - и тут вдруг БАЦ!! - из UART вылазит например 0xF1 или ещё какой мусор. Не в команде запроса данных, а просто из UART, когда никакая команда не выполняется.
Если после AT+BTSPPSEND ставить паузы в несколько мсек, то тогда он начинает более-менее устойчиво работать. Даже иногда несколько десятков МБ удавалось передать. Но всё равно в конце концов виснет. 40 минут непрерывной передачи - это был абсолютный рекорд, и ни разу потом его повторить не удалось.
PS: Вобщем - извините за такое повествование. Но просто накипело - уже который день кувыркаюсь с этим говноподелием SIM808. Уже никаких слов кроме нецензурных о нём не осталось.... ((((((((((((((
PSS: Условия мытарств: управление потоком включено AT+IFC=2,2 или выключено - без разницы; скорость по UART фиксирована - AT+IPR=460800 (пробовал и ниже - то же самое); функцинальность пробовал AT+CFUN=4 и AT+CFUN=1 и AT+CFUN=0 (в последнем работает наиболее устойчиво, GSM мне не нужно и симки не будет, только BT+GPS). Вначале тестил на 1418B02SIM808M32_BT_EAT, потом перешил на 1418B03SIM808M32_BT_EAT - стало лучше, но если без пауз после AT+BTSPPSEND работает пару минут - это уже счастье!