El programador en serie que está utilizando está usando el puerto en serie para conectarse a la computadora, ¡pero no el protocolo RS232 estándar! Eche un vistazo más de cerca al esquema:
- el pin 4 (DTR) está asignado a MOSI. En un verdadero puerto serie de la placa base, este pin puede alternar entre alto y bajo, emulando así un modo de bitbang
- el pin 6 (DSR) y 7 (RTS) están asignados a SCK. Como DTR, RTS puede configurarse como alto o bajo, por lo tanto, junto con DTR, que permite la implementación de software de protocolos seriales síncronos personalizados
- el pin 8 (CTS) es un pin de entrada asignado a MOSI. Su valor se lee en el conmutador SCK.
DTR y RTS son los únicos pines del puerto serie que pueden ser modificados en bit. Pero existe la necesidad de una señal de reinicio. El diseñador de ese adaptador usa un truco. Envía un carácter 0x00 sin bits de parada sobre RS232 TX estándar, creando así un pulso de restablecimiento corto (que para algunas MCU deben invertirse).
Los datos reales en una comunicación serie RS232 estándar en realidad se envían solo a través de líneas Rx / Tx. Todas las demás son líneas de accesorios utilizadas por los dispositivos para señalar diferentes estados de operación o para indicar la disponibilidad de datos o la terminación de la transferencia.
Este es el problema con los adaptadores serie USB. La mayoría de ellos solo pueden usar líneas Rx / Tx y, por supuesto, solo el protocolo serie RS232 (asíncrono), que de ninguna manera es compatible con el protocolo de programación AVR (SPI, síncrono). Por lo tanto, la única forma de comunicarse a través del puerto serie por SPI es usar líneas alternativas y emular el protocolo en el software.
Puede ver en este foro que en algunos casos funciona con adaptadores USB-serie, pero en la mayoría de las situaciones no es así.
Pensé que la mayoría o todos los microcontroladores de los microcontroladores de la serie ATmega no tienen soporte USB.
¿Qué dice sobre: ATmega 8U2, 16U2, 16U4, 32U2, AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647, AT90USB82. Lista completa de aquí .
¡Pero USBasp no está usando una de esas MCU! Mirando su esquema, podemos ver que usa una resistencia de pull-up en la línea D, lo que significa que le indica al PC que es Un dispositivo de baja velocidad (1.5 Mb / s). Y el software emula el bus USB a través de un puerto de E / S de uso general (se puede ver en el código fuente del firmware AVR - archivo usbconfig.h
):
#define USB_CFG_IOPORTNAME B
/* This is the port where the USB bus is connected. When you configure it to
* "B", the registers PORTB, PINB and DDRB will be used.
*/
#define USB_CFG_DMINUS_BIT 0
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port.
*/
#define USB_CFG_DPLUS_BIT 1
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
* This may be any bit in the port. Please note that D+ must also be connected
* to interrupt pin INT0!
*/
#define USB_CFG_CLOCK_KHZ 12000
/* Clock rate of the AVR in MHz. Legal values are 12000, 16000 or 16500.
* The 16.5 MHz version of the code requires no crystal, it tolerates +/- 1%
* deviation from the nominal frequency. All other rates require a precision
* of 2000 ppm and thus a crystal!
* Default if not specified: 12 MHz
*/