|
AT-команды, с нуля |
|
|
|
Sep 22 2014, 12:00
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Есть GSM-модуль, основу описания работы с которым составляют AT-команды для общения с МК. Обмен данными выполняется по UART, который настроен на определённую скорость обмена. Тут вопросов нет. Далее читаю мануал и некоторые статьи вроде этой Для меня пока непонятно, что собой представляет к примеру команда AT+CREG? Как будет выглядеть одномерный массив для передачи в UART? Правильно я понимаю, что каждый символ из данной строки нужно перевести в ASCII-коды? Т.е. руководствуясь вот этой таблицей имеем A - 0x41 T - 0x54 "+"- 0x2B C - 0x43 R - 0x52 E - 0x45 G - 0x47 "?" - 0x3F В итоге для отправки команды AT+CREG? по UART микроконтроллер должен отправить строку {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F}. Мои представления правильные или где-то не так думаю?
|
|
|
|
|
Sep 22 2014, 12:35
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Цитата(esaulenka @ Sep 22 2014, 16:08)  Почти правильные. Микроконтроллер должен отправить строчку "AT+CREG?\r\n". Особое внимание - на перевод строки. в тонкости пока не вникаю, хочу понять - команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F}?
Сообщение отредактировал ДЕЙЛ - Sep 22 2014, 12:36
|
|
|
|
|
Sep 22 2014, 13:03
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
т.е. команда AT+CREG? соответствует последовательности {0x41, 0x54, 0x2B, 0x43, 0x52, 0x45, 0x47, 0x3F, 0x0D}? где можно подробнее на эту тему почитать? В мануале сразу начинают с АТ-команд без их представления в HEX
Сообщение отредактировал ДЕЙЛ - Sep 22 2014, 13:05
|
|
|
|
|
Sep 22 2014, 13:36
|

Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 4-11-11
Из: Смоленск
Пользователь №: 68 137

|
Понятия не имею. Мне всегда казалось что это должно быть ясно интуитивно  Можно погуглить что-нибудь по поводу представления строк в памяти ЭВМ.
--------------------
* работаю так, что лошади оборачиваются *
|
|
|
|
|
Sep 23 2014, 06:25
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Цитата(Палыч @ Sep 22 2014, 17:50)  Представлять байты команды в шестнадцатиричном виде никому не приходит в голову, поскольку передача команды модему на языке Си обычно выглядит как-то так:
USART_WriteString("AT+CREG?\r"); Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? В самом начале мне проще сначала с осциллографом своими глазами байты смотреть для уверенности в совпадении своих представлений о работе функции. Иначе можно было бы всё запихать в одну функцию вроде DeviceInit(), Device_Rabota(), Device_Off();
|
|
|
|
|
Sep 23 2014, 07:46
|

Частый гость
 
Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747

|
Цитата Хочется до сути докопаться. Напишу я эту функцию и как потом понять - она не работает или что-то с модемом? И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. Таблицей можете перевести из ASCII в биты. И если подтверждение модемом не выключено, то примите при верной посылке от модема OK.
--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
|
|
|
|
|
Sep 23 2014, 11:20
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Цитата(Mihey_K @ Sep 23 2014, 11:46)  И что вас смущает, функция вроде USART_WriteString() отправит в линию ASCII представление написанных символов, в таком виде вы их и увидите осциллографом. смущает нестандартность функции. Для её использования нужно сначала подключить библиотеку(какую?) и выполнить соответствующие настройки. Простор для появления ошибок тут широкий, хотя появилась мысль прицепить параллельно линии COM-порт компа и смотреть обмен. В какой библиотеке следует искать функцию USART_WriteString()? И как её приспособить к LPC1778?
|
|
|
|
|
Sep 23 2014, 13:37
|

Частый гость
 
Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747

|
По LPC1778 полно информации. Настроить UART можно или силами хидера LPC177x_8x.h, что в CMSIS, по мануалу, или воспользовавшись библиотекой lpc177x_8x_uart.c, что находится в том же архиве CMSIS (папка lpc177x_8x\Drivers\), там же есть примеры по настройке и использованию периферии (lpc177x_8x\Examples). Сам пользовался для отладки через UART функцией printf() через вызов UARTPutChar из debug_frmwrk.c, т.к. там все настроено было из коробки в режиме 115200-8N. Если боитесь ошибиться, разбейте работу на 2 этапа: 1. запустите UART, напишите функцию передачи строки и через мост UART<Virtual COM Port> проверьте, что все работает; 2. запустите управление модемом, и все должно получиться! А USART_WriteString() есть не что иное, как посимвольная передача (функция UART_SendByte() из lpc177x_8x_uart.c) в цикле до тех пор, пока строка не станет равна 0.
Сообщение отредактировал Mihey_K - Sep 23 2014, 13:42
--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|