Un programa para leer datos desde un puerto com. Analizadores de puertos (COM, LPT y USB). Monitoree múltiples puertos dentro de una sesión

Cuando hablamos del bus PCI Express (PCI-E), quizás lo primero que lo diferencia de otras soluciones similares sea su eficiencia. Gracias a este moderno bus, el rendimiento de la computadora aumenta y la calidad de los gráficos mejora.

Durante muchos años, el bus PCI (Peripheral Component Interconnect) se utilizó para conectar la tarjeta de video a la placa base, además, también se usó para conectar algunos otros dispositivos, como tarjetas de red y de sonido.

Así es como se ven estas tragamonedas:

PCI-Express fue efectivamente la próxima generación del bus PCI y ofreció funcionalidad y rendimiento mejorados. Utiliza una conexión en serie en la que hay varias líneas, cada una de las cuales conduce a un dispositivo correspondiente, es decir. Cada dispositivo periférico tiene su propia línea, lo que aumenta el rendimiento general de la computadora.

PCI-Express admite conexión "en caliente", consume menos energía que sus predecesores y controla la integridad de los datos transmitidos. Además, es compatible con controladores de bus PCI. Otra característica destacable de este bus es su escalabilidad, es decir. La tarjeta pci express se conecta y funciona en cualquier ranura de ancho de banda similar o mayor. Con toda probabilidad, esta característica garantizará su uso en los próximos años.

El tipo de ranura PCI tradicional era lo suficientemente bueno para funciones básicas de audio/vídeo. Con el bus AGP, el esquema de trabajo con datos multimedia ha mejorado y, en consecuencia, la calidad de los datos de audio/vídeo ha aumentado. No pasó mucho tiempo antes de que los avances en la microarquitectura de procesadores comenzaran a demostrar aún más claramente la lentitud del bus PCI, lo que hacía que los modelos de computadora más rápidos y nuevos de esa época apenas se arrastraran.

Características y ancho de banda del bus PCI-E

Puede tener desde una línea de conexión bidireccional x1, hasta x32 (32 líneas). La línea opera punto a punto. Las versiones modernas proporcionan un ancho de banda mucho mayor en comparación con sus predecesoras. x16 se puede usar para conectar una tarjeta de video y x1 y x2 se pueden usar para conectar tarjetas normales.

Así es como se ven las ranuras x1 y pci express x16:

PCI-E
Número de líneas x1 x2 x4 x8 x16 x32
Ancho de banda 500 MB/s 1000 MB/s 2000 MB/s 4000 MB/s 8000 MB/s 16000 MB/s

Versiones y compatibilidad de PCI-E

Cuando se trata de computadoras, cualquier mención de versiones se asocia con problemas de compatibilidad. Y, como cualquier otra tecnología moderna, PCI-E está en constante evolución y modernización. La última versión disponible es pci express 3.0, pero ya está en marcha el desarrollo de la versión 4.0 del bus PCI-E, que debería aparecer alrededor de 2015 (pci express 2.0 está casi desactualizado).
Eche un vistazo a la siguiente tabla de compatibilidad PCI-E.
Versiones PCI-E 3.0 2.0 1.1
Ancho de banda total
(X16) 32 GB/s 16 GB/s 8 GB/s
Velocidad de transferencia de datos 8,0 GT/s 5,0 GT/s 2,5 GT/s

La versión PCI-E no afecta la funcionalidad de la tarjeta. La característica más distintiva de esta interfaz es su compatibilidad con versiones anteriores y anteriores, lo que la hace segura y capaz de sincronizarse con muchas variantes de tarjetas, independientemente de la versión de la interfaz. Es decir, puedes insertar una tarjeta de segunda o tercera versión en una ranura PCI-Express de la primera versión y funcionará, aunque con cierta pérdida de rendimiento. De la misma forma, puedes instalar una tarjeta PCI-Express de la primera versión en la ranura PCI-E de la tercera versión. Actualmente, todos los modelos modernos de tarjetas de video de NVIDIA y AMD son compatibles con este bus.

Y esto para merendar:

  1. ¡Hola! Explique la diferencia de rendimiento entre la interfaz PCI Express 3.0 x16 y PCI Express 2.0 x16. Hoy en día todavía quedan a la venta placas base con interfaz PCI Express 2.0 x16. estoy con Perderé mucho rendimiento de video si instalo una nueva tarjeta de video de interfazPCI Express 3.0 en una computadora con una placa base con solo un conector¿PCI-E 2.0? Creo que voy a perder, porque el totaltasa de baudios para PCI Express 2.0 es: 16 GB/s y totalPCI Express 3.0 tiene el doble de velocidad de transferencia de datos. 32 GB/s.
  2. ¡Hola! Tengo una computadora con un procesador Intel Core i7 2700K potente, pero ya no nuevo, y una placa base con conector PCI Express 2.0. Dígame, si compro una nueva tarjeta de video PCI Express 3.0, esta tarjeta de video funcionará el doble de lento que si tuviera una placa base con conector. ¿PCI-Express 3.0? ¿Entonces es hora de que cambie mi computadora?
  3. Por favor responda esta pregunta. Mi placa base tiene dos conectores: PCI Express 3.0 y PCI Express 2.0, pero en el conector Nueva tarjeta de video PCI Express 3.0 PCI-Express 3.0 no encaja, el radiador del puente sur está en el camino. Si instalo una tarjeta de videoPCI-E 3.0 en ranura PCI-E 2.0, entonces mi tarjeta de video funcionará peor que si estuviera instalada en una ranura PCI Express 3.0.
  4. Hola, quiero comprarle a un amigo una placa base ligeramente usada por dos mil rublos. Hace tres años lo compró por 7.000 rublos, pero lo que me confunde es que tiene una ranura para una tarjeta de video de interfaz. PCI-E 2.0 y tengo una tarjeta de videoPCI-E 3.0. ¿Mi tarjeta gráfica funcionará a plena capacidad en esta placa base o no?

¡Hola amigos! Hoy a la venta puedes encontrar placas base con conector para instalar tarjetas de video PCI Express 2.0 x16, y PCI Express 3.0x16. Lo mismo puede decirse de los adaptadores gráficos; hay a la venta tarjetas de video con interfaz; PCI-E 3.0, así como PCI-E 2.0. Si observa las características oficiales de las interfaces PCI Express 3.0 x16 y PCI Express 2.0 x16, descubrirá que la velocidad total de transferencia de datos de PCI Express 2.0 es- 16 GB/s, y PCI Express 3.0 es dos veces más grande -32 GB/s. No profundizaré en los detalles de cómo funcionan estas interfaces y simplemente les diré que existe una gran diferencia enLa velocidad de transferencia de datos es visible sólo en teoría, pero en la práctica es muy pequeña.Si lee artículos sobre este tema en Internet, entoncesLlegará a la conclusión de que las tarjetas de video con interfaz PCI Express 3.0 modernas funcionan a la misma velocidad en las ranuras PCI Express 3.0 x16 y PCI Express 2.0 x16 y diferencia en rendimientoentre PCI-E 3.0 x16 y PCI-E 2.0 x16 hay solo una pérdida del 1-2% en el rendimiento de la tarjeta de video. Es decir, no importa en qué ranura instales la tarjeta de video, PCI-E 3.0 o PCI-E 2.0, todo funcionará igual.

Pero desafortunadamente, todos estos artículos fueron escritos en 2013 y 2014 y en ese momento no había juegos como Far Cry Primal, Battlefield 1 y otros productos nuevos que aparecieron en 2016. También lanzado en 2016. familia de procesadores gráficos NVIDIA serie 10, por ejemplo tarjetas de video GeForce GTX 1050 y GeForce GTX 1050 Ti e incluso GTX 1060. Mis experimentos con nuevos juegos y nuevas tarjetas de video mostraron que la interfaz PCI-E 3.0 tiene una ventaja sobrePCI-E 2.0 ya no es del 1-2%, pero en promedio 6-7%. Lo interesante es si la tarjeta de video es de una clase inferior a la GeForce GTX 1050 , entonces el porcentaje es menor (2-3%) , y si por el contrario, entonces más - 9-13%.

Entonces, en mi experimento usé una tarjeta de video. Interfaz GeForce GTX 1050 PCI-E 3.0 y placa base con conectores PCI Express 3.0 x16 y PCI Express 2.0 x16.

norte La configuración de gráficos en los juegos es máxima en todas partes.

  1. Juego FAR CRY PRIMAL. Interfaz PCI-E 3.0 mostró una ventaja sobre PCI-E 2.0, desde siempre mayor en 4-5 fotogramas, que es aproximadamente el porcentaje 4 % %.
  2. Juego del campo de batalla 1. La brecha entre PCI-E 3.0 y PCI-E 2.0 fue 8-10 fotogramas , que en términos porcentuales es aproximadamente el 9%.
  3. El ascenso del Tomb Raider. Ventaja de PCI-E 3.0 promedios 9- 10 fps o 9%.
  4. El brujo. La ventaja de PCI-E 3.0 fue del 3%.
  5. Grand Theft Auto V. La ventaja de PCI-E 3.0 es de 5 fps o 5%.

Es decir, todavía existe una diferencia en el rendimiento entre las interfaces PCI-E 3.0 x16 y PCI-E 2.0 x16 y no está a favor. PCI-E 2.0. Por lo tanto, no compraría una placa base con una ranura PCI-E 2.0 en este momento.

Uno de mis amigos compró una placa base usada por tres mil rublos. Sí, alguna vez fue elegante y costó unos diez mil rublos, tiene muchos conectores. SATA III y USB 3.0, también 8 ranuras para RAM, admite tecnología RAID y otras, pero está construido sobre un chipset obsoleto y la ranura para tarjeta de video es PCI Express 2.0. En mi opinión sería mejor comprar. ¿Por qué?

Es muy posible que en uno o dos años las últimas tarjetas de vídeo solo funcionen en el conector. PCI-Express 3.0 x16 , y tu placa base tendrá un conector obsoleto que ya no utilizan los fabricantes PCI-Express 2.0 x16 . Compra una nueva tarjeta de video, pero se negará a funcionar en el conector anterior. Personalmente, ya me he encontrado muchas veces con que la tarjeta de video PCI-E 3.0 no se ejecutó en la placa base. placa con conector PCI-E 2.0 y Incluso actualizar el BIOS de la placa base no ayudó.También me ocupé de tarjetas de video.PCI-E 2.0 x16, que se negó a funcionar en placas base más antiguas con la interfaz PCI-E 1,0x16, aunque en todas partes escriben sobre compatibilidad con versiones anteriores.Casos en los que una tarjeta de video PCI Express 3.0 x16 no se inició en placas base conPCI Express 1.0 x16, aún más.

Bueno, no te olvides del aspecto de la interfaz este año. PCI-Express 4.0. En este caso, PCI Express 3.0 quedará obsoleto.

Si pregunta qué interfaz se debe utilizar para una unidad de estado sólido que admita el protocolo NVMe, cualquier persona (que siquiera sepa qué es NVMe) responderá: ¡por supuesto, PCIe 3.0 x4! Es cierto que lo más probable es que tenga dificultades para justificarse. En el mejor de los casos, obtendremos la respuesta de que dichas unidades son compatibles con PCIe 3.0 x4 y que el ancho de banda de la interfaz es importante. Lo es, pero todo lo que se habló al respecto comenzó solo cuando algunas unidades en algunas operaciones quedaron abarrotadas dentro del marco del SATA "normal". Pero entre sus 600 MB/s y los (igualmente teóricos) 4 GB/s de la interfaz PCIe 3.0 x4 hay simplemente un abismo lleno de un montón de opciones. ¿Qué pasa si una línea PCIe 3.0 es suficiente, ya que ya es una vez y media más grande que SATA600? Añadiendo más leña al fuego están los fabricantes de controladores que amenazan con cambiar a PCIe 3.0 x2 en productos económicos, así como el hecho de que muchos usuarios no tienen tal o cual cosa. Más precisamente, en teoría los hay, pero solo se pueden liberar reconfigurando el sistema o incluso cambiando algo en él que no desea hacer. Pero quiero comprar una unidad de estado sólido de alta gama, pero me temo que no obtendré ningún beneficio de esto (ni siquiera la satisfacción moral de los resultados de las pruebas de utilidad).

¿Pero es esto cierto o no? En otras palabras, ¿es realmente necesario centrarse exclusivamente en el modo de funcionamiento compatible o todavía es posible en la práctica? renunciar a los principios? Esto es exactamente lo que decidimos comprobar hoy. Dejemos que la verificación sea rápida y no pretenda ser exhaustiva, pero la información recibida debería ser suficiente (como nos parece) al menos para pensar en ello... Por ahora, conozcamos brevemente la teoría.

PCI Express: estándares existentes y su ancho de banda

Comencemos con qué es PCIe y a qué velocidad funciona esta interfaz. A menudo se le llama “bus”, lo cual es algo ideológicamente incorrecto: como tal, no existe un bus al que estén conectados todos los dispositivos. En realidad, hay un conjunto de conexiones punto a punto (similares a muchas otras interfaces serie) con un controlador en el medio y dispositivos conectados a él (cada uno de los cuales podría ser un concentrador de siguiente nivel).

La primera versión de PCI Express apareció hace casi 15 años. El enfoque en el uso dentro de una computadora (a menudo dentro de la misma placa) hizo posible realizar la alta velocidad estándar: 2,5 gigatransacciones por segundo. Debido a que la interfaz es serial y full-duplex, un solo carril PCIe (x1; efectivamente una unidad atómica) proporciona velocidades de transferencia de datos de hasta 5 Gbps. Sin embargo, en cada dirección es sólo la mitad de esto, es decir, 2,5 Gbps, y esta es la velocidad máxima de la interfaz, no la "útil": para mejorar la confiabilidad, cada byte está codificado con 10 bits, por lo que el rendimiento teórico de una línea PCIe 1.x es de aproximadamente 250 MB/s en cada sentido. En la práctica, todavía es necesario transferir información del servicio y, al final, es más correcto hablar de ≈200 MB/s de transferencia de datos del usuario. Lo cual, sin embargo, en aquel momento no sólo cubría las necesidades de la mayoría de los dispositivos, sino que también proporcionaba una reserva sólida: basta recordar que el predecesor del PCIe en el segmento de interfaces de sistemas masivos, concretamente el bus PCI, proporcionaba un rendimiento de 133 MB/ s. E incluso si consideramos no solo la implementación masiva, sino también todas las opciones PCI, el máximo fue 533 MB/s, y para todo el bus, es decir, dicho PS se dividió en todos los dispositivos conectados a él. En este caso, 250 MB/s (ya que en PCI también se suele indicar el rendimiento total y no el útil) por línea, de uso exclusivo. Y para los dispositivos que necesitan más, inicialmente fue posible agregar varias líneas en una sola interfaz, en potencias de dos, de 2 a 32, es decir, la opción x32 prevista por el estándar podía transferir hasta 8 GB/s en cada dirección. En las computadoras personales no se utilizó x32 debido a la complejidad de crear y cablear los controladores y dispositivos correspondientes, por lo que el máximo era la opción con 16 líneas. Se utilizaba (y se sigue utilizando) principalmente en tarjetas de vídeo, ya que la mayoría de los dispositivos no requieren tanto. En general, para un número considerable de ellos, una línea es suficiente, pero algunos utilizan con éxito tanto x4 como x8: solo en el tema del almacenamiento: controladores RAID o SSD.

El tiempo no se detuvo y hace unos 10 años apareció la segunda versión de PCIe. Las mejoras no se referían sólo a la velocidad, sino que también se dio un paso adelante en este sentido: la interfaz comenzó a proporcionar 5 gigatransacciones por segundo manteniendo el mismo esquema de codificación, es decir, el rendimiento se duplicó. Y se duplicó de nuevo en 2010: PCIe 3.0 proporciona 8 (en lugar de 10) gigatransacciones por segundo, pero la redundancia se ha reducido: ahora se utilizan 130 bits para codificar 128, no 160 como antes. En principio, la versión PCIe 4.0 con otra duplicación de velocidades ya está lista para aparecer en el papel, pero es poco probable que la veamos en hardware en un futuro próximo. De hecho, PCIe 3.0 todavía se usa en muchas plataformas junto con PCIe 2.0, porque el rendimiento de este último simplemente... no es necesario para muchas aplicaciones. Y cuando sea necesario, funciona el viejo método de agregación de líneas. Solo que cada uno de ellos se ha vuelto cuatro veces más rápido en los últimos años, es decir, PCIe 3.0 x4 es PCIe 1.0 x16, la ranura más rápida en las computadoras de mediados de la década de 2000. Esta opción es compatible con los controladores SSD de gama alta y se recomienda utilizarla. Está claro que si existe esa oportunidad, mucho no es poco. ¿Y si ella no existe? ¿Habrá algún problema y, de ser así, cuáles son? Ésta es la cuestión con la que tenemos que abordar.

Metodología de prueba

No es difícil realizar pruebas con diferentes versiones del estándar PCIe: casi todos los controladores permiten utilizar no solo el que admiten, sino también todos los anteriores. Es más difícil con la cantidad de carriles: queríamos probar directamente opciones con uno o dos carriles PCIe. La placa Asus H97-Pro Gamer que utilizamos habitualmente en el chipset Intel H97 no soporta el conjunto completo, pero además de la ranura de “procesador” x16 (que se suele utilizar), tiene otra que funciona en PCIe 2.0 x2 o Modos x4. Usamos este trío y le agregamos el modo de ranura de “procesador” PCIe 2.0 para evaluar si había alguna diferencia. Aún así, en este caso, no hay "intermediarios" extraños entre el procesador y el SSD, pero cuando se trabaja con una ranura de "chipset", sí: el propio chipset, que en realidad está conectado al procesador mediante el mismo PCIe 2.0 x4 . Era posible agregar varios modos operativos más, pero aún así íbamos a realizar la parte principal del estudio en otro sistema.

El hecho es que decidimos aprovechar esta oportunidad y al mismo tiempo comprobar una "leyenda urbana", es decir, la creencia sobre la utilidad de utilizar procesadores de primera calidad para probar las unidades. Así que tomamos el Core i7-5960X de ocho núcleos, un pariente del Core i3-4170 que se usa habitualmente en las pruebas (estos son Haswell y Haswell-E), pero que tiene cuatro veces más núcleos. Además, la placa Asus Sabertooth X99 que se encuentra en los contenedores nos resulta útil hoy en día debido a la presencia de una ranura PCIe x4, que de hecho puede funcionar como x1 o x2. En este sistema probamos tres opciones x4 (PCIe 1.0/2.0/3.0) del procesador y chipset PCIe 1.0 x1, PCIe 1.0 x2, PCIe 2.0 x1 y PCIe 2.0 x2 (en todos los casos, las configuraciones del chipset están marcadas en los diagramas con (do)). ¿Tiene sentido recurrir ahora a la primera versión de PCIe, dado que apenas existe una placa que admita únicamente esta versión del estándar y pueda arrancar desde un dispositivo NVMe? Desde un punto de vista práctico, no, pero nos será útil comprobar la relación a priori supuesta de PCIe 1.1 x4 = PCIe 2.0 x2 y similares. Si la prueba muestra que la escalabilidad del bus corresponde a la teoría, entonces no importa que todavía no hayamos podido obtener formas prácticamente significativas de conectar PCIe 3.0 x1/x2: la primera será idéntica a PCIe 1.1 x4 o PCIe 2.0. x2, y el segundo será idéntico a PCIe 2.0 x4. Y los tenemos.

En términos de software, nos limitamos únicamente a Anvil's Storage Utilities 1.1.0: mide bastante bien una variedad de características de bajo nivel de las unidades y no necesitamos nada más. Al contrario: cualquier influencia de otros componentes del sistema es extremadamente indeseable, por lo que los sintéticos de bajo nivel no tienen otra alternativa para nuestros propósitos.

Usamos un Patriot Hellfire de 240 GB como “fluido de trabajo”. Como se demostró durante las pruebas, este no es un poseedor de un récord de rendimiento, pero sus características de velocidad son bastante consistentes con los resultados de los mejores SSD de la misma clase y la misma capacidad. Sí, y ya hay dispositivos más lentos en el mercado, y cada vez habrá más. En principio, sería posible repetir las pruebas con algo más rápido, pero, en nuestra opinión, no es necesario: los resultados son predecibles. Pero no nos adelantemos, veamos qué tenemos.

Resultados de la prueba

Al probar Hellfire, notamos que la velocidad máxima para operaciones secuenciales se puede "exprimir" solo con una carga de subprocesos múltiples, por lo que esto también debe tenerse en cuenta para el futuro: el rendimiento teórico es solo teórico, porque los datos "reales" recibidos en diferentes programas bajo diferentes escenarios ya no dependerán de ellos, sino de estos mismos programas y escenarios - en el caso, por supuesto, cuando circunstancias de fuerza mayor no interfieran :) Estas son exactamente las circunstancias en las que estamos ahora observando: ya se ha dicho arriba que PCIe 1.x x1 es ≈200 MB/s, y eso es exactamente lo que vemos. Dos carriles PCIe 1.x o un carril PCIe 2.0 son dos veces más rápidos, y eso es exactamente lo que estamos viendo. Cuatro carriles PCIe 1.x, dos PCIe 2.0 o un PCIe 3.0 son incluso el doble de rápidos, lo que se confirmó para las dos primeras opciones, por lo que es poco probable que la tercera sea diferente. Es decir, en principio, la escalabilidad, como se esperaba, es ideal: las operaciones son lineales, flash las maneja bien, por lo que la interfaz es importante. El flash se detiene hacer frente bien a PCIe 2.0 x4 para grabar (lo que significa que PCIe 3.0 x2 también es adecuado). La lectura "puede" ser más, pero el último paso ya da un aumento de un año y medio, y no del doble (como debería ser potencialmente). También observamos que no hay una diferencia notable entre el chipset y los controladores del procesador, ni tampoco entre plataformas. Sin embargo, LGA2011-3 está un poco por delante, aunque sólo ligeramente.

Todo es suave y hermoso. Pero no rompe plantillas: el máximo en estas pruebas es sólo un poco más de 500 MB/s, e incluso SATA600 o (en las pruebas actuales) PCIe 1.0 x4 / PCIe 2.0 x2 / PCIe 3.0 x1. Así es: no se alarme por el lanzamiento de controladores económicos para PCIe x2 o la presencia de un número limitado de líneas (y la versión 2.0 del estándar) en las ranuras M.2 de algunas placas cuando no se necesitan más. A veces no se necesita tanto: los resultados máximos se lograron con una cola de 16 comandos, lo que no es típico del software producido en masa. Más a menudo hay una cola con 1-4 comandos, y para esto puede arreglárselas con una línea del primer PCIe e incluso del primer SATA. Sin embargo, hay gastos generales y otras cosas, por lo que una interfaz rápida es útil. Sin embargo, ser demasiado rápido quizás no sea perjudicial.

Además, en esta prueba las plataformas se comportan de manera diferente y, con una única cola de comandos, de manera fundamentalmente diferente. El "problema" no es que muchos núcleos sean malos. De todos modos, no se utilizan aquí, excepto quizás uno, y no tanto como para que el modo de impulso esté completamente implementado. Entonces tenemos una diferencia de aproximadamente el 20% en la frecuencia de los núcleos y una vez y media en la memoria caché: en Haswell-E funciona a una frecuencia más baja y no sincrónicamente con los núcleos. En general, una plataforma de gama alta solo puede ser útil para eliminar el máximo de "Yops" a través del modo más multiproceso con una gran profundidad de cola de comandos. La única lástima es que desde el punto de vista del trabajo práctico, se trata de sintéticos completamente esféricos en el vacío :)

Según la grabación, la situación no ha cambiado fundamentalmente, en todos los sentidos. Pero lo curioso es que en ambos sistemas el modo PCIe 2.0 x4 en la ranura del "procesador" resultó ser el más rápido. ¡En ambos! Y con múltiples controles/recontroles. En este punto no puedes evitar pensar si necesitas estos son tus nuevos estándares¿O es mejor no apresurarse a ninguna parte...?

Cuando se trabaja con bloques de diferentes tamaños, el idilio teórico se rompe por el hecho de que aumentar la velocidad de la interfaz todavía tiene sentido. Las cifras resultantes son tales que un par de líneas PCIe 2.0 serían suficientes, pero en realidad en este caso el rendimiento es inferior al de PCIe 3.0 x4, aunque no varias veces. Y, en general, aquí la plataforma presupuestaria "obstruye" mucho más a la superior. Pero es precisamente este tipo de operación la que se encuentra principalmente en el software de aplicación, es decir, este diagrama es el más cercano a la realidad. Como resultado, no sorprende que las interfaces gruesas y los protocolos modernos no proporcionen ningún efecto sorpresa. Más precisamente, se dará el cambio de mecánica, pero exactamente lo mismo que le proporcionará cualquier unidad de estado sólido con cualquier interfaz.

Total

Para que sea más fácil percibir la imagen del hospital en su conjunto, utilizamos la puntuación dada por el programa (total - para lectura y escritura), normalizándola según el modo “chipset” PCIe 2.0 x4: por el momento es el más disponible, ya que se encuentra incluso en plataformas LGA1155 o AMD sin necesidad de “ofender” la tarjeta de video. Además, es equivalente a PCIe 3.0 x2, que los controladores económicos se están preparando para dominar. Y en la nueva plataforma AMD AM4, nuevamente, este es precisamente el modo que se puede obtener sin afectar la tarjeta de video discreta.

Entonces, ¿qué vemos? El uso de PCIe 3.0 x4, si es posible, es ciertamente preferible, pero no necesario: aporta literalmente un 10% de rendimiento adicional a las unidades NVMe de clase media (en su segmento inicialmente superior). E incluso entonces, debido a operaciones que, en general, no se encuentran con tanta frecuencia en la práctica. ¿Por qué se implementa esta opción particular en este caso? En primer lugar, existía esa oportunidad, pero la reserva no es suficiente para el bolsillo. En segundo lugar, hay unidades incluso más rápidas que nuestro Patriot Hellfire de prueba. En tercer lugar, hay áreas de actividad en las que las cargas "atípicas" para un sistema de escritorio son bastante típicas. Además, aquí es donde el rendimiento del sistema de almacenamiento de datos, o al menos la capacidad de hacer que parte del mismo sea muy rápido, es más crítico. Pero esto no se aplica a las computadoras personales comunes.

En ellos, como vemos, el uso de PCIe 2.0 x2 (o, en consecuencia, PCIe 3.0 x1) no conduce a una disminución drástica del rendimiento, solo entre un 15 y un 20%. ¡Y esto a pesar de que en este caso limitamos cuatro veces las capacidades potenciales del controlador! Para muchas operaciones este rendimiento es suficiente. Una línea PCIe 2.0 ya no es suficiente, por lo que tiene sentido que los controladores admitan PCIe 3.0 y, dada la grave escasez de líneas en un sistema moderno, esto funcionará bien. Además, el ancho x4 es útil: incluso si el sistema no admite versiones modernas de PCIe, aún así le permitirá trabajar a velocidad normal (aunque más lenta de lo que podría) si hay un ancho más o menos ancho. ranura.

En principio, una gran cantidad de escenarios en los que la propia memoria flash resulta ser el cuello de botella (sí, esto es posible y es inherente no solo a la mecánica), lleva al hecho de que los cuatro carriles de la tercera versión de PCIe en este son aproximadamente 3,5 veces más rápidos que el primero; el rendimiento teórico de estos dos casos difiere 16 veces. Lo que, por supuesto, no significa que deba apresurarse a dominar interfaces muy lentas: su tiempo se acabó para siempre. Lo que pasa es que muchas de las posibilidades de las interfaces rápidas sólo podrán realizarse en el futuro. O en condiciones que un usuario normal de una computadora normal nunca encontrará directamente en su vida (a excepción de aquellos a quienes les gusta compararse con quién sabe qué). En realidad, eso es todo.

Y los PCI-X son conectores ranurados que tienen pines con una inclinación de 0,05 pulgadas. Las ranuras están ubicadas un poco más lejos del panel posterior que ISA/EISA o MCA. Los componentes de la tarjeta PCI están ubicados en la superficie izquierda de las tarjetas. Por esta razón, la ranura PCI más externa generalmente comparte la ranura del adaptador (una ranura en la pared posterior de la caja) con la ranura ISA adyacente. Esta ranura se denomina ranura compartida; en ella se puede instalar una tarjeta ISA o PCI.

Las tarjetas PCI pueden diseñarse para señales de interfaz de 5 V y 3,3 V, además de ser universales. Las ranuras PCI tienen niveles de señal correspondientes a la fuente de alimentación de los chips de los dispositivos PCI en la placa base (incluido el puente principal): 5 V o 3,3 V. Para evitar conexiones erróneas, las ranuras tienen claves que determinan la tensión nominal. Las claves son las filas faltantes de los contactos 12, 13 y/o 50, 51:

  • para una ranura de 5 V, la llave (partición) está ubicada en los contactos 50, 51 (más cerca de la pared frontal de la caja); dichas ranuras están canceladas en PCI 3.0;
  • para una ranura de 3,3 V, la partición está ubicada en los pines 12, 13 (más cerca de la pared trasera de la caja);
  • no hay particiones en las ranuras universales;
  • en los conectores de borde de las tarjetas de 5 V hay ranuras coincidentes sólo en el lugar de los contactos 50, 51; dichas tarjetas se cancelan en PCI 2.3;
  • en tarjetas 3.3 en las ranuras solo en el lugar de los contactos 12, 13;
  • Las tarjetas universales tienen ambas llaves (dos ranuras).

Las claves no permiten instalar una tarjeta en una ranura con una tensión de alimentación inadecuada. Las tarjetas y las ranuras se diferencian únicamente en la fuente de alimentación de los circuitos buffer, que proviene de las líneas +V I/O:

  • en la ranura “5 V”, se suministra + 5 V en la línea de E/S +V;
  • en la ranura “3,3 V”, se suministra + (3,3–3,6) V en la línea de E/S +V;
  • en la tarjeta “5 V”, los chips buffer están diseñados para alimentación de + 5 V únicamente;
  • en la tarjeta “3,3 V”, los chips de búfer están diseñados solo para fuente de alimentación de + (3,3–3,6) V;
  • En una tarjeta universal, los chips buffer permiten ambas opciones de energía y normalmente generarán y recibirán señales de acuerdo con las especificaciones de 5 o 3,3 V, dependiendo del tipo de ranura en la que esté instalada la tarjeta (es decir, del voltaje en el + V I/ O contactos).

En las ranuras de ambos tipos hay tensiones de alimentación de + 3,3, + 5, + 12 y –12 V en las líneas del mismo nombre. PCI 2.2 define una línea adicional de 3,3 Vaux: alimentación "de reserva" + 3,3 V para dispositivos que generan la señal PME# cuando la alimentación principal está apagada.

¡NOTA!

Lo anterior son disposiciones de las especificaciones oficiales de PCI. En las placas base modernas, las ranuras que se encuentran con mayor frecuencia son las de 5 voltios. Sin embargo, el voltaje en las líneas de E/S +V y los niveles de señal de la interfaz son de 3,3 voltios. Todas las tarjetas modernas con teclas de 5 voltios funcionan normalmente en estas ranuras; sus circuitos de interfaz funcionan con fuentes de alimentación de 3,3 y 5 V. La interfaz con fuente de alimentación de 5 voltios sólo puede funcionar a frecuencias de hasta 33 MHz. Las placas base "verdaderas" de 5 V sólo estaban disponibles para los modelos 486 y Pentium anteriores.

Las más comunes son las ranuras de 32 bits que terminan en los pines A62/B62. Las ranuras de 64 bits son menos comunes, son más largas y terminan en los pines A94/B94. El diseño de los conectores y el protocolo permiten instalar tarjetas de 64 bits en ranuras de 64 y 32 bits, y viceversa, tarjetas de 34 bits en ranuras de 32 y 64 bits. En este caso, la profundidad de bits del intercambio corresponderá al componente más débil.

Para señalar la instalación de una tarjeta y su consumo de energía, se proporcionan dos contactos en los conectores PCI: PRSNT1# y PRSNT2#, al menos uno de los cuales está conectado al bus GND de la tarjeta. Con su ayuda, el sistema puede determinar la presencia de una tarjeta en la ranura y su consumo de energía. La codificación del consumo de energía se da en la tabla; Aquí también se proporcionan los valores para tarjetas PCI pequeñas.

Las tarjetas y ranuras PCI-X corresponden mecánicamente a tarjetas y ranuras de 3,3 voltios; El voltaje de suministro + V E/S para PCI-X Modo 2 está configurado en 1,5 V.

La figura muestra tarjetas PCI en el diseño de ordenadores compatibles con PC/AT. Las tarjetas de tamaño completo (Tarjeta larga, 107×312 mm) rara vez se utilizan; las tarjetas acortadas (Tarjeta corta, 107×175 mm) se utilizan con más frecuencia, pero muchas tarjetas también tienen tamaños más pequeños. La tarjeta tiene un marco (soporte), estándar para el diseño ISA (anteriormente había tarjetas con un marco en el estilo MCA de IBM PS/2). Para tarjetas Low Profile, la altura no supera los 64,4 mm; sus soportes también son más cortos en altura. Estas tarjetas se pueden instalar verticalmente en cajas de 19 pulgadas con una altura de 2U (aproximadamente 9 cm).

Las asignaciones de pines del conector de la tarjeta PCI/PCI-X se muestran en la siguiente tabla.

Fila BFila AFila BFila A
-12V 1 TRST# TIERRA/M66EN 1 49 AD9
TCK 2 +12V GND/Tecla 5V/MODO 2 50 TIERRA/Llave 5V
Tierra 3 TMS TIERRA/Llave 5V 51 TIERRA/Llave 5V
TDO 4 TDI AD8 52 C/ES 0 #
+5V 5 +5V AD7 53 +3,3V
+5V 6 INTA# +3,3V 54 AD6
INTB# 7 INTC# AD5 55 AD4
INTD# 8 +5V AD3 56 Tierra
PRSNT1# 9 ECC 5 2 Tierra 57 AD2
ECC4 2 10 +V E/S AD1 58 AD0
PRSNT2# 11 ECC 3 2 +V E/S 59 +V E/S
TIERRA/Llave 3.3V 12 TIERRA/Llave 3.3V ACK 64#/ECC 1 60 REQ 64 #/ECC 6
TIERRA/Llave 3.3V 13 TIERRA/Llave 3.3V +5V 61 +5V
ECC2 2 14 3.3Vaux 3 +5V 62 +5V
Tierra 15 primero# Fin del conector de 32 bits
CLK 16 +V E/S Reservar 63 Tierra
Tierra 17 GNT# Tierra 64 C/BE 7#
REQ# 18 Tierra C/BE 6# 65 C/BE 5#
+V E/S 19 PME#3 C/BE 4# 66 +V E/S
AD31 20 30 d.C. Tierra 67 PAR 64 /ECC 7 2
29 d.C. 21 +3,3V 63 d.C. 68 62 d.C.
Tierra 22 28 d.C. 61 d.C. 69 Tierra
AD27 23 AD26 +V E/S 70 60 d.C.
25 d.C. 24 Tierra 59 d.C. 71 58 d.C.
+3,3V 25 AD24 57 d.C. 72 Tierra
C/BE3# 26 IDSEL Tierra 73 56 d.C.
AD23 27 +3,3V 55 d.C. 74 54 d.C.
Tierra 28 AD22 53 d.C. 75 +V E/S
AD21 29 AD20 Tierra 76 52 d.C.
AD19 30 Tierra 51 d.C. 77 50 d.C.
+3,3V 31 AD18 49 d.C. 78 Tierra
AD17 32 AD16 +V E/S 79 48 d.C.
C/BE 2# 33 +3,3V 47 d.C. 80 46 d.C.
Tierra 34 MARCO# 45 d.C. 81 Tierra
IRDY# 35 Tierra Tierra 82 d.C.44
+3,3V 36 TRDY# AD43 83 AD42
DISPOSITIVO# 37 Tierra AD41 84 +V E/S
PCIXCAP 4 38 DETENER# Tierra 85 40 d.C.
CERRAR CON LLAVE# 39 +3,3V 39 d.C. 86 38 d.C.
PERR# 40 SMBCLK 5 37 d.C. 87 Tierra
+3,3V 41 SMBDAT 5 +V E/S 88 36 d.C.
SERR# 42 Tierra 35 d.C. 89 AD34
+3,3V 43 PAR/ECC0 AD33 90 Tierra
C/BE 1# 44 15 d.C. Tierra 91 AD32
AD14 45 +3,3V Reservar 92 Reservar
Tierra 46 AD13 Reservar 93 Tierra
AD12 47 AD11 Tierra 94 Reservar
AD10 48 Tierra Fin del conector de 64 bits

¡Nota!

1 - La señal M66EN está definida en PCI 2.1 solo para ranuras de 3,3V.
2 - La señal se introdujo en PCI-X 2.0 (anteriormente había reserva).
3 - La señal se introdujo en PCI 2.2 (anteriormente había reserva).
4 - La señal se ingresa en PCI-X (en PCI - GND).
5 - Señales introducidas en PCI 2.3. En PCI 2.0 y 2.1, los pines A40 (SDONE#) y A41 (SBOFF#) se utilizaron para espiar caché; en PCI 2.2 se lanzaron (para compatibilidad en la placa base, estos circuitos se llevaron a un nivel alto con resistencias de 5 kOhm).

Las ranuras PCI tienen contactos para probar adaptadores a través de la interfaz JTAG (señales TCK, TDI, TDO, TMS y TRST#). En la placa base, estas señales no siempre se utilizan, pero también pueden organizar una cadena lógica de adaptadores probados a los que se pueden conectar equipos de prueba externos. Para la continuidad de la cadena, una tarjeta que no sea JTAG debe tener un enlace TDI-TDO.

En algunas placas base más antiguas, detrás de una de las ranuras PCI hay un conector Media Bus, que transporta señales ISA. Está diseñado para alojar un chipset de audio diseñado para el bus ISA en una tarjeta PCI. La mayoría de las señales PCI se conectan mediante una topología de bus pura, es decir, los pines de ranura del mismo nombre en el mismo bus PCI están conectados eléctricamente entre sí. Hay varias excepciones a esta regla:

  • Las señales REQ# y GNT# son individuales para cada ranura; conectan la ranura al árbitro (normalmente un puente que conecta este bus con uno superior);
  • La señal IDSEL para cada ranura se conecta (posiblemente a través de una resistencia) a una de las líneas AD, especificando el número de dispositivo en el bus;
  • las señales INTA#, INTB#, INTC#, INTD# se desplazan cíclicamente a lo largo de los contactos, asegurando la distribución de las solicitudes de interrupción;
  • la señal CLK se suministra a cada ranura individualmente desde su salida del buffer de sincronización; la longitud de los conductores conductores está ecualizada, asegurando la sincronización de la señal en todas las ranuras (para una tolerancia de 33 MHz ± 2 ns, para 66 MHz - ± 1 ns).

Entonces llegamos al puerto COM. Pero con él no todo es tan sencillo como con LPT, y su uso completo requerirá mucho más esfuerzo. El principal problema es también su principal ventaja: la transferencia de datos en serie. Si en LPT se transmite un byte de datos a lo largo de 8 líneas, un bit por línea, y el estado de cada línea se puede ver fácilmente, entonces en el puerto COM se transmite un byte de datos bit a bit a lo largo de una línea (en relación con tierra). , por supuesto) y ver lo que se transmite allí solo con LED no sirve. Para hacer esto, necesita un dispositivo especial: un convertidor de un flujo de datos en serie a uno paralelo, el llamado. USART (Transmisor receptor universal síncrono/asíncrono). Por ejemplo, está incluido en la placa base de una computadora equipada con un puerto COM o en cualquier microcontrolador más serio.


Espero que todavía estés desanimado por dominar el puerto COM. No todo es pesimismo. Algunos resultados se pueden obtener sin USART. Formulemos una tarea que implementaremos en la etapa inicial de trabajar con el puerto COM:


"Me gustaría conectar un LED a la computadora a través del puerto COM. Ejecuto el programa. Realizo alguna acción en este programa, el LED se enciende, hago otra cosa: el LED se apaga".


La tarea es bastante específica (teniendo en cuenta el hecho de que no se utiliza USART) y es una tarea puramente de “hágalo usted mismo”, pero es bastante factible y viable. Empecemos a implementarlo.


1.Puerto COM

Nuevamente, toma la unidad del sistema de tu PC y mira la parte trasera. Notamos que hay un conector de 9 pines: este es el puerto COM. En realidad puede haber varios (hasta 4). Mi PC tiene dos puertos COM (ver foto).


2. Extensión del puerto COM


3. Hardware

También tendremos que “retocar” el hardware, en el sentido de que será más complicado que con el primer dispositivo para el puerto LPT. El hecho es que el protocolo RS-232, a través del cual se intercambian datos en el puerto COM, tiene una relación lógica entre estado y voltaje ligeramente diferente. Si normalmente esto es lógico 0 0 V, lógico 1 +5 V, entonces en RS-232 esta relación es la siguiente: lógico 0 +12 V, lógico 1 -12 V.

Y, por ejemplo, después de recibir -12 V, no queda claro de inmediato qué hacer con este voltaje. Normalmente, los niveles RS-232 se convierten a TTL (0,5 V). La opción más sencilla son los diodos Zener. Pero propongo hacer este convertidor en un chip especial. Se llama MAX232.

Ahora veamos qué señales del puerto COM podemos ver en los LED. De hecho, en el puerto COM hay hasta 6 líneas independientes, que son de interés para el desarrollador de dispositivos de interfaz. Dos de ellos aún no están disponibles para nosotros: las líneas de datos en serie. Pero los 4 restantes están destinados a controlar e indicar el proceso de transferencia de datos y podemos “transferirlos” según nuestras necesidades. Dos de ellos están pensados ​​para el control desde un dispositivo externo y no los tocaremos por ahora, pero sí usaremos las dos últimas líneas restantes. Se llaman:

  • estrategia en tiempo real- Solicitud de transferencia. Una línea de interacción que indica que la computadora está lista para recibir datos.
  • DTR- La computadora está lista. Una línea de interacción que indica que la computadora está encendida y lista para comunicarse.

Ahora transferimos un poco su propósito y los LED conectados a ellos se apagarán o se encenderán, dependiendo de las acciones de nuestro propio programa.

Entonces, armemos un diagrama que nos permitirá llevar a cabo las acciones previstas.

Y aquí está su implementación práctica. Creo que me perdonarán que lo hice en una versión de placa tan tonta, porque no quiero hacer una placa para un circuito tan “altamente productivo”.


4. Parte del software

Aquí todo es más sencillo. Creemos una aplicación de Windows en Microsoft Visual C++ 6.0 basada en MFC para administrar dos líneas de comunicación del puerto COM. Para hacer esto, cree un nuevo proyecto MFC y asígnele un nombre, por ejemplo, PruebaCOM. A continuación, seleccione la opción de construir basado en el diálogo.

Da la apariencia de la ventana de diálogo de nuestro programa como en la Fig. a continuación, es decir, agregue cuatro botones, dos para cada una de las líneas. Uno de ellos es respectivamente necesario para “extinguir” la línea y el otro para “ponerla” en uno.

Clase CTestCOMDlg: CDialog público ( // Construcción pública: CTestCOMDlg(CWnd* pParent = NULL); // constructor estándar HANDLE hFile;

Para que nuestro programa pueda controlar las líneas de un puerto COM, primero hay que abrirlo. Escribamos el código responsable de abrir el puerto al cargar el programa.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("¡El puerto no se pudo abrir!", "Error", MB_ICONERROR); ) else ( MessageBox("El puerto se abrió correctamente", "Ok", MB_OK); )

Usando la función estándar Win API Crear archivo() abre el puerto COM COM2. A continuación, comprobamos el éxito de la apertura y mostramos un mensaje informativo. Aquí debemos hacer una nota importante: COM2 está en mi computadora, pero en tu computadora puedes conectarlo a otro puerto COM. En consecuencia, es necesario cambiar su nombre al puerto que esté utilizando. Puede ver qué números de puerto están presentes en su computadora de esta manera: Inicio -> Configuración -> Panel de control -> Sistema -> Hardware -> Administrador de dispositivos -> Puertos (COM y LPT).

Como resultado, la función CTestCOMDlg::OnInitDialog(), ubicado en el archivo PruebaCOMDlg.cpp, nuestra clase de diálogo debería tomar la forma:

BOOL CTestCOMDlg::OnInitDialog() ( CDialog::OnInitDialog(); // Agregar elemento de menú "Acerca de..." al menú del sistema. // IDM_ABOUTBOX debe estar en el rango de comandos del sistema. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); ) ) // Establece el icono para este cuadro de diálogo. El marco hace esto automáticamente // cuando la ventana principal de la aplicación no es un cuadro de diálogo SetIcon(m_hIcon, TRUE); // Establecer ícono grande SetIcon(m_hIcon, FALSE); // Establecer ícono pequeño // TODO: Agregar inicialización adicional aquí hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("¡No se pudo abrir el puerto!", "Ostbk", MB_ICONERROR); ) else ( MessageBox("Puerto abierto correctamente", "Ok", MB_OK); ) return TRUE // devuelve TRUE a menos que establezca el foco en un control)

Ahora agreguemos controladores para los botones de control de línea. Les di nombres apropiados: la función que establece uno en la línea DTR es OnDTR1(), 0 es OnDTR0(). Para la línea RTS, de la misma forma. Permítanme recordarles que el controlador se crea cuando hace doble clic en el botón. Como resultado, estas cuatro funciones deberían verse así:

Void CTestCOMDlg::OnDTR1() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 6); ) void CTestCOMDlg::OnDTR0() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 5); ) void CTestCOMDlg::OnRTS1() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 4); ) void CTestCOMDlg::OnRTS0() ( // TODO: Agregue el código del controlador de notificaciones de control aquí EscapeCommFunction(hFile, 3);

Déjame explicarte un poco cómo funcionan. Como puede ver, en su interior contienen una llamada a la misma función de Win API. FunciónCommEscapar() con dos parámetros. El primero de ellos es un identificador (HANDLE) para un puerto abierto, el segundo es un código de acción especial correspondiente al estado de línea requerido.

Eso es todo, compilamos y lanzamos. Si todo está bien, debería ver un mensaje sobre la apertura exitosa del puerto. A continuación, pulsando los botones correspondientes, hacemos parpadear los LED conectados al puerto COM.

© Ivanov Dmitri
diciembre de 2006




Arriba