AVR ohne Boot Loader (also einen "von der Stange"), oder?
eigentlich egal, es sollte nur keine Firmware drauf sein, die SCK oder MISO manipuliert (wollen wir ja tristate haben). Am besten also einen gelöschten AVR. Außerdem müssen die Fuses "normal" sein (also SPIEN muß aktiv sein, RSTDSBL darf nicht aktiv sein, es muß eine Taktquelle geben (zB interner Oszillator)).
Üblicherweise ist das der Default "von der Stange".
Die "Programming Enable Serial Instruction" wäre übrigens 0x AC 53 00 00
When in sync. the second byte (0x53), will echo back when issuing the third byte of the Programming Enable instruction.
SPI sind ja quasi zwei Schieberegister, die ihren Inhalt simultan je zum anderen rüberschieben (getaktet durch den Master über die SCK).
Der Master (=Programmer) soll also erstmal ein 0xAC (10101100) senden als zweites 0x53. Währenddessen scheint der AVR (Target) "nichts" zurückzusenden (zumindest nicht 0x00 0xAC). Erst, wenn der Master das dritte (dummy ? ) Byte 0x00 rüberschiebt, sendet das Target die erhaltene 0x53 zurück.
nun gibt's aber kein digitales "nichts" - das Target könnte entweder 0x00 oder 0xFF oder irgendwas "senden" - oder es ist bis dahin tatsächlich tristate (und der Master=Programmer empfängt irgendwas (Antenne) zurück und ignoriert das.
Wenn also bei
beiden Teil-Experimenten aus #50 die Lichter ausbleiben, könnte man in einem weiteren Experiment das Programmieren durch einen zweiten AVR schrittweise simulieren.
Also Master und Slave sind 1:1 verbunden SCK und MOSI, der Master steuert außerdem Reset des Slaves an. MISO des Slaves wie in #50 an den beiden LEDs.
Außerdem am Master irgendwo ein Taster.
Die Masterfirmware legt erstmal SCK high und Reset low, und wartet auf den Taster wird der betätigt (einfache Software-Entprellung):
SCK low und warten...
Reset high und warten...
Reset low und warten...
Master macht SPI scharf und sendet 0xAC (und wartet...)
sendet 0x53 und wartet... (LEDs?)
sendet 0x00 (jetzt müßten die LEDs "blinken" (01010011), sehen könnte man das aber nur bei seehr geringer SPI-Frequenz), und wartet …
Master sendet das letzte 0x00, und setzt Reset wieder high (LEDs sollten aus sein/gehen)
(Master in Endlosschleife "stoppen")