ПК разделяет память с внешним микроконтроллером

Я ищу аппаратный интерфейс ПК, который соответствует этим потребностям.

ПК будет постоянно занят выполнением вычислений. Каждый раз, когда есть результат расчета (каждые ~ 1 мс), я хочу, чтобы он делился им с внешним микроконтроллером, который подключен к другому (закрытому) устройству через RS232, устройство будет использовать предопределенный протокол для запроса результата, когда он пожелает сделать это (время не определено).

так-

ПК <-> микроконтроллер <-> блок

Теоретически я мог бы подключить ПК напрямую к блоку через RS232 (мультиплексор, потому что мне нужно около 6 блоков), но я не хотел прерывать ПК слишком большим количеством операций ввода-вывода, я хочу, чтобы он был сосредоточен на вычислениях.

В интерфейсе ПК<->микро я хочу что-то быстрое, поэтому PCI показался мне хорошей идеей - я могу разместить микроконтроллер на карте pci и «разделить» память (отображенную) с ПК для передачи результатов вычислений, и также связаться с блоком.

  1. Есть много карт FPGA на PCI, но я ищу что-то вроде ARM или даже что-то более простое на карте, кто-нибудь знает какой-нибудь хороший продукт для этого?
  2. Является ли PCI хорошей идеей для моей установки? Вы предлагаете что-то еще? Я действительно хочу, чтобы этот интерфейс действовал как общая память.

Спасибо

Элад

FPGA, как правило, имеют двухпортовую память, что хорошо для этой цели, но PCI уже довольно косвенно. Не похоже, чтобы в «микроконтроллере» требовалось много возможностей, поэтому процессор с программным ядром в FPGA должен подойти. Однако я подозреваю, что высокоскоростной последовательный интерфейс и демультиплексор, вероятно, являются лучшим решением.
Какова ваша ожидаемая скорость передачи данных? Я сомневаюсь, что вам действительно нужна общая память. 1 мс достаточно даже для последовательного интерфейса, и вы можете использовать отдельный поток для ввода-вывода. Другим возможным решением является использование Ethernet - это может быть очень быстро, и ПК может просто отправить пакет по UDP, не дожидаясь ответа.

Ответы (2)

Я думаю, что ваше понимание того, какова стоимость ввода-вывода, может быть ошибочным. Я бы поместил MCU на шину USB и использовал пакет шины USB для отправки обновленных данных на микроконтроллер. Вы можете купить готовую плату микроконтроллера шины USB менее чем за 15 долларов. Накладные расходы на передачу по шине USB вряд ли когда-либо отразятся на профиле производительности системы.

Если бы я приближался к большому проекту в этом направлении, я бы рассмотрел PXI, http://en.wikipedia.org/wiki/PCI_eXtensions_for_Instrumentation

По сути, это общая шина PCI с некоторыми расширениями, и эта шина доступна каждому подключенному к ней устройству. http://www.stmopen.net/intellective-pxi-bus-extended-card-design-based-on-arm-microcontroller/ рассказывает о платформе ARM, которая использует эту шину,

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