Serie inDetail - komplexe Themen verständlich dargestellt

SPI Schnittstelle und erster Verbindungstest

Grundschaltung für die SPI Übertragung

Zum Aufspiele von Daten auf den ATtiny wird die integrierte SPI Schnittstelle verwendet. Ein Arduino UNO wird als Master eingesetzt, der die Kommunikation steuert. Mit dem UNO lassen sich so Daten aufspielen und Daten löschen. Im weiteren Kapitel wird damit auch ein Programm als Binärcode (Maschinencode) vom UNO auf den ATtiny übertragen.

Pinout
SPI Bezeichnung ATtiny UNO
MOSI 5 11
MISO 6 12
SCK 7 13
RESET (CS) 1 10

Informationen wie die SPI Schnittstelle grundsätzlich funktioniert kann hier nachgelesen werden.

Die speziellen Befehle zum Schreiben oder Lesen des Programmspeichers oder EEPROM ist im Datenblatt des ATtiny13A im Kapitel 17 beschreiben.

Verbindungstest: Auslesen der Typbezeichnung (Signature Bytes)

Grundschaltung für die SPI Übertragung

Als erster Test zum Überprüfen der Funktion sollen die drei "Signature Bytes" ausgelesen werden. Die drei Bytes sind so eine Art digitale Typbezeichnung. Der Ablauf ist im Datenblatt Kapitel 17.6.1 und die Befehle im Kapitel 17.6.2 beschrieben.

Das Signature Bytes Für den ATtiny13 sind hexadezimaler Schreibweise 1E | 90 | 07

#include <SPI.h> #define CS 10 void setup() { Serial.begin(115200); pinMode(CS, OUTPUT); SPI.begin(); SPI.beginTransaction(SPISettings(125000, MSBFIRST, SPI_MODE0)); // Start Programming digitalWrite(CS, LOW); delay(5); digitalWrite(CS, HIGH); // Kurzer RESET Impuls lt. Datenblatt delay(1); digitalWrite(CS, LOW); delay(20); // Wartezeit lt. Datenblatt // Instruction 'Programming Enable' SPI.transfer(0b10101100); SPI.transfer(0b01010011); SPI.transfer(0b00000000); SPI.transfer(0b00000000); delay(5); // Instruction "Read Signature Bytes" (3x) SPI.transfer(0b00110000); SPI.transfer(0b00000000); SPI.transfer(0); byte sB0 = SPI.transfer(0x00); SPI.transfer(0b00110000); SPI.transfer(0b00000000); SPI.transfer(1); byte sB1 = SPI.transfer(0x00); SPI.transfer(0b00110000); SPI.transfer(0b00000000); SPI.transfer(2); byte sB2 = SPI.transfer(0x00); // Stop Programming delay(5); digitalWrite(CS, HIGH); // Ausgabe der drei ATtiny13A Signature Bytes Serial.print(sB0, HEX); Serial.print(sB1,HEX); Serial.println(sB2,HEX); } void loop() { }