PC comparte memoria con microcontrolador externo

Estoy buscando una interfaz de hardware de PC que coincida con estas necesidades.

La PC estará constantemente ocupada realizando cálculos. Cada vez que hay un resultado de cálculo (cada ~1 ms) quiero que lo comparta con un microcontrolador externo que está conectado a otra unidad (cerrada) a través de RS232, la unidad utilizará un protocolo predefinido para solicitar el resultado cuando lo desee para hacerlo (tiempos indeterminados).

entonces-

PC <-> microcontrolador <-> unidad

En teoría, podría conectar la PC directamente a la unidad a través de RS232 (mux, porque necesito alrededor de 6 unidades), pero no quería interrumpir la PC con demasiadas E/S, quiero que se concentre en los cálculos.

En la PC <-> micro interfaz, quiero algo rápido, por lo que PCI parecía una buena idea: puedo hacer que el microcontrolador se asiente en una tarjeta pci y 'compartir' memoria (asignada) con la PC para transferir el resultado de los cálculos, y también comunicarse con la unidad.

  1. Hay muchas tarjetas FPGA en PCI por ahí, pero estoy buscando algo como ARM o incluso algo más simple en la tarjeta, ¿alguien conoce algún buen producto para eso?
  2. ¿Es la PCI una buena idea para mi configuración? ¿Sugieres algo más? Realmente quiero que esta interfaz actúe como una memoria compartida.

Gracias

Elad

Los FPGA tienden a tener memoria de doble puerto, lo cual es bueno para este propósito, pero PCI ya es bastante indirecto. No parece que se necesite mucha capacidad en el "microcontrolador", por lo que un procesador de núcleo blando en el FPGA debería estar bien. Sin embargo, sospecho que una interfaz serial de alta velocidad y un demultiplexor es probablemente una mejor solución.
¿Cuál es su velocidad de datos esperada? Dudo que realmente necesites memoria compartida. 1 ms es mucho tiempo incluso para la serie, y podría usar un subproceso separado para E/S. Otra posible solución es usar Ethernet: puede ser muy rápido y la PC puede simplemente disparar el paquete a través de UDP y no esperar la respuesta.

Respuestas (2)

Creo que su comprensión de cuál es el costo de E/S podría ser errónea. Pondría la MCU en el bus USB y usaría un paquete de bus USB para enviar los datos actualizados al microcontrolador. Puede comprar una placa de microcontrolador de bus USB lista para usar por menos de $15. Es poco probable que la sobrecarga de la transferencia del bus USB aparezca en un perfil del rendimiento del sistema.

Si estuviera abordando un gran proyecto en esta dirección, consideraría PXI, http://en.wikipedia.org/wiki/PCI_eXtensions_for_Instrumentation

Esencialmente, este es un bus PCI compartido con algunas extensiones, y cada dispositivo que conecte puede acceder al bus. http://www.stmopen.net/intellective-pxi-bus-extended-card-design-based-on-arm-microcontroller/ habla sobre una plataforma ARM que usa ese bus,

Por supuesto, si no necesita esta funcionalidad extendida, debería considerar la opción USB. Para un protocolo que no es en tiempo real, la gente seguramente hace algunas cosas interesantes que no puedo diferenciar del tiempo real.