| Форум РадиоКот https://radiokot.ru/forum/ |
|
| перекодировка данных по UART (из одного в другой) https://radiokot.ru/forum/viewtopic.php?f=62&t=161344 |
Страница 1 из 2 |
| Автор: | PhilX [ Ср мар 06, 2019 23:19:08 ] |
| Заголовок сообщения: | перекодировка данных по UART (из одного в другой) |
есть устройство на микроконтроллере, к которому по UART подключен GSM-модуль, нужно заменить этот модуль на другой с другой системой команд без изменения кода прошивки микроконтроллера (нет исходного кода) путем подключения промежуточного микроконтроллера с двумя UART-ами. Соответственно, нужно написать для него программу перекодировки из одной системы команд в другую из одного порта в другой. Посоветуйте, пожалуйста, как правильно решить эту задачу и, если возможно, поделитесь примером программы желательно для недорогого 8051 или stm32-M0. Заранее благодарю всех откликнувшихся за любые советы и подсказки |
|
| Автор: | Аlex [ Чт мар 07, 2019 00:53:16 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
Если с периферией STM32 совсем тяжко, то берите CubeMX от ST. Настраиваете там 2 УАРТа, в несколько щелчков мышкой, визуально. Затем кодите ручками мост между ними, учитывая протокол обоих. Если и с программированием совсем туго, то задача будет нелёгкой. Сколько не советуй и какими примерами Вас не закидывай. |
|
| Автор: | oleg110592 [ Чт мар 07, 2019 08:05:57 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
поделитесь примером программы желательно для недорогого 8051 или stm32-M0 Для STM32F0 (Cortex m0) есть примеры Example Code snippets: https://www.st.com/en/embedded-software ... etsf0.html там есть: в папке /USART/01_Transmitter/ пример передачи USART в папке /USART/02_Receiver/ пример приема USART в папке /USART/06_CommunicationUsingDMA/ пример приема и передачи USART с помощью DMA весь код с комментариями. В документации (reference manual) примеры хорошо описаны. Части кода из примеров (в основном настройки) работают в реальных проектах. |
|
| Автор: | ARV [ Чт мар 07, 2019 08:36:01 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
а можно узнать, какой GSM-модуль на какой вы собрались заменять? меня волнует тема совместимости разных модулей... |
|
| Автор: | ПростоНуб [ Чт мар 07, 2019 09:28:20 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
В принципе, на STM8L151/152 есть целых три UART, а по цене и потреблению они тут выиграют у STM32. Если потребление не существенно, то STM8S207/208 имеют по два UART и тоже дешевле STM32. |
|
| Автор: | PhilX [ Чт мар 07, 2019 10:03:32 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
а можно узнать, какой GSM-модуль на какой вы собрались заменять? меня волнует тема совместимости разных модулей... модуль какой-то китайский безымянный и немаркированный хочу заменить на WISMO-228, по части совместимости у меня пока нет информации, т.к. я только посмотрел сниффером обмен контроллера с китайским модулем и сравнил с даташитом на wismo-228 -- отличается сильно, поэтому и задался целью как-то это перекодировать, но опыта в этом вопросе нет. Поэтому сначала решил разобраться с возможностью перекодировки данных по UART, а потом буду пробовать разбираться с самими командами китайского модуля. Благодарю всех за советы, из которых я понял, что нужно изучать примеры от stm32f0, с которым я пока не знаком, а есть некоторый опыт работы с 8051, но никто по работе с UART-ом для него ничего не посоветовал (предполагал, что можно взять китайский STC с двумя УАРТ-ами). Правильно ли я понимаю, что нужно два кольцевых буфера (один на прием, второй на передачу) и работать по прерываниям или лучше использовать freeRTOS? |
|
| Автор: | ARV [ Чт мар 07, 2019 10:04:59 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
я наивно полагал, что GSM-стандарт как бы обязателен... вы уверены в существовании проблемы совместимости? |
|
| Автор: | PhilX [ Чт мар 07, 2019 10:48:50 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
я наивно полагал, что GSM-стандарт как бы обязателен... вы уверены в существовании проблемы совместимости? я с GSM-модулями ранее не имел дела и тоже предполагал, что они все одинаково стандартизованы, но первым делом перепаял вместо китайского модуля wismo-228 и устройство перестало работать. Посмотрел сниффером и увидел, что контроллер отправляет посылки в сторону модуля, но тот ему отвечает лишь в одном случае из 100. Перепаял обратно китайский модуль -- с ним работает. Несколько смутило два момента: 1) контроллер шлет некоторые команды, на которые также не отвечает китайский модуль; 2) все команды текстовые, но перед ними и после них присутствует несколько байтов; 3) модуль также отвечает текстовыми командами, но перед ними и после них также какие-то байты. |
|
| Автор: | ARV [ Чт мар 07, 2019 11:50:55 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
и как же вы планируете перекодировать на лету команды-ответы, если половина слов в вашем описании "какие-то"? |
|
| Автор: | PhilX [ Чт мар 07, 2019 12:24:28 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
и как же вы планируете перекодировать на лету команды-ответы, если половина слов в вашем описании "какие-то"? собираюсь через FTDI подключить к компу и попробовать с компа вычислить смысл и назначение этих неизвестных байтов, полагаю, что должен догадаться, но прежде хотел понять возможность реализации моими скромными силами перекодировщика на STC15W4K58S4 или STM32F030 и аналогичных, т.к. если получится, тогда хотелось бы на основе этого сделать себе разветвитель GPS-приемника от моего регистратора на два устройства, чтобы вторым концом подключить к магнитоле, поэтому устройство моего соседа рассматриваю в качестве стартового для первичного изучения работы с UART-ами на конкретной задаче... |
|
| Автор: | ARV [ Чт мар 07, 2019 12:36:27 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
неизвестные байты - это не 0x0D и 0x0A случайно? |
|
| Автор: | PhilX [ Чт мар 07, 2019 21:21:40 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
неизвестные байты - это не 0x0D и 0x0A случайно? нет, вернее эти в конце каждой тестовой строки тоже имеются, но перед каждой текстовой строкой что-то типа 0xAA,0x55,0xFD... и после 0x0D,0x0A тоже пару байтов (вечером заберу у соседа устройство и конкретно посмотрю на своем компе) Добавлено after 8 hours 37 minutes 55 seconds: посмотрю на своем компе) подключил контроллер к компу через FTDI и наблюдаю следующее (все на скорости 38400): 1) из контроллера отправляется 9 байт 0x55,0xA5,0x2E,0x03,0x3F,0x0D,0x0A,0xD3,0xAA и пауза 100мсек; 2) из контроллера отправляется 9 байт 0xAA,0x5A,0xFD,0x03,0x3F,0x0D,0x0A,0x4F,0x55 и пауза 100мсек; 3..6) так повторяется еще 2раза, а потом пауза еще порядка 500мсек; далее все снова повторяется... |
|
| Автор: | Мурик [ Пт мар 08, 2019 13:56:56 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): STM8S207/208 имеют по два UART и тоже дешевле STM32. Сэкономив 10 рублей в ущерб производительности и доступным ресурсам.
|
|
| Автор: | ПростоНуб [ Пт мар 08, 2019 16:45:04 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): STM8S207/208 имеют по два UART и тоже дешевле STM32. Сэкономив 10 рублей в ущерб производительности и доступным ресурсам.Вы из прошлого? Даже при прямой закупке партии в STMicro разница в цене между STM8S207/208 и STM32F103 двукратна или $1. Сейчас это свыше 66 рублей. И ради чего? Чтобы греть воздух? |
|
| Автор: | ARV [ Пт мар 08, 2019 16:49:15 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ну понятно... опять собрались экономисты, теперь тема либо уйдет в мусорку (если я подключусь), либо превратится в разговоры о том, как прекрасны и дешевы STM32. а на топикстартера всем будет наплевать, хотя проблема у него на 100% не в типе микроконтроллера... и модераторы спят или пьют.а если поставить законные минусы за подобные рассуждения - так вони не оберешься. все ж честные и принципиальные... |
|
| Автор: | Мурик [ Пт мар 08, 2019 20:36:01 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): Даже при прямой закупке партии в STMicro разница в цене между STM8S207/208 и STM32F103 двукратна или $1. Цена STM32F103 около 1$ Хотите сказать что покупаете STM8 бесплатно? Чтобы переходировать данные, нужно ОЗУ которого в STM32 больше чем в STM8. Вот и думайте стоит ли экономия 10 рублей дальнейших сложностей при разработке программы. |
|
| Автор: | ПростоНуб [ Пт мар 08, 2019 21:10:14 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): Даже при прямой закупке партии в STMicro разница в цене между STM8S207/208 и STM32F103 двукратна или $1. Цена STM32F103 около 1$ Хотите сказать что покупаете STM8 бесплатно? STM8S207C8 https://www.st.com/content/st_com/en/pr ... 207c8.html Спойлер![]() STM32F103C8 https://www.st.com/content/st_com/en/pr ... 103c8.html Спойлер![]() Ваш ход. Или признаете себя совравшим? P.S. 8Кбайт RAM в разы превышают максимально допустимую длину сообщения GSM модуля, которая никогда не бывает длинее 2Кбайт - у него просто памяти у самого больше нет! На практике же, 0.5Кбайт буфера хватит за глаза для любого применения. |
|
| Автор: | Мурик [ Пт мар 08, 2019 21:32:29 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): Ваш ход. 1.09$ шт. с бесплатной доставкой https://ru.aliexpress.com/item/5PCS-STM ... 21969.htmlВы покупали у ST партию МК состоящую из 10000 шт.? Если нет, то к чему эти таблицы? |
|
| Автор: | ПростоНуб [ Пт мар 08, 2019 21:59:43 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
ПростоНуб писал(а): Ваш ход. 1.09$ шт. с бесплатной доставкой https://ru.aliexpress.com/item/5PCS-STM ... 21969.htmlПо ссылке перемаркированный CS32F103C8T6. Спойлер![]() Вы же писали про STM32, а вовсе не о его китайском клоне, мало пригодном для практического применения ни с точки зрения энергопотребления, ни с точки зрения эксплуатационных температур. Так и пишите в следующий раз, что речь о CS32, Но я бы, скорее, GD32 стал использовать, чем его ) Добавлено after 1 minute 30 seconds: Вы покупали у ST партию МК состоящую из 10000 шт.? Если нет, то к чему эти таблицы? Лично я - нет. Мой работодатель и ряд моих клиентов - да. |
|
| Автор: | PhilX [ Пт мар 08, 2019 23:00:10 ] |
| Заголовок сообщения: | Re: перекодировка данных по UART (из одного в другой) |
проблема у него на 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 и перед отправкой в сторону контроллера "упаковывать" их согласно описанного выше. |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|





