AT-команды в цикле for

Я пытаюсь выполнить AT-команды из Nordic NRF52. Я использую Nordic Модуль UART со встроенной функцией app_uart_put(uint8_t byte) для передачи AT-команд на UART. Узел, который получает AT-команды, представляет собой EE-NBIoT. модуль и срабатывает по постфиксу \r\n. Когда я запускаю следующий код, я получаю ОК.

while (app_uart_put('A') != NRF_SUCCESS);
while (app_uart_put('T') != NRF_SUCCESS);
while (app_uart_put('+') != NRF_SUCCESS);
while (app_uart_put('C') != NRF_SUCCESS);
while (app_uart_put('F') != NRF_SUCCESS);
while (app_uart_put('U') != NRF_SUCCESS);
while (app_uart_put('N') != NRF_SUCCESS);
while (app_uart_put('=') != NRF_SUCCESS);
while (app_uart_put('1') != NRF_SUCCESS);
while (app_uart_put('\r') != NRF_SUCCESS);
while (app_uart_put('\n') != NRF_SUCCESS);

Но я хочу сделать код более пригодным для повторного использования, поэтому я написал следующую функцию writeCommand.

void writeCommand(char cmd[])
{   
 while (app_uart_put('A') != NRF_SUCCESS);
 while (app_uart_put('T') != NRF_SUCCESS);
 while (app_uart_put('+') != NRF_SUCCESS);

 uint8_t i;
 for(i = 0; cmd[i] != '\0'; i++){
     while (app_uart_put(cmd[i]) != NRF_SUCCESS);
 }

 while (app_uart_put('\r') != NRF_SUCCESS);
 while (app_uart_put('\n') != NRF_SUCCESS);
 nrf_delay_ms(100);
}

Когда я запускаю эту функцию, как показано ниже, я получаю сообщение об ОШИБКЕ.

char cmd[] = "CFUN=1";
nrf_delay_ms(1000);
writeCommand(cmd);

Почему это не работает? Когда я смотрю на исходящие команды, они равны.


person Lars Erik Tiset Skraastad    schedule 05.07.2018    source источник
comment
Какую ошибку вы получаете?   -  person Hearner    schedule 05.07.2018
comment
Выглядит нормально. Можно было бы только изменить uint8_t i; на size_t i.   -  person KamilCuk    schedule 05.07.2018
comment
Верно ли, что первый фрагмент отправляет AT+CFUN=1, а второй — AT+CGATT=1?   -  person mch    schedule 05.07.2018
comment
Модуль EE-NBIoT отвечает ошибкой на AT-команду. Не говорит что не так, а просто не принимает команду   -  person Lars Erik Tiset Skraastad    schedule 05.07.2018
comment
Я предполагаю, что ошибка находится вне контекста, который вы нам предоставляете. Возможно, что-то записывается в uart до того, как вы вызываете writecommand(): вы можете попробовать сначала отправить \r\n перед отправкой своей команды.   -  person Ctx    schedule 05.07.2018
comment
Оба должны отправить CFUN=1, я неправильно написал!   -  person Lars Erik Tiset Skraastad    schedule 05.07.2018
comment
спасибо @Ctx! кажется, что \r\n перед командой, вызвавшей проблему   -  person Lars Erik Tiset Skraastad    schedule 05.07.2018
comment
\r должно быть достаточно после AT-команды. \n не нужен.   -  person SKi    schedule 05.07.2018
comment
Вы слышали о массивах? Используйте один для хранения командной строки!   -  person Eugene Sh.    schedule 05.07.2018


Ответы (1)


Начните с приобретения большого листа бумаги формата А3, найдите красную ручку и напишите 1000 раз.

Я никогда не буду использовать nrf_delay_ms вместо чтения и анализа ответов от модема.

Я никогда не буду использовать nrf_delay_ms вместо чтения и анализа ответов от модема.

Я никогда не буду использовать nrf_delay_ms вместо чтения и анализа ответов от модема.

Я никогда не буду использовать nrf_delay_ms вместо чтения и анализа ответов от модема.

Я никогда не буду использовать nrf_delay_ms вместо чтения и анализа ответов от модема.

...

Я бегло просмотрел AT документация по командам для U-Blox Sara N210, и она кажется приличной, хотя и немного краткой во вступительной части. Я предлагаю сначала прочитать спецификацию V.250, потому что она гораздо более подробная. Итак, написав свои 1000 предложений, прочитайте этот ответ, сначала следуя инструкциям относительно V.250, а затем внедрите что-нибудь по заданная структура кода того, как правильно обрабатывать текст команды/ответа AT-команды.


Конечно, первая часть должна была быть смешной, но я совершенно серьезно отношусь к остальным; у вас есть огромные пробелы в знаниях AT-команд, которые вы должны заполнить. Вы не сможете иметь надежную связь, пока не сделаете это. Это не должно быть очень сложно, но потребует некоторых усилий.

person hlovdal    schedule 05.07.2018