Пакетная скорость DEBUGIN, влияющая на SPI на BASIC Stamp

У меня есть приложение на плате Parallax BASIC Stamp, которое читает текстовые команды и выполняет тестовые примеры на основе команд. Один тестовый пример, который отправляет данные через шину SPI и читает из шины SPI, дает сбой, в зависимости от скорости передачи текста DEBUGIN.

Плата Stamp Board подключена к ПК (четырехъядерный процессор 2+ ГГц) через последовательный порт на скорости 19200 бод.

Когда я использую BASIC Stamp Terminal или Hyper Terminal для отправки команд на Stamp Board, тест проходит. Когда я отправляю те же команды через приложение C#, тест завершается неудачно. Основное отличие заключается в скорости пакетной передачи, с которой текст отправляется на доску для штампов.

Люди отправляют текст медленнее, чем компьютеры (приложение). При использовании Hyper Terminal один символ отправляется со скоростью 19200 бод. Приложение отправляет 8 символов со скоростью 19200 бод без пауз между символами.

Я ищу объяснение того, как оператор DEBUGIN (ввод через последовательный порт) влияет на команды SHIFTIN или SHIFTOUT, или если кто-нибудь знает, как решить эту проблему.

К сожалению, скорость передачи команды DEBUGIN изменить нельзя. Альтернативой является использование пользовательской версии (включая преобразование текста в числа) с использованием команды последовательного порта на более низкой скорости (которая использует дополнительное ценное пространство, которого в моем проекте мало).

Если публикация на StackEchange является неправильным форумом, выполните миграцию и укажите причину переноса.


person Thomas Matthews    schedule 23.02.2011    source источник


Ответы (1)


Похоже, что конец микроконтроллера не настроен для хорошего обслуживания как UART, так и периферийных устройств SPI, и поэтому слишком быстрое поступление последующих символов на UART либо приводит к тому, что SPI не обслуживается, либо, возможно, вызывает некоторые символы в UART будут пропущены.

Надежное решение состоит в том, чтобы понять проблему и исправить ее в архитектуре кода микроконтроллера. Например, вам может понадобиться использовать прерывания и заставить процедуры обслуживания прерываний перемещать символы между более длинными fifo, управляемыми программным обеспечением, и зачастую 1- или 2-глубоким fifo в периферийном оборудовании.

Возможно, работающее, но более рискованное решение состоит в том, чтобы ваше приложение C# вставляло задержки между отправляемыми им символами, чтобы воспользоваться преимуществами очевидной работы быстрого набора текста. Разновидностью этой темы является наличие встроенных эхо-символов устройства и программа C#, ожидающая эхо-сигнала каждого символа перед отправкой следующего (вам также понадобится escape-символ, чтобы очистить встроенный командный буфер и начать заново, если программа C# решает объявить время ожидания встроенного устройства истекшим и начать заново)

Другая идея состоит в том, чтобы сократить данные, которые должны быть отправлены. Удобочитаемые командные языки для встроенных систем — это здорово, потому что, как вы уже заметили, с ними можно играть, используя терминальное приложение. Однако если встроенная система чрезвычайно ограничена, использование упакованного двоичного или шестнадцатеричного формата может упростить анализ. Крайняя односимвольная команда с паузами между их выполнением является простейшим случаем этого (и если вы в основном используете буквенно-цифровые символы, вы снова можете использовать программу терминала)

person Chris Stratton    schedule 24.02.2011
comment
К сожалению, низкоуровневый код является частью интерпретатора Parallax BASIC, поэтому у меня нет контроля над драйверами (и доступа к ним тоже). Я пробовал 1-секундную задержку после отправки символов (с ПК) без каких-либо последствий. Следующим обходным решением является чтение Stamp Board только с шины SPI и отправка отчета на ПК. - person Thomas Matthews; 25.02.2011