Un problema mayor puede ser el sistema operativo en la PC. A menos que tenga un búfer significativo en su dispositivo de muestreo, se encontrará con retrasos en la PC que harán que pierda datos.
Obtuve un rendimiento masivo de USB a 480 Mbps entre un micro USB2 y una aplicación para PC Linux escrita en Python. Ni siquiera en C! Utiliza libusb, que recomiendo. libusb le permite iniciar transferencias masivas directamente, sin tener que escribir un controlador. Es bastante simple de usar.
Debes usar DMA de dispersión-recolección. Lo bueno es que ese debería ser el predeterminado. La idea es que pase una lista de buffers vacíos a libusb. Estos se colocan en una lista vinculada que es administrada por el propio hardware USB . Cada vez que su dispositivo envía un paquete, el chip USB dentro de la PC toma un búfer gratuito de la lista y lo llena. Luego, periódicamente dispara una interrupción para que su aplicación pueda recopilar los buffers llenos. Este proceso está totalmente administrado por hardware, funcionará incluso si la CPU está ocupada, cambiando, etc., siempre y cuando le des suficientes buffers libres. La CPU de la PC no se molesta en procesar cada paquete. De hecho, puede pasar buffers grandes (como 64kB) y el hardware USB acumulará paquetes en eso y hará ping a su aplicación cuando el buffer esté listo para su consumo.
Con suficientes búferes, no debería recibir paquetes descartados. No lo hice, y la cosa duró horas mientras compilaba los núcleos de Linux y cualquier otra cosa que pudiera lanzarle. Los chipsets DMA inteligentes son muy inteligentes.
Dado que el micro funciona a 300 MHz, asumo que es una bestia y no tendrá como 1kByte de RAM. Necesitará almacenar el valor de unos pocos cuadros, por lo que un par de decenas de kilobytes estarán bien. Asegúrate de configurar el núcleo USB incorporado con DMA adecuado, fifo o dispersión, independientemente de lo que use tu chip, pero es importante usar el modo más eficiente.
Si elige Ethernet, esto es básicamente lo mismo. Las NIC de PC tienen DMA de dispersión y dispersión, así que simplemente configure el búfer de socket en "yuuuuge" y deje que el hardware haga su trabajo. Puedes usar UDP, no necesitas TCP.
Sin embargo, Ethernet requerirá la construcción de paquetes UDP en su firmware, lo que lleva un poco de tiempo. El hardware USB2 dividirá los datos en paquetes para usted. Pero Ethernet está aislado y permite longitudes de cable mucho más largas, lo que podría ser útil.
También Ethernet no bloqueará una PC. Jugar con USB cuando su dispositivo USB experimental tiene errores puede hacer cosas extrañas a su PC. Los controladores de su sistema operativo solo se han probado en dispositivos USB que funcionan. Por lo tanto, cuando su micro se cuelga entre algunas fases de la transacción USB, en particular la enumeración, o envía datos falsos que hacen que la pila de controladores de repente sienta la necesidad urgente de asignar -1 bytes de memoria, puede esperar que la PC haga "¿WUT?" y tiene que presionar la tecla de Windows (es decir, el botón de reinicio). Utilizo un portátil no deseado sin datos.
Si te preocupa que UDP pierda paquetes ... lo dejé funcionando durante 24 horas, con dos cables de 10 metros de la tienda de dólares y un extensor de la tienda de dólares en el medio, sin paquetes perdidos a 100 Mbps de dúplex completo.
Bueno, eso fue un poco infodump, pero debería funcionar bien. Estaría más preocupado acerca de cómo su micro va a sincronizar la adquisición, no espere disparar una interrupción cada 100 ns ... necesitará hardware y DMA para esto. Si utiliza 4 bits, podría hackear el puerto SPI cuádruple tal vez? O si asigna un puerto DMA a los pines ...
Otra solución sería un micro EZ-USB Cypress FX2LP. Tiene un FIFO de hardware, por lo que si le da un reloj, en cada ciclo tomará 8 bits de sus pines de datos y los enviará a la PC a través de una transferencia masiva USB2. Todo en hardware. Debe escribir sobre una página de código C para el firmware, para saludar a la PC, enumerar y conectar el FIFO de hardware al punto final USB. Sin embargo, obtienes 8 bits en lugar de 4 ... oye, ¡eso es 4 bits gratis!
De todos modos. Siendo realistas, uno de estos debería hacer el trabajo.