У меня проблема с работой этого модема GSM с FPGA (Spartan 3). Я уже реализовал передачу UART на стороне FPGA, MAX232 для преобразования TTL-> RS232 и сдвиг логического уровня 3,3V-> 5V для взаимодействия FPGA с MAX232.
Я могу видеть сообщения, отправленные FPGA на моем ПК (используя последовательный монитор Arduino) с помощью этого FTDI Breakout . Я также могу общаться с GSM-модемом, используя последовательный монитор Arduino для входа в режим AT-команд и отправки текстовых сообщений.
Однако, когда я отправляю то же сообщение с FPGA на модем, я получаю пустое текстовое облачко на свой телефон. Я дважды проверил настройки скорости передачи данных, структуру строки (включая возврат каретки в конце каждого текстового сообщения) и порядок подключения TX (FPGA) -> RX (GSM).
Я до сих пор не понимаю, почему терминал Arduino может связываться с модемом, но то же самое сообщение, отправленное с FPGA, не передается на мой телефон.
Настройки UART: 115200 бод, 8 бит данных, 1 стоповый бит, без четности, без управления потоком. Передача VHDL UART и компонент генератора тактовой частоты 115200 Гц показаны ниже для справки.
РЕДАКТИРОВАТЬ: Как работает модем:
Модем требует использования AT-команд к нему через SMS или Serial для его настройки. Мне нужно, чтобы просто отправлять текстовые сообщения, поэтому для этого я должен установить скорость передачи данных, которую будет использовать FPGA, т.е. по умолчанию 115200 Гц и режим работы, т.е. SMS. Затем выйдите из режима AT и возобновите прозрачный режим. См. стр. 5 и 7 для описания прозрачного режима и иллюстрации процесса передачи.
Это делается вне FPGA с помощью программного обеспечения, которое поставляется с модемом для запуска на ПК. После того, как параметры настроены, всякий раз, когда модем запускается, он будет запускаться в прозрачном режиме. Поэтому все, что нужно сделать, это отправить текстовое сообщение и завершить его символом возврата каретки, чтобы обозначить конец текста.
Таким образом, модем находится в прозрачном режиме и ожидает данных текстового сообщения, когда он подключен к FPGA. Модем не передает никаких данных на хост (FPGA/последовательный монитор) в прозрачном режиме. Он ищет только данные текстового сообщения в т.е. RX (GSM)
Генератор бод:
clk_115200Hz : process(clk,reset,clock3_tmp)
variable a3: integer range 0 to 217;
begin
if(reset='1') then
a3:=1;
clock3_tmp<='0';
elsif rising_edge(clk) then
a3 :=a3+1;
if (a3 = 217) then
clock3_tmp <= not clock3_tmp;
a3 := 1;
end if;
end if;
clock3 <= clock3_tmp;
end process;
Уарт-передача:
uart_transmit: process (clk,reset)
variable bit_count: integer range 0 to 9:=0;
begin
if(reset='1') then
tx_line<=idle;
bit_count:=0;
TX_DONE<='0';
elsif rising_edge(clk)then
if(enable= '1')then
if(TX_READY = '1')then
if(bit_count=9)then
TX_DONE<='1';
tx_line<=idle;
bit_count:=0;
else
tx_line<=TX_MESSAGE(bit_count);
bit_count:= bit_count+1;
TX_DONE<='0';
end if;
elsif(TX_READY = '0')then
tx_line<=idle;
end if;
end if;
end if;
end process;
На самом деле проблема заключалась в ошибке часов, как указано в комментариях к моему первоначальному вопросу. Была задержка в два такта, когда я тянул линию передачи от низкого уровня к высокому, чтобы сигнализировать о начале, а затем снова от высокого к низкому, чтобы сигнализировать об остановке (от одного из моих других объектов, которые отвечали за переключение сигнала TX_READY) . Покопавшись в руководстве, я обнаружил, что он использует проверку часов, чтобы определить, когда он готов передать данные на телефон, а задержки заставили модем сбросить свой буфер, а затем передать все, что он получил, что из-за задержки было ничем.
Спасибо пользователям Sourabh Tapas и Chris Stratton за помощь в выявлении этих проблем.
Крис Стрэттон
СРР
Сураб Тапас
Крис Стрэттон
Крис Стрэттон
СРР
Крис Стрэттон
Сураб Тапас
СРР
СРР
Крис Стрэттон
Сураб Тапас
Сураб Тапас
СРР
СРР