Mit einer seriellen Schnittstelle oder einer parallelen Schnittstelle in der PC-Programmierung ist ein avr-Mikrocontroller sehr einfach und billig. Das Problem ist, dass kein moderner Computer mit einem seriellen oder parallelen Anschluss ausgestattet ist. Also, USB zu Seriell Konverter sollte die Lösung sein, aber leider nicht.
Es muss einen Unterschied zwischen der tatsächlichen seriellen Schnittstelle und der konvertierten seriellen Schnittstelle geben. Was ist es?
Eine andere verwandte Frage wäre, wie USBasp fast direkt mit dem PC kommuniziert? Ich dachte, die meisten oder alle Mikrocontroller der ATmega-Serie sind ohne USB-Unterstützung.
Ich habe diesen Link überprüft - AVR-Programmierer mit Seriell-zu-USB-Konverter
Ich weiß, dass es mehrere solcher Fragen gibt, aber da ich neu in der Embedded-Programmierung bin, brauche ich eine einfache Erklärung, um das Konzept zu verstehen. Danke.
Bearbeiten: Ich möchte eine Schaltung wie unten mit der konvertierten seriellen Schnittstelle (möglicherweise RS232) verwenden. Diese Schaltung ist für die tatsächliche serielle Schnittstelle ausgelegt. Mit einer konvertierten seriellen Schnittstelle kann ich möglicherweise eine gewisse Komplexität der Schaltung reduzieren.
Die Details finden Sie unter Simple Serial Programmer for AVR
Der von Ihnen verwendete serielle Programmierer verwendet eine serielle Schnittstelle, um eine Verbindung zum Computer herzustellen, jedoch nicht das Standard-RS232-Protokoll! Schauen Sie sich den Schaltplan genauer an:
DTR und RTS sind die einzigen Pins der seriellen Schnittstelle, die bitbanged werden können. Aber es besteht die Notwendigkeit für ein Reset-Signal. Der Designer dieses Adapters bedient sich eines Tricks. Er sendet ein 0x00-Zeichen ohne Stoppbits über Standard-RS232-TX und erzeugt so einen kurzen Reset-Impuls (der für einige MCUs invertiert werden muss).
Die eigentlichen Daten einer standardmäßigen seriellen RS232-Kommunikation werden tatsächlich nur über Rx/Tx-Leitungen gesendet. Alle anderen sind Hilfsleitungen, die von Geräten verwendet werden, um verschiedene Betriebszustände oder die Verfügbarkeit von Daten oder die Beendigung der Übertragung zu signalisieren.
Das ist das Problem bei USB-Seriell-Adaptern. Die meisten von ihnen können nur Rx/Tx-Leitungen und natürlich nur das serielle RS232-Protokoll (asynchron) verwenden, das auf keinen Fall mit dem AVR-Programmierprotokoll (SPI, synchron) kompatibel ist. Die einzige Möglichkeit, über die serielle Schnittstelle von SPI zu kommunizieren, besteht also darin, alternative Leitungen zu verwenden und das Protokoll in Software zu emulieren.
Sie können in diesem Forum sehen , dass es in einigen Fällen mit USB-Seriell-Adaptern funktioniert, aber in den meisten Situationen nicht.
Ich dachte, die meisten oder alle Mikrocontroller der ATmega-Serie sind ohne USB-Unterstützung.
Was sagen Sie zu: ATmega 8U2, 16U2, 16U4, 32U2, AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647, AT90USB82. Vollständige Liste von hier .
Aber USBasp verwendet keine dieser MCUs! Wenn wir uns das Schema ansehen, können wir sehen, dass es einen Pull-up-Widerstand auf der D-Leitung verwendet, was bedeutet, dass es dem PC signalisiert, dass es sich um ein Gerät mit niedriger Geschwindigkeit (1,5 Mb/s) handelt. Und die Software emuliert den USB-Bus über einen I/O-Port für allgemeine Verwendung (kann in der AVR-Firmware-Quellcodedatei eingesehen werden 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
*/
Ein paar spontane Gedanken aus bitterer Erfahrung:
Verwenden Sie nur FTDI USB-Seriell-Konverter, sie sind bei weitem die zuverlässigsten und am besten konfigurierbaren und am besten unterstützten. Andere können gut funktionieren, aber es ist eine Lotterie und das Leben ist zu kurz für fehlerhafte Hardware.
Überprüfen Sie, ob die "serielle" Ausgabe des Chips tatsächlich das ist, was Sie wirklich wollen; Konverter können je nach Konverter vollständige serielle RS232-, TTL- (0-5 V) oder serielle 0-3v3-Daten und manchmal RS485/RS422 ausgeben.
Wie bereits erwähnt, gibt es andere Einstellungen wie Start-/Stoppbits, Parität, Pufferung, Bit-Bang-Modi usw. usw., die Probleme verursachen können.
Das Puffern im USB-Seriell-Chip oder -Treiber kann insbesondere Probleme verursachen, wenn die Programmiersoftware versucht, bestimmte Zeitverzögerungen beim Programmieren auszuführen. Mit FTDI-Treibern können Sie all diese Dinge ändern.
Um solche Geräte programmieren zu können, muss der SERIAL-Port möglicherweise so konfiguriert werden, dass er im Bitbang-Modus arbeitet. Die meisten USB <-> Seriell-Konverter bieten diese Fähigkeit nicht.
Abhängig vom Typ des USB <-> SERIAL-Konverters können Sie ihn möglicherweise "konfigurieren", um einen solchen Modus zu ermöglichen.
www.ftdichip.com/Documents/AppNotes/AN232B-01_BitBang.pdf
Die FT232BM- und FT245BM-Chips können in einem speziellen Modus eingerichtet werden, in dem die normale Funktion der Chips ersetzt wird. Dieser Modus ändert die 8 Datenleitungen auf dem FT245BM oder die RS232-Daten- und Steuerleitungen des FT232BM auf einen bidirektionalen 8-Bit- Bus. Der Zweck dieses Modus war die Verwendung zum Programmieren von FPGA-Geräten. Es kann auch verwendet werden, um mit seriellen EEPPROMs zu kommunizieren oder einen Datenlatch zu laden.
Chris Stratton
Chris Stratton